Geçenlerde Angular JS ve Leaflet kullanarak bir uygulama oluşturduk. Bir JSON dosyasındaki konum verileri dahil, açıkladığınız şeye çok benzer. Benim çözümüm blesh'a benzer.
İşte temel işlem.
Sayfalarımın birinde <map>
öğem var. Daha sonra, <map>
öğesinin Leaflet haritasının yerini alacak bir Direktifim var. Kurulumum biraz farklı çünkü JSON verilerini bir Fabrikaya yüklüyorum, ancak kullanım durumunuza göre uyarladım (hata varsa özür dilerim). Yönergede, JSON dosyanızı yükleyin, ardından her bir konumunuz arasında geçiş yapın (JSON dosyanızı uyumlu bir şekilde ayarlamanız gerekir). Ardından her lat/lng'de bir işaretleyici görüntüleyin. angularjs içinde
HTML
<map id="map" style="width:100%; height:100%; position:absolute;"></map>
Yönergesi
app.directive('map', function() {
return {
restrict: 'E',
replace: true,
template: '<div></div>',
link: function(scope, element, attrs) {
var popup = L.popup();
var southWest = new L.LatLng(40.60092,-74.173508);
var northEast = new L.LatLng(40.874843,-73.825035);
var bounds = new L.LatLngBounds(southWest, northEast);
L.Icon.Default.imagePath = './img';
var map = L.map('map', {
center: new L.LatLng(40.73547,-73.987856),
zoom: 12,
maxBounds: bounds,
maxZoom: 18,
minZoom: 12
});
// create the tile layer with correct attribution
var tilesURL='http://tile.stamen.com/terrain/{z}/{x}/{y}.png';
var tilesAttrib='Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>. Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.';
var tiles = new L.TileLayer(tilesURL, {
attribution: tilesAttrib,
opacity: 0.7,
detectRetina: true,
unloadInvisibleTiles: true,
updateWhenIdle: true,
reuseTiles: true
});
tiles.addTo(map);
// Read in the Location/Events file
$http.get('locations.json').success(function(data) {
// Loop through the 'locations' and place markers on the map
angular.forEach(data.locations, function(location, key){
var marker = L.marker([location.latitude, location.longitude]).addTo(map);
});
});
}
};
Numune JSON Dosyası
{"locations": [
{
"latitude":40.740234,
"longitude":-73.995715
},
{
"latitude":40.74277,
"longitude":-73.986654
},
{
"latitude":40.724592,
"longitude":-73.999679
}
]}
çok yardımcı oldu şerefe .. ben başarmak çalışıyorum Sadece bir şey .. işlevinden konusunda fikrin Tüm işaretçileri temizlemektir? – MomentH
açısal, her zaman bir dizi sıfırladıktan sonra yeniden başlatır, çünkü eminim denediniz. İlk önce şunu deneyebilirsiniz: '$ scope.pointsFromController = [];' işe yaramayabilir, eğer işe yaramazsa, o zaman öğeleri elle kaldırarak yapabilirsiniz: '$ scope.pointsFromController.splice (0, $ scope.pointsFromController.length); ' –