Visualización de grandes conjuntos de datos con un folleto

32

Al usar Leaflet para visualizar un gran conjunto de datos (GeoJSON con características de 10,000 puntos), no es sorprendente que el navegador se bloquee o se bloquee. Una sub-muestra de 1000 características del mismo conjunto de datos funciona perfectamente. Desafortunadamente, no puedo compartir el conjunto de datos para que otros lo prueben.

¿Alguien tiene mejores soluciones para visualizar conjuntos de datos tan grandes? (el objetivo final es escalar esto a 2 millones de funciones) Incluso estoy dispuesto a considerar los marcos de visualización fuera de línea en el caso de alternativas basadas en el navegador como Polymaps o d3.js etc. se consideran incapaces.

Editar: Olvidó mencionar, el usuario debe poder filtrar el conjunto de datos por atributos. Por lo tanto, fuera de las funciones N , solo las funciones n < = N que coincidan podrían necesitar ser representadas dinámicamente.

    
pregunta Imad 30.09.2012 - 23:40

6 respuestas

21

Soy el autor del folleto. Hay un increíble complemento de agrupación en clústeres para esto, Leaflet.markercluster . Es muy rápido y eficiente (vea el ejemplo de marcadores de 50k), se ve y funciona muy bien con animaciones agradables, y tiene muchas opciones que se adaptan a sus necesidades.

    
respondido por el Mourner 16.10.2012 - 10:34
15

Puede usar TileMill y representar puntos como imágenes de mapa de bits, con una interactividad rápida de UTFGrid . Se escala a millones de puntos y polígonos, como este mapa censal , ya que envía de manera inteligente solo los datos necesarios para áreas específicas, exactamente cuando sea necesario.

Por lo que sé, no hay otros métodos rápidos para hacer esto, aparte de tener un servidor WFS muy rápido, que es bastante difícil de mantener / escalar para muchos espectadores.

Divulgación: trabajo para MapBox , escribí un poco del código. Pero TileMill es libre / de código abierto, etc.

    
respondido por el tmcw 01.10.2012 - 02:19
7

¿Has mirado en el agrupador de folletos? Un blog escrito por el autor lo describe. aquí

Otra opción que vale la pena echarle un vistazo puede ser utilizar un folleto en combinación con GIS Cloud . Eche un vistazo a esta demostración para ver cómo maneja muchas geometrías muy rápidamente. Muy impresionante. No estoy afiliado de ninguna manera con GISCloud.

    
respondido por el Kelso 01.10.2012 - 01:15
7

Nunca debes mostrar millones de puntos en un mapa. No solo debido a los principales problemas de rendimiento, sino también desde la perspectiva del usuario, ya que para ellos seguramente será difícil interpretar estos datos. Utilice algunos medios para agregar los datos (agrupamiento, agregación a áreas de polígonos, etc.) combinados con diferentes tipos de visualización en diferentes niveles de zoom (por ejemplo, mostrar los datos de puntos "sin procesar" solo en niveles de zoom muy altos y usar datos agregados en cualquier otro lugar). Un ejemplo sería un sitio de bienes raíces como zillow.com .

    
respondido por el chriserik 01.10.2012 - 01:21
0

Le sugiero que reduzca la cantidad renderizada de características de puntos: el ojo humano no podrá ver 10,000 puntos, por no hablar de 2,000,000.

Lo que podrías intentar es solicitar dinámicamente el conjunto de datos desde un servidor personalizado (que deberías configurar), por ejemplo,

    map = ...
    map.on('moveend', function(e) {
        getGeoJson(e);
    });
    map.on('zoomend', function(e) {
        getGeoJson(e);
    });
    map.setView([2,3], 2);

    function getGeoJson(event) {
        // todo determine current viewport
        $http.get('someGeoJsonDataProvider.someLanguage?currentView=[lat0,lon0,lat1,lon1]').then(function (resp) {
            // todo clear layers
            // new layer
            map.addLayer(
                L.geoJson(resp.data)
            );
        });
    }

Su servidor luego calculará qué puntos devolver, dependiendo de lo que el usuario quiera ver en este momento. Según el factor de zoom y el recorte, solo tendrá que devolver un porcentaje muy pequeño de puntos sin empeorar la experiencia del usuario.

Desventajas: configuración de un servidor (debería encontrar bibliotecas para filtrar los puntos geográficos) & procesamiento más lento (después de cada zoom o arrastre, se debe realizar una solicitud del servidor)

    
respondido por el Blauhirn 27.11.2016 - 03:06
-4

Tuve soluciones para mapear de 50 a 100 millones de registros, necesitas usar soluciones del lado del servidor para hacer grid y dinámicas. No puede responder en las API de mapas web (Google u otras) para hacer la representación del lado del cliente ...

[http://96.231.36.9:8080/rbgis/google_map.html◆◆1] Pruebe los enlaces anteriores y vea cómo

    
respondido por el bdv_engine 04.09.2013 - 17:06

Lea otras preguntas en las etiquetas