Como agrupar a sobreposição kml do Google Maps


8

Tenho vários milhares de marcadores armazenados em um arquivo kmz que carrego no Google Maps (v3 API).

Eu olhei em volta para encontrar uma maneira de agrupar os dados de sobreposição, mas sem sucesso.
MarkerClusterer parece bom, mas parece funcionar apenas com uma matriz de marcadores?

function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(25,-20);
    var myOptions = {
        zoom: 2,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var ctaLayer = new google.maps.KmlLayer('thedata.kmz');
    ctaLayer.setMap(map);

    //cluster
    var mcOptions = {gridSize: 50, maxZoom: 15};
    var mc = new MarkerClusterer(map, ctaLayer, mcOptions);
}

Como posso agrupar os marcadores na sobreposição, assim como o markerclusterer faz isso?

Respostas:


5

Na verdade, o arquivo KML é lido por um servidor do Google e depois é exibido no mapa como blocos de imagens. Portanto, você não tem acesso aos objetos de ponto reais. Se você deseja fazer cluster, precisará carregar o KML de outra maneira e analisar os pontos em uma matriz e, em seguida, poderá usar o cluster do lado do cliente que desejar.

Nos documentos da API do Google Maps V3 :

Como os componentes em um KmlLayer são renderizados sob demanda, a camada permite gerenciar facilmente a renderização de milhares de marcadores, polilinhas e polígonos. Observe que você não pode acessar esses objetos constituintes diretamente, apesar de cada um deles fornecer eventos de clique que retornam dados sobre esses objetos individuais.


1
Eu tenho cerca de 3500 marcadores no arquivo kml / kmz. Não consumiria muita memória carregá-los em uma matriz javascript? Além disso, imagino que levaria um bom tempo para carregar os marcadores.
22811 Reggie

1
Existem várias soluções para a abordagem de agrupamento. Geralmente, as opções do lado do servidor são as melhores. No entanto, se você deseja ir apenas para o lado do cliente, não precisa necessariamente carregar todos os 3500 pontos o tempo todo; por exemplo, você pode carregá-los apenas para uma escala e / ou extensão específica.
Anthony -GISCOE-

1
Então, o que é uma boa solução do lado do servidor? Usando simpleXML para carregar o kml e, em seguida, produzi-lo como uma matriz (muito grande) no javascript do google maps?
reggie

1
Use o servidor para fazer cluster (por exemplo, apenas google para 'cluster do lado do servidor do google maps'). O cliente faria solicitações para obter apenas os pontos dos locais do cluster, não todos os dados.
Anthony -GISCOE-

2

Isso é possível. Você pode usar uma biblioteca de analisador Javascript KML que permite acessar todos os dados em cada marcador.

No Maps V2, o melhor estava aqui:

econym.org.uk/gmap/egeoxml.htm

Na V3, você pode usar um destes 2:

code.google.com/p/geoxml3/

code.google.com/p/geoxml/

Uma vez usado, você pode fazer coisas como percorrer cada marcador KML e usar o javascript para agrupar pontos no mesmo local e usar o JS para mostrar janelas de informações diferentes para cada marcador no mesmo local.

Eu faço isso no meu site Your Mapper aqui. Clique em um marcador numerado preto para vê-lo em ação:

http://www.yourmapper.com/map/111/crime-reports/crime-in-metro-louisville-ky-since-jan-2003.htm

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.