2017-02-01 17 views
0

Я создаю карту leaflet.js с двумя различными слоями данных JSON, сохраненными как js-файлы.Соедините геомаркеры с двумя слоями данных с линиями

Первый файл данных содержит геолокации некоторых редакций и идентификационный номер редакции, второй содержит геолокации некоторых статей, а также идентификационный номер редакции.

Я хочу, чтобы построить эти места и соединить все статьи с идентификатором X с помощью линий редакций с идентификатором X.

Оба слоя данных сохраняется в качестве переменных. Я знаю, как строить геолокации, но я не могу понять, как соединить геодезические слои 2 с соответствующими геоданными слоя 1 с линиями. Какие-либо предложения?

Это то, что я сделал до сих пор:

function myFunction() { 

var map = L.map('map').setView([51.101516, 10.313446], 6); 
    // improve experience on mobile 
    if (map.tap) map.tap.disable(); 
    L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', { 
    attribution: 'Tiles © Esri — Esri, DeLorme, NAVTEQ', 
    maxZoom: 16 
}).addTo(map); 
    map._layersMinZoom=5; 


for (var i in artikeldaten){ 
     data = artikeldaten[i]; 

     L.circleMarker([data.lat, data.long], { 
      radius: 4, 
      color: '#000', 
      fillColor: '#000', 
      fillOpacity: 1, 
     }).addTo(map) 

     } 

for (var i in blogdaten){ 
     data = blogdaten[i]; 

    L.circleMarker([data.lat, data.long], { 
      radius: 5, 
      color: '#000', 
      fillColor: '#000', 
      fillOpacity: 1, 
     }).addTo(map)    
     } 
} 

И вот как выглядит данные, как:

var artikeldaten = [ 
{ 
    "ID": 12, 
    "long": 6.7667818, 
    "lat": 51.2135308, 
}, 
{ ... and so on 
+0

Что мощность идентификаторов? Есть ли несколько 'artikel' per 'blogdaten', или есть несколько' blogdaten 'за' artikel' или что-то еще? – IvanSanchez

+0

Не так ли просто, как создать L.Polyline между вашей новостной комнатой и каждой ее статьей? http://leafletjs.com/reference-1.0.3.html#polyline – YaFred

+0

есть несколько артикулов в блоге! И для Francelmage: я тоже так думал, но я просто не могу понять, как это сделать автоматически, потому что я не могу понять, как прокручивать два источника данных одновременно. –

ответ

1

Если я понимаю проблему хорошо, вы должны поставить одну из сначала ваши списки в ассоциативном массиве.

var newsroomsById = {}; // key: ID 

for(i=0; i<newsrooms.length; i++) { 
    newsroomsById[newsrooms[i].ID] = newsrooms[i]; 
} 

Затем вы можете сделать полилинии в то время как вы перебор Ваших статей

for(i=0; i<articles.length; i++) { 
    // retrieve newsroom 
    var newsroom = newsroomsById[articles[i].ID]; 
    // draw your polyline 
    var latlngs = [ 
     [articles[i].lat, articles[i].lng], 
     [newsroom .lat, newsroom.lng] 
    ]; 
    var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map); 
} 
+0

Большое спасибо! –

+0

Это замечательно! Возможно, у вас есть предложение для моей следующей задачи? Я хотел бы добавить событие click на bloglocations, где другие блоги размыты, чтобы вы могли лучше посмотреть на сеть с щелчком. Или одно и то же: поиск определенного идентификатора блога с помощью строки поиска, добавленной к карте. :) –

+0

Я предлагаю вам открыть еще один вопрос. В идеале, поставьте ссылку на то, что у вас есть на данный момент. У меня есть пример нескольких каналов здесь: http://www.franceimage.com/map/?llz=46.566414,2.4609375,6. Я попытаюсь настроить его, чтобы показать маркеры всех каналов (что я думаю, это то, что вы хотите) – YaFred