Постоянная загрузка данных GeoJSON для Leaflet.js

Мне нужно загрузить данные geoJSON из базы данных postgres, которая довольно тяжелая. Данные составляют около 1 МБ, тогда как остальная часть кода составляет около 35 КБ.

Какой может быть лучший способ сделать страницу быстрее при загрузке?

Я думал о загрузке geoJSON через jQuery AJAX?

Любое другое предложение или вариант? Может быть, сжатие?

Благодарю.

1 ответ

Я бы посмотрел на TopoJSON, который творит чудеса по размеру GeoJSON.

TopoJSON - это расширение GeoJSON, которое кодирует топологию. Вместо того, чтобы представлять геометрию дискретно, геометрия в файлах TopoJSON сшивается из общих сегментов линии, называемых дугами. TopoJSON устраняет избыточность, предлагая гораздо более компактные представления геометрии, чем с GeoJSON; типичные файлы TopoJSON на 80% меньше их эквивалентов GeoJSON.

https://github.com/mbostock/topojson

Вы можете кодировать существующие файлы GeoJSON с помощью утилиты командной строки:

topojson -o output.json input.json

или в вашем случае, если это возможно, используйте serveride api:

var topojson = require("topojson");
var collection = {type: "FeatureCollection", features: […]}; // GeoJSON
var topology = topojson.topology({collection: collection}); // TopoJSON

В то время как на стороне клиента вы несериализуете TopoJSON, используя clientide api:

var geoJson = topojson.feature(topology, object);

В идеале можно кэшировать файлы TopoJSON, а не генерировать их по каждому запросу, но это зависит от вашего приложения.

licensed under cc by-sa 3.0 with attribution.