2016-05-30 3 views
3

Я закончил поисковые запросы Google и обратился за помощью здесь. Мы сейчас обрабатываем KML-файл, используя geoXml3 со стороны клиента. Но в идеале я хотел бы предварительно обработать его на стороне сервера и отправить планги на стороне клиента. Поскольку файл KML имеет 18 Мбайт файл, и он берет навсегда для загрузки на стороне клиента, а затем клиент анализирует его и рисует многоугольник на карте Google.Как обрабатывать KML/GeoJSON в Nodejs?

Мы изменили KML-файлы на GeoJSON и уменьшили размер, сжали его - ведь цирк время отклика все еще не очень хорошее. Я просто хочу знать, есть ли способ/библиотека в узле, который может это сделать.

+1

Вы ищете библиотеку для преобразования kml-файла в geojson? – Dario

+0

Вам нужно обработать файл для каждого запроса, или это одноразовая обработка на стороне сервера? – HeadCode

+0

@HeadCode это один раз на слое нагрузки, у нас есть postgis для каждого запроса –

ответ

1

Когда вы говорите, что вы сжимаете файл, что вы имеете в виду? Если вы имеете в виду алгоритм, такой как zip или lha, это не обязательно значительно уменьшит размер файла. Вы хотите удалить сегменты линии из файла KML. В сокращении некоторой географической информации я обнаружил, что были пройдены много миль, которые варьировались менее чем на одну ступень от прямой линии. Поскольку точки данных были разнесены каждые несколько футов, это означало, что подавляющее большинство точек в файле KML можно было удалить, не внося существенного изменения в внешний вид геометрии. Поиск прямых сегментов относительно прост.

Вы также должны иметь в виду масштаб просматриваемой карты и расстояние между точками данных в файле KML. Даже если линии являются сложными кривыми, возможно, удастся удалить большое количество точек, пытаясь выровнять сегменты функций и уменьшить размер данных таким образом.

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

+0

Сжатие с использованием gzip Мы сократили время и время, чтобы загрузить изменилось с 120 до 15 секунд. Все еще кажется медленным!Я не думаю, что для этого есть какое-либо решение. –

+0

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

0

Существует ряд трюков, которые вы можете попытаться уменьшить загрузку & времени рендеринга многоугольника KML.

Как уже было предложено в предыдущих ответах, ключевым моментом является уменьшение размера ваших данных. Это можно сделать разными способами, в зависимости от вашего варианта использования:

  • Уменьшить количество точек, из которых состоит каждая граница сегмента линии/полигона. Для этого существует множество алгоритмов, наиболее известный алгоритм упрощения линии Douglas-Peucker.
  • Уменьшите точность своих точек данных. Если ваши координаты хранятся с высокой степенью точности (т. Е. Широта/долгота с несколькими десятичными знаками), вы можете округлить их до меньшей степени точности/меньше десятичных знаков. Обратите внимание, что вам может понадобиться играть с этим, так как граница ваших полигонов прерывистая/зубчатая, если вы заходите слишком далеко.
  • Сжатие. Похоже, вы уже экспериментировали с этим. Сжатие Gzip должно быть в состоянии значительно уменьшить размер полезной нагрузки для провода KML.
  • Наконец, если вы все еще не получаете желаемых результатов, вы можете рассмотреть возможность обобщения ваших данных путем удаления небольших/незначительных полигонов. Опять же, это будет зависеть от вашего случая использования
+0

Спасибо Aengus, уменьшенный файл теперь 1,6 МБ. Но все равно возьмите 15 секунд для загрузки, что немного расстраивает от удобства использования. –

+0

Да, это все еще довольно медленно. Вы заглянули туда, где это происходит? например сеть, чтение, рендеринг. Дальнейшая оптимизация будет зависеть от того, что вы пытаетесь сделать с полигонами на клиенте. Вы посмотрели на рендеринг на стороне сервера? – aengus

Смежные вопросы