У меня более 3000 полигонов, которые представляют водоразделы (18 основных водосборов). На первом этапе будут показаны все 18 водоразделов, а их список будет размещен на левой боковой панели. Если какой-либо пользователь наведет курсор мыши на карту, всплывающее окно покажет название водораздела. Если пользователь щелкнет по любому значительному водоразделу на карте, откроется всплывающее окно с подробной информацией. При большем увеличении все водоразделы будут отображаться.
Я прошу вашего совета, какое решение с открытым исходным кодом лучше всего подходит для обработки такого большого количества полигонов?
Я думал о Leaflet или OpenLayers, но я не знаю, могут ли они обрабатывать большое количество полигонов.
Кроме того, вы предлагаете хранить их в MySQL или?
источник
Ответы:
Я хотел бы создать сервис изображений (растровый слой) и предоставить его через Web Map Service (WMS) . Таким образом, вы можете использовать любой API-интерфейс, который вам удобен, если он поддерживает WMS ( OpenLayers делает ). Вы можете использовать WMS, чтобы отобразить слой всех объектов многоугольника, а затем нажать WF GetFeatureInfo, чтобы получить информацию об этом многоугольнике.
Если по какой-либо причине вам нужны векторные данные на карте, вы можете создать их динамически по клику с данными ответа GetFeatureInfo.
источник
См TileMill , который может растеризацию UTFGrid взаимодействия в MBTiles файл и размещать его на MapBox или с открытым исходным кодом реализацию MBTiles сервера , как TileStache .
Вот это с большим количеством полигонов . Этот подход требует от вас растеризации - иначе говоря, bake - плиток, но, по сути, это единственный способ сделать то, что вы хотите, без огромных ресурсов сервера, специального приложения или очень ограниченного набора браузеров.
источник
Зависимость от масштаба и пространственно индексированная база данных будут ключевыми в этой проблеме. Вы должны быть в состоянии представить водоразделы, используя как минимум два, возможно, три или четыре уровня. Например, вы можете разделить данные на Major (18), Minor (некоторая комбинация всех водосборов среднего масштаба, которые попадают в один и тот же Major) и третичный (3000 полигонов). Это даст вам три разных векторных слоя / услуги.
Используйте зависимость от масштаба, чтобы нарисовать только соответствующий сервис в зависимости от уровня масштабирования пользователя.
Используйте базу данных с пространственной индексацией, чтобы обеспечить быстрое рисование сервисов, и рисуйте только ту часть, которая необходима для заполнения текущего окна просмотра.
В качестве альтернативы, вы можете подумать о создании тайлов карт водораздела (опять же, созданных на основе соответствующих масштабов для каждого слоя) и обслуживать их таким образом.
На этом сайте уже существует множество вопросов, которые рекомендуют соответствующие решения с открытым исходным кодом для использования этих стратегий.
источник
В дополнение к TileMill вы можете проверить MangoMap , он не с открытым исходным кодом, но в настоящее время он бесплатный и способен обрабатывать данные такого типа.
[Отказ от ответственности: я работаю с MangoMap, но отвечаю, потому что это уместно в этом случае]
источник