2016-08-07 17 views
0

ich erfahre > 2s bearbeitungszeit für die umwandlung einer 120 MB geojson datei zu protobuf durch Mapnik Vector Tile node bindings.mapnik vector fliese vs rohe geojson leistung

Am anderen Ende die rohen geosjon File-Serving nimmt unter 200 ms.

Ist das normal? Wenn ja, was ist der Zweck, Vektorkacheln über geojson zu bedienen (ich sehe es mit mapbox-gl-js)? Hier

ist ein Auszug aus meinem Code:

// Load GeoJson into memory 

var fs = require("fs"); 
var content = JSON.parse(fs.readFileSync("us_counties.json")); 


// Initialise Mapnik and mercator object 

mapnik.register_default_fonts(); 
mapnik.register_default_input_plugins(); 

var mercator = new SphericalMercator({ 
    size: 256 
}); 

// Vector Tile Router 

router.get('/:z/:x/:y.pbf', function(req, res) { 

    var bbox = mercator.bbox(
    +req.params.x, 
    +req.params.y, 
    +req.params.z, 
    false, 
    '4326' 
); 

    // Convert GEOJSON to protobuf VectorTile and Serve 

    var vtile = new mapnik.VectorTile(+req.params.z, +req.params.x, +req.params.y) 
    vtile.addGeoJSON(JSON.stringify(content), 'fixture_layer') 

    res.setHeader('Content-Encoding', 'deflate') 
    res.setHeader('Content-Type', 'application/x-protobuf') 


    zlib.deflate(vtile.getData(), function(err, pbf) { 
    res.send(pbf); 
    }) 
}); 

Antwort

2

GeoJSON und Vektor-Fliesen haben jeweils Stärken und Schwächen als Datenformate für MapBox GL.

  • Vektor Fliesen benötigen mehr Vorverarbeitung als GeoJSON
  • GeoJSON muss vollständig heruntergeladen werden, während Vektor-Fliesen können in Kacheln heruntergeladen werden je nach Bedarf das Ansichtsfenster zu füllen (es fast unmöglich sein würde, alle von Open Street Map zum Download als einzelnes X00 GB GeoJSON!)
  • GeoJSON client modifiziert werden kann, wohingegen Vektor Fliesen können nicht
  • GeoJSON ist Menschen lesbare während Vektor Fliesen

nicht sind Wenn GeoJSON für Sie arbeitet, ermutige ich Sie, es zu benutzen! Denken Sie nur an Fälle, in denen Ihre Benutzer möglicherweise 120 MB nicht schnell herunterladen können.

+0

Danke, aber in diesem speziellen Fall mache ich etwas falsch, dh ist es normal, dass Mapnik so viel Zeit braucht, um die Datei zu verarbeiten? Danke für deine Antwort. – Clouddie

+0

Es ist eine sehr CPU-gebundene Operation auf vielen seriellen Daten, so wie Sie es tun, also, es ist nicht überraschend zu hören, dass die Operation so lange dauert.Soweit was Sie falsch machen, diese Menge Vorverarbeitung, möchten Sie wahrscheinlich das Ergebnis speichern oder zwischenspeichern. Die von MVT verwendete Binärcodierung ist sehr effizient für die Übertragung, erfordert jedoch eine Vorverarbeitung, die Sie verwerfen, indem Sie die Abfrage beantworten, ohne das Ergebnis zur Wiederverwendung zu speichern. Um die Cache-Fähigkeit zu erhöhen, wird das binäre, differenzcodierte Format in Kacheln aufgeteilt (und dort haben Sie es, MVT). – marr75

0

Vector Kachel ist nicht verlustfrei, Vektor Kachel vereinfachen die Geometrie auch um die Ecke zu Kachelgitter Schnittpunkt. Also hier kommt das Problem, einige meiner Polygone in der Vektorkachel sind nicht korrekt gezeichnet. Sie müssen sich dieses Problems bewusst sein, weil es meine Pakete nicht verwendbar macht, da ich immer leicht feststellen kann, dass einige Paketlinien nicht korrekt zeichnen.

zweite vektorfliese nur unterstützung von mapbox GL js, geojson unterstützt von google map, openlayer, blättchen, bing map, mapquest, etc .... mapbox js.

Wenn Sie über die Leistung von GeoJSON Sorge, hier ist die Lösung:

auf Server-Seite, die Verwendung geobuf, serialisiert (codieren) GeoJSON zu Protokollpuffer Binärformat, es zu 20% der ursprünglichen GeoJSON Größe komprimieren. 120MB-geojson- 20MB geobuf.

Übertragen Sie 20MB geobuf vom Server über das Internet zum Client-Browser, verwenden Sie geobuf (javascript lib) erneut, um zu geojson zu dekodieren.

In Brower, machen GeoJSON direkt mit google map, bing Karte, Openlayers, Prospekt, etc ....

Diese geben Ihnen eine lossless und schnelle Reaktionslösung.