15 votos

Cómo utilizar el Prospecto de manera eficiente mostrar partes de un enorme conjunto de datos?

Sigo viendo no SIG web de los desarrolladores de este problema, y no estoy seguro de cuál es la solución.

  1. Hay algún conjunto de datos de miles de artículos.
  2. Queremos mostrar un mapa para el usuario, con el visible subconjunto de ellos se muestra como interactivo, puede hacer clic elementos.

¿Qué métodos hay para hacer esto?

Puedo pensar, pero no son muy satisfactorios, por eso me pregunto ¿qué más hay:

  1. Almacenar todos los datos en un archivo GeoJSON, la transferencia para el navegador, y dejar que el Prospecto de la pantalla. Problema: en realidad no trabajo con grandes conjuntos de datos. TopoJSON eleva el límite un poco. También hace un gran retraso en la carga de la página.

  2. El uso de Mapbox, almacenar todos los datos en una capa interactiva en Mapbox, y el uso de Mapbox.js para mostrarlo. Funciona muy bien, pero cuesta dinero, y no puede alojar a ti mismo.

  3. El uso de GeoServer para acceder a una base de datos PostGIS, el uso de la WFS-geojson folleto plugin para acceder a los datos de allí. Probablemente trabaja, pero el WFS-geojson Folleto plugin no parece ser mantenida más.

  4. El uso de CartoDB, almacenar todos los datos en un CartoDB de la tabla, y el uso de CartoDB.js para mostrarlo. Funciona muy bien, pero puede ser muy caro. Es posible que el host a ti mismo, pero la instalación de CartoDB es no trivial.

Todo esto me hace pensar que debe haber algo mucho mejor, libre de manera de que me estoy perdiendo. ¿Qué es?

EDITAR

Tal vez me escribió la WFS-geojson plugin con demasiada facilidad. Hay una bifurcación, que aún se ve alguna actividad (hace 4 meses): https://github.com/johanlahti/azgs-leaflet

4voto

Ok, mi supuestos en los 2 eran incorrectos. Usted puede utilizar mapbox.js. El resultado final será un poco diferente, creo yo - los marcadores propios de la estática capa de trama, pero lo que se puede hacer clic.

La especificación que se hace a gran escala de la interactividad de trabajo es https://github.com/mapbox/utfgrid-spec

Se implementa en clientside https://github.com/danzel/Leaflet.utfgrid (folleto plugin) y también mapbox.js.

Serverside se implementa en https://github.com/mapbox/tilelive.js y, por lo tanto TileMill por ejemplo: http://tilemill-server/tile/projectname/7/115/78.grid.json

También implementado en TileStache, pero no tilestream o mbtiles-servidor. El UTFgrid de datos parece ser almacenados en los mbtiles archivo de TileMill, pero es ignorado por aquellos.

Así que no sólo no necesita mapbox.com usted no necesita mapbox.js cualquiera de los dos. Mapbox.js la mayoría parece pegamento cosas juntos por conveniencia: una sola llamada que crea una instancia de un mapa, va a por los azulejos y agrega la interactividad.

Pero si usted hace uso de mapbox.js hay un poco de el rompecabezas estoy falta, y eso es tilejson. Dar mapbox.json el tilejson archivo correspondiente a su mapa.

1voto

keyser Puntos 263

Lo siento por la respuesta tardía, pero también existe el folleto-vector-capas plugin que tiene soporte para postGIS servicios http://jasonsanford.github.io/leaflet-vector-layers/demos/postgis-restful-web-service-framework/

Por lo que se ve, se puede filtrar el servicio.

He usado este plugin para los servicios de ArcGIS y que ha sido muy buena.

Espero que ayude, Rowan

0voto

Gregslu Puntos 8

Si usted no puede encontrar la solución, sin embargo, aquí hay uno: http://gis.xyz/leaflet.html#

 var owsrootUrl = 'http://217.8.255.188:8080/geoserver/opengeo/ows';

 var defaultParameters = {
     service : 'WFS',
     version : '2.0',
     request : 'GetFeature',
     typeName : 'opengeo:evernote_geom',
     outputFormat : 'text/javascript',
     format_options : 'callback:getJson',
     SrsName : 'EPSG:4326'
};

var parameters = L.Util.extend(defaultParameters);
var URL = owsrootUrl + L.Util.getParamString(parameters);

var WFSLayer = null;
var ajax = $.ajax({
    url : URL,
    dataType : 'jsonp',
    jsonpCallback : 'getJson',
    success : function (response) {
       WFSLayer = L.geoJson(response, {
            style: function (feature) {
                return {
                    stroke: false,
                    fillColor: 'FFFFFF',
                    fillOpacity: 0
                };
            },
            onEachFeature: function (feature, layer) {
                popupOptions = {maxWidth: 600};
                layer.bindPopup('<h4>'+feature.properties.url+'</h4><br>'+feature.properties.title
                    ,popupOptions);
            }
        }).addTo(map);
    }
});

0voto

JB King Puntos 10105

La forma más rápida de hacer esto es https://mangomap.com, usted debería ser capaz de obtener toda la cosa fijado en unos 10 minutos sin necesidad de escribir una sola línea de código.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X