2015-05-27 1 views
0

Я преобразовал несколько шейп-файлов в KML, используя программное обеспечение Shp2kml2 от Zonums Solutions. Я сделал карту с уровнями KML (из которых я импортировал документы Google для получения URL-адреса). Моя карта находится по адресу: http://userpages.flemingc.on.ca/~catam/collab2.htmlgoogle maps - неправильная информация всплывающего окна

у меня есть: 6 полигонов KML слоев, 1 пункт KML слой, 1 Google Fusion точка Таблица слой

Но когда я пытаюсь нажать на определенную точку, поп - информация о том, что многоугольник, который находится в том же месте, что и конкретная точка.

Мой код:

var map, layer2; 
    function initialize() { 
    var ontario = new google.maps.LatLng(49.2867873, -84.7493416); 
    var mapOptions = { 
     zoom: 5, 
     center: ontario 
    } 

    var infoWindow = new google.maps.InfoWindow(); 
    var openInfoWindow = function (KMLevent) { 
     infoWindow.close(); 
     infoWindow.setOptions(
     { 
      content: KMLevent.featureData.infoWindowHtml, 
      position: KMLevent.latLng, 
      pixelOffset: KMLevent.pixelOffset 
     }); 
     infoWindow.open(map); 
    }; 

    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

    var kmlOptions = { 
     suppressInfoWindows: true, // do not to display an info window when clicked 
     preserveViewport: false, 
     map: map 
    }; 


    var urls = [ 
     'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkajc2OGZTZDZBV0k&export=download', // SCHOOLS, NDP, LIBERAL, PC1, PC2, PC3, 
     'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkQzRSdVB1TVRseU0&export=download', 'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkWFlscVM5N01lSDQ&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkbHNSTjhCN1dLQTg&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkdnRoYnN1bnpubEU&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkaHg1WlNKdU1VWHc&export=download' 
    ]; 

    layer2 = new google.maps.FusionTablesLayer({ 
    query: { 
     select: 'col9', 
     from: '1FzRSqRcxY37i7VtejqONHhAB-MrzFhakYSvZaIvo' 
    } 
    }); 
    layer2.setMap(map); 


    urls.forEach(function(url) { 
     var layer = new google.maps.KmlLayer(url, kmlOptions); 
     layer.setMap(map); 
     KmlLayer.setZIndex(999); 
     google.maps.event.addListener(layer, "click", openInfoWindow); 

    }); 

} 

//initialize(); 
google.maps.event.addDomListener(window, 'load', initialize); 

ответ

0

Похоже многоугольник слои становятся нанесены по точкам. Из-за этого, даже если вы думаете, что нажимаете на точку, фактическое событие клика генерируется на полигоне.

Одним из решений было бы построение полигонов сначала с последующими точками.

Если это невозможно, вы должны установить z-индекс слоя в зависимости от того, является ли он полигоном или точкой.

kmlLayer.setZIndex(999); 

Чем выше индекс z, тем выше будет слой. Я бы предложил использовать высокий z-индекс для точек, используя низкий z-индекс для полигонов. Это должно решить вашу проблему.

Первым вариантом будет перемещение URL-адреса для точек после URL-адресов многоугольника. Это должно работать без необходимости в z-index и работать без изменения какого-либо кода.

var urls = [ 
    'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkQzRSdVB1TVRseU0&export=download', 'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkWFlscVM5N01lSDQ&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkbHNSTjhCN1dLQTg&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkdnRoYnN1bnpubEU&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkaHg1WlNKdU1VWHc&export=download', 
    'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkajc2OGZTZDZBV0k&export=download', // SCHOOLS, NDP, LIBERAL, PC1, PC2, PC3, 
]; 

Второй вариант - удалить URL-адрес точек из массива и добавить его отдельно. Сначала запишите полигоны, как показано ниже.

var urls = [ 
    'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkQzRSdVB1TVRseU0&export=download', 'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkWFlscVM5N01lSDQ&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkbHNSTjhCN1dLQTg&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkdnRoYnN1bnpubEU&export=download',  'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkaHg1WlNKdU1VWHc&export=download', 
]; 

urls.forEach(function(url) { 
    var layer = new google.maps.KmlLayer(url, kmlOptions); 
    layer.setZIndex(10); 
    layer.setMap(map); 

    google.maps.event.addListener(layer, "click", openInfoWindow); 
}); 

После этого добавить слой точек

var pointsUrl = 'https://docs.google.com/uc?authuser=0&id=0B79b02nBK5vkajc2OGZTZDZBV0k&export=download'; // SCHOOLS, NDP, LIBERAL, PC1, PC2, PC3, 

var layer = new google.maps.KmlLayer(url, kmlOptions); 
layer.setZIndex(10); 
layer.setMap(map); 

google.maps.event.addListener(layer, "click", openInfoWindow); 
+0

У меня возникают проблемы, зная, куда вставить код в свой код. Я опубликовал свой пост, чтобы показать свой код. Чтобы уточнить, у меня есть: 5 слоев многоугольника KML, 1-слойный слой KML, 1 слой точек таблицы Google Fusion – Toronto23

+0

Привет, я обновил ответ. Попробуйте изменить положение URL-адреса. Дайте мне знать, если это не сработает. – Joyson

+0

Он работал для слоя уровня KML (школы). Однако мой точечный слой из таблицы google google теперь не отображается на карте. – Toronto23

Смежные вопросы