Crea un mapa interactivo sin servidor

8

He logrado crear una excelente aplicación de mapeo web usando mosaicos creados a partir de GeoWebCache y un conjunto de cuadrículas personalizado, pero ahora necesito agregar una superposición a los mapas base. La única interactividad que necesito es una ventana de información emergente simple que proviene de solo uno de los atributos.

Por defecto, el conjunto de datos de superposición es un ESRI Shapefile que es 180Mb, desde entonces he logrado simplificar el conjunto de datos usando ST_SimplifyPreserverTopology que ha reducido el tamaño del ESRI Shapefile a 28Mb. Sin embargo, como archivo GeoJSON, esto sigue siendo 78Mb, que es demasiado grande.

Luego probé CartoDB y cargué los datos en una tabla y luego agregué la capa vectorial en capas abiertas, pero el volumen de datos todavía es demasiado grande y la página HTML se bloquea.

Luego probé GIS Cloud y un WMS externo, pero eso está restringido a WGS84 y no tiene la opción de obtener información de características.

Luego comencé a mirar Topojson, que creo que funcionaría realmente bien en mi conjunto de datos, pero no creo que haya una manera de cargar un topojson en un mapa en OpenLayers 2.12 que necesito usar.

Mi otra opción era UTF-Grid, así que cargué los datos en tilemill y exporté un MbTiles que puedo extraer usando mbutil. Pero, por supuesto, UTF-Grid solo admite EPSG: 3857 (web mercator), que es diferente de mi proyección, EPSG: 27700. Por lo tanto, todos los archivos .json se nombran de manera diferente a mis mosaicos en caché subyacentes de geowebcache.

¿Hay alguna manera de crear una cuadrícula UTF pero en una proyección diferente?

Ese es el trasfondo y siento que he probado la mayoría de las opciones que conozco.

Entonces, simplemente necesito una capa de superposición interactiva en un mapa OpenLayers 2.12 pero no puedo usar ningún servidor como GeoServer / Mapserver o TileStache, etc. y no puedo tener ningún script del lado del servidor como PHP.

¿Alguien puede ofrecer algún otro consejo?

Gracias

tjmgis
fuente
topojson funcionaría bien con las capas abiertas 2.10 (en realidad convierte topojson a geojson antes de usarlo). Pero no resolvería su problema, ya que aún sería demasiado grande para procesar en la mayoría de los navegadores.
johanvdw
pruebe d3js bl.ocks.org/mbostock/4965422 797M shapefile para las áreas nacionales de tabulación de códigos postales. Simplificado usando TopoJSON (con -q 1e5 -s 3e-7)
Mapperz
@Mapperz que es una reducción impresionante de tamaño. ¿Puede topojson tener una proyección diferente a la de mercator esférico?
tjmgis
@johanvdw ¿tiene un ejemplo de topojson cargado en capas abiertas?
tjmgis
Proyección TopoJSON bl.ocks.org/mbostock/5557726
Mapperz

Respuestas:

3

Expandiendo mi comentario original:

Topojson puede funcionar bien con openlayers 2.10 (en realidad convierte topojson a geojson antes de usarlo). Pero no estoy seguro de que resuelva su problema, ya que aún puede ser demasiado grande para procesar en la mayoría de los navegadores. Un ejemplo sobre el uso de topojson en openlayers 2, basado en el ejemplo geojson de openlayers y algunos datos que utilicé en una publicación de blog .

http://www.gisky.be/cyclists/ol-topojson.html

El bit real que es importante es solo la segunda línea:

    $.getJSON('http://www.gisky.be/cyclists/f.json', function (data) {
        fusiegem = topojson.feature(data, data.objects.fusie);
        var geojson_format = new OpenLayers.Format.GeoJSON();
        var vector_layer = new OpenLayers.Layer.Vector();
        map.addLayer(vector_layer);
        vector_layer.addFeatures(geojson_format.read(fusiegem));
    });

Esta línea construye un objeto geojson (fusiegem) a partir del objeto de datos que es topojson.

johanvdw
fuente
@johanvwd habiendo fallado en el uso de D3 y topojson, voy a darle una oportunidad a su ejemplo. Muchas gracias por agregar el código
tjmgis
@johanvwd Modifiqué su código y lo puse a funcionar con éxito, pero es muy lento incluso en un topojson de 1.4Mb, y mucho menos es necesario usarlo, que es 8Mb. ¿Alguna otra idea?
tjmgis
Supongo que lo único que queda por hacer es hacer más generalizaciones en escalas de resumen y trabajar con mosaicos para escalas más bajas. Sin embargo, no conozco herramientas para hacer ese trabajo. Estoy seguro de que aparecerán en el futuro cercano o tal vez ya existan.
johanvdw
1

Esto suena como un trabajo para D3: http://bl.ocks.org/mbertrand/5218300

ChrisInCambo
fuente
¿Cómo ayudaría D3 a resolver el problema?
johanvdw
@ChrisInCambo: muchas gracias por el ejemplo que hace exactamente lo que busco, pero he tenido problemas para que D3 y mi topojson funcionen, así que he publicado una pregunta diferente
tjmgis
El error común con TopoJSON es no mirar dentro del JSON y comprender su estructura cuando se usa con D3. Si copia el código de ejemplo y reemplaza su TopoJSON con el suyo, debe asegurarse de que los objetos a los que se hace referencia en TopoJSON también existan en su JSON.
ChrisInCambo
1

Puede dividir los datos en archivos GeoJSON y nombrarlos según el mosaico. Una vez que se carga el mapa, puede consultar los mosaicos visibles y usar sus nombres / urls / coordenadas para solicitar los archivos GeoJSON apropiados, que coincidan con un archivo por mosaico.

La parte difícil es crear los archivos. Para esto, definitivamente necesitas usar una herramienta. Una vez que se crean los archivos, se cargan según sea necesario y en trozos tan pequeños que no abrumarán al navegador. Otro dolor aquí es tratar con los niveles de zoom. Tendrá que decidir qué características son visibles desde qué niveles y crear sus archivos en consecuencia.

bstempi
fuente