0

編集時にロードされません:はマップオブジェクトに直接これらの2つのメソッドを呼び出すと、問題を解決:地図は時々最初

leafletData.getMap().then(function(map) 
{ 
    map.invalidateSize(); 
    map._onResize(); 
}); 

私は(AngularJS用リーフレットディレクティブで少し、まだかなり刺激性の問題を持っていますhttps://github.com/angular-ui/ui-leaflet)とGoogle Mapsプラグイン(https://github.com/shramov/leaflet-plugins)があります。

何らかの理由で、マーカーが問題なくロードされることがありますが、地図が表示されないことがあります。ウェブサイトを更新すると役立ちますが、それは解決策ではありません...添付

スクリーンショット(自分の携帯電話で撮影したが、それはあまりにもデスクトップブラウザで起こる):一瞬の後に時々、マップのロード

image 1

しかし、無境界が設定された:それはのようになります(とほとんどの時間はありません)どのように

image 2

image 3

ビュー:

<div class="stations-map" ng-controller="mapCtrl" ng-show="mapObj.visible"> 
     <leaflet layers="mapObj.layers" lf-center="mapObj.center" bounds="mapObj.bounds" markers="mapObj.markers" height="480px" width="100%"></leaflet> 
    </div> 

コントローラ:任意の提案を事前にhttp://149.156.40.25/storm/

ありがとう:ウェブサイトへ

app.controller("mapCtrl", ['$scope', '$filter', 'propertyService', 'groupService', 'leafletBoundsHelpers', function ($scope, $filter, propertyService, groupService, leafletBoundsHelpers){ 
var properties = null; 

var mapObj = { 

    center: {}, 
    bounds: [], 
    markers: {}, 

    layers: { 

     baselayers: 
     { 
      googleRoadmap: {name: 'Google Streets', layerType: 'ROADMAP', type: 'google'} 
     } 

    }, 

    visible: false 

}; 

var resetMap = function() 
{ 
    mapObj.center = {}; 
    mapObj.bounds = []; 
    mapObj.markers = {}; 
}; 

var resetMapAndHide = function() 
{ 
    mapObj.center = {}; 
    mapObj.bounds = []; 
    mapObj.markers = {}; 
    mapObj.visible = false; 
}; 

var setMarkerMessage = function(res,item,property) 
{ 
    var location = item.location.name; 
    var value = null; 
    var value_unit = null; 

    if(res.data[item.id] == undefined) 
    { 
     return "<div id='popup-container'><div id='popup-value'>-</div><div id='popup-location'>" + location + "</div></div>"; 
    } 
    else if(properties[item.property].name == 'PM') 
    { 
     value = $filter('number')(res.data[item.id].value['PM2.5'], 2); 
     value_unit = " µg/m³"; 

     return "<div id='popup-container'><div id='popup-value'>" + value + value_unit + "</div><div id='popup-location'>" + location + "</div></div>"; 
    } 
    else if(properties[item.property].name == 'pressure') 
    { 
     value = $filter('number')(res.data[item.id].value[property.name]/100, 2); 
     value_unit = property.string_format.replace((/{(.*)}/.exec(property.string_format))[0],''); 

     return "<div id='popup-container'><div id='popup-value'>" + value + value_unit + "</div><div id='popup-location'>" + location + "</div></div>"; 
    } 

    value = $filter('number')(res.data[item.id].value[property.name], 2); 
    value_unit = property.string_format.replace((/{(.*)}/.exec(property.string_format))[0],''); 

    return "<div id='popup-container'><div id='popup-value'>" + value + value_unit + "</div><div id='popup-location'>" + location + "</div></div>"; 
}; 

var setNorthE = function(northE,item) 
{ 
    if ((northE.lat == null) || (northE.lat < item.location.latitude)) 
    { 
     northE.lat = item.location.latitude; 
    } 

    if ((northE.lng == null) || (northE.lng < item.location.longitude)) 
    { 
     northE.lng = item.location.longitude; 
    } 
}; 

var setSouthW = function(southW,item) 
{ 
    if ((southW.lat == null) || (southW.lat > item.location.latitude)) 
    { 
     southW.lat = item.location.latitude; 
    } 

    if ((southW.lng == null) || (southW.lng > item.location.longitude)) 
    { 
     southW.lng = item.location.longitude; 
    } 
}; 

$scope.mapObj = mapObj; 

propertyService.getProperties().then(function(response) 
{ 
    properties = response; 
}); 

$scope.$on('group-chosen', function(event,id) 
{ 
    var groupData = null; 

    resetMap(); 

    groupService.getGroupById(id).then(function(response) 
    { 
     return response.data; 

    }).then(function(response) 
    { 
     groupData = response; 

     return groupService.getGroupSensorValues(id); 

    }).then(function(response) 
    { 
     var groupProperty = properties[groupData.property.id]; 

     var northE = 
     { 
      lat: null, 
      lng: null 
     }; 

     var southW = 
     { 
      lat: null, 
      lng: null 
     }; 

     var i = 0; 

     angular.forEach(groupData.sensors, function(item) 
     { 
      // add markers 
      if ((item.location.latitude !== null) && (item.location.longitude !== null)) 
      { 
       mapObj.markers['m'+i] = {}; 
       mapObj.markers['m'+i]['lat'] = item.location.latitude; 
       mapObj.markers['m'+i]['lng'] = item.location.longitude; 

       mapObj.markers['m'+i]['icon'] = { 

        type: 'div', 
        iconSize: [25,25], 
        className: 'divCircle' 

       }; 

       mapObj.markers['m'+i]['getMessageScope'] = function() 
       { 
        return $scope; 
       }; 

       mapObj.markers['m'+i]['message'] = setMarkerMessage(response,item,groupProperty); 
       mapObj.markers['m'+i]['compileMessage'] = true; 

       mapObj.markers['m'+i]['popupOptions'] = { 
        closeButton: false 
       }; 
      } 

      setNorthE(northE,item); 
      setSouthW(southW,item); 

      i++; 
     }); 

     var bounds = []; 
     var northEast = []; 
     var southWest = []; 

     // temporary map's padding 
     northEast.push(northE.lat+0.0001, northE.lng+0.0001); 
     southWest.push(southW.lat-0.0001, southW.lng-0.0001); 

     bounds.push(northEast,southWest); 

     mapObj.bounds = leafletBoundsHelpers.createBoundsFromArray(bounds); 
    }); 

    mapObj.visible = true; 
    $scope.mapObj = mapObj; 
}); 

$scope.$on('station-chosen', function() 
{ 
    resetMapAndHide(); 
    $scope.mapObj = mapObj; 
}); 

$scope.$on('data-switched', function() 
{ 
    resetMapAndHide(); 
    $scope.mapObj = mapObj; 
});}]); 

リンク!

+0

私はこのプラグインを知りませんが、私はシンプルなマップのgoogleで問題を抱えていました。 マップにはダイジェストサイクルを許可し、マップを正しくレンダリングできる$ scope.applyまたは$ timeoutが必要です – LorenzoBerti

+0

Googleマップの場合の使用例を教えてください。 – Jakub

答えて

1

私はこのプラグインを知りませんが、私はGoogleマップに問題があったとき、私はそれがサイズ変更の問題に気づいたので、私はトリガーと私の問題は、イベントのサイズを変更し解決した、多分この例では、あなた

助けることができます
$scope.initializeMaps = function(test){ 
      if(test.gps){ 
       var arrLatLng = test.gps.split(','); 
       var latlng = new google.maps.LatLng(arrLatLng[0], arrLatLng[1]); 
      }else{ 
       var latlng = new google.maps.LatLng(37.42224,-122.0883822); 
      } 

      var myOptions = { 
       zoom: 9, 
       center: latlng, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 
      var map = new google.maps.Map(document.getElementById("map"), 
       myOptions); 

      var input = document.getElementById('maps-input'); 
      var searchBox = new google.maps.places.SearchBox(input); 

      map.addListener('click', function (e) { 
       placeMarker(e.latLng, map, test); 
      }); 

      map.addListener('bounds_changed', function() { 
       searchBox.setBounds(map.getBounds()); 

      }); 

      // THIS Is RESIZE EVENT THAT RENDER MAP 
      $timeout(function(){ 
       google.maps.event.trigger(map, 'resize'); 
       if (marker && test.marker) { 
        map.setCenter(marker.getPosition()); 
       } 
      },1); 

     }; 
     //}; 
     var marker; 

     function placeMarker(location, map, test) { 
      $scope.$apply(function() { 
       test.gps = location.lat() + "," + location.lng(); 

      }); 

      if (marker && test.marker) { 
       marker.setPosition(location); 

      } else { 
       marker = new google.maps.Marker({ 
        position: location, 
        map: map 
       }); 
      } 
      test.marker = true; 
     }; 
+0

ありがとうございました! 私の場合はそれほど問題ではありませんでしたが、それは私を別の解決策に導き、すべてがうまくいくようです: 'leafletData.getMap()。then(function(map){map.invalidateSize() ; map._onResize();}); ' – Jakub

+0

ようこそ! ;)私はあなたが解決してうれしい! ;) – LorenzoBerti

関連する問題