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);
})
});
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
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