При создании карты Leaflet, как можно вытянуть и преобразовать координаты GeoJSON в latLng? - PullRequest
0 голосов
/ 23 апреля 2019

Я делаю карту с помощью Leaflet и заполняю карту данными из файла GeoJSON.Я хочу использовать функцию distanceTo, но для этого требуется объект latLng.Есть ли способ «преобразовать» GeoJSON properties.geometry.coordinates в latLng?

У меня есть массив из 31 координаты, от использования метода push () в onEachLayer:

var coords = [];

onEachFeature : function(feature,layer) {
 coords.push(feature.geometry.coordinates)
 //console.log(coords)...

После этого массив координат заполняется массивом для каждой координаты.Есть ли способ «преобразовать» этот массив массивов в объект latLng, чтобы можно было использовать ditanceTo?

Конечная цель - запустить объекты latLng через цикл с помощью distanceTo, чтобы в каждом всплывающем окне отображалось расстояние отцентральная точка.

 var low = L.geoJson(hosp, {    
 pointToLayer: function(feature,latlng) {
  return L.circleMarker(latlng, {
        color: 'yellow',
         weight: 2,
         fillColor: 'green',
         fillOpacity: .7,
         radius:9

     });
 },

 filter: function (feature, layer) {
     if(feature.properties.DAILY_PAT <= '600'){
         return feature;}
 },


onEachFeature : function(feature,layer) {
 coords.push(feature.geometry.coordinates)
 //console.log(coords)

 layer.on('click',function(){

   layer.bindPopup("<b>Low Enrollement </b><br>"+"<b>School Name: </b>" 
+ feature.properties.FACILITY_N+"<br><b># of Students: </b>"
 + feature.properties.DAILY_PAT).openPopup()
   })
        ;  
   }
  }).addTo(map); 

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Поскольку вы порождаете L.CircleMarker с, а L.CircleMarker с имеют метод getLatLng() , вы можете отказаться от обработки координат самостоятельно. Просто обратитесь к экземпляру CircleMarker при расчете расстояния, например ::1007*

onEachFeature : function(feature,layer) {
  var distance = layer.getLatLng().distanceTo(centerPoint);
  layer.on('click',function(){
    layer.bindPopup("Distance to center: " + distance);
  });
}

Обратите внимание, что в этом случае переменная distance существует в области видимости, уникальной для каждой функции, поэтому нет необходимости в замыканиях . Звонки на onEachFeature() обратный вызов действуют здесь как закрытие.

0 голосов
/ 23 апреля 2019

Почему бы вам не создать массив координат с помощью LatLng объекта Leaflet?

var coords = [];

onEachFeature : function(feature,layer) {
  var coordinates = feature.geometry.coordinates;
  coords.push(L.LatLng(coordinates[1], coordinates[0])); // paramter's depending on your object
}

Затем используйте что-то вроде:

// suppose, centerCoordinates is LatLng object as well
centerCoordinates.distanceTo(coords[0]); 

ссылка на LngLat объект в Leaflet: https://leafletjs.com/reference-1.4.0.html#latlng
ссылка на distanceTo метод на LngLat: https://leafletjs.com/reference-1.4.0.html#latlng

...