Получение геометрической формы всей базы данных OSM

#openstreetmap #postgis

#openstreetmap #postgis

Вопрос:

У меня есть несколько баз данных на postgresql / postgis. В основном это база данных для каждой страны (для небольших может быть континент). Я использовал osm2pgsql для импорта данных, и он работает хорошо. Я хочу создать веб-сервер, который будет получать координаты широты / широты в качестве входных данных, а затем получит доступ к соответствующей базе данных. Для этого, я думаю, мне нужно создать геометрический объект / полигон для всей БД (опять же, для каждого округа есть БД), проверить, находится ли указанная точка широты / широты в полигоне, и отправить запрос в нужную БД. Как я могу создать такую геометрию / полигон?

Спасибо, Охад.

Комментарии:

1. Взгляните на это: help.openstreetmap.org/questions/13615/… Если вы действительно хотите это сделать, взгляните на функцию ST_Union , которая растворит внутренние границы, но, вероятно, будет очень медленной.

Ответ №1:

Разделение задачи базы данных на несколько баз данных PostgreSQL обычно является неправильным подходом. Хотя этот подход может быть хорош для другого программного обеспечения для баз данных, он не подходит для PostreSQL. Это связано с тем, что выполнение запросов между базами данных сопряжено с трудностями, что может потребоваться для запросов такого типа. Лучше разделить ее на несколько схем в одной базе данных. Однако, если у вас миллион или меньше объектов (строк), просто сохраните все в одной таблице с индексированным полем страны. Таким образом, данные будут бесшовными при просмотре на карте или выполнении запросов с помощью SQL.

Что касается вашего вопроса о точке в полигоне, это самый простой вопрос ГИС, и вы найдете много других, которые задают его. Вам понадобится таблица полигонов, представляющих страны или административные регионы (например http://www.gadm.org /) в идеале с индексом GiST и используйте ST_Contains или ST_Within, чтобы определить, в каком многоугольнике находится точка.

Комментарии:

1. Спасибо! идея использования схемы вместо db хороша, я демонстративно рассмотрю ее использование. Итак, вот что я сделал: я загрузил файлы kml, предоставленные geofabrik для каждой страны (например download.geofabrik.de/africa/cameroon.kml ) (создал для этого скрипт) Затем я перебрал все KML, прочитал и создал файл json, который содержит все координаты полигонов каждой страны.