Вот несколько мыслей по вашим вопросам:
Как большинство программ геокодирования ищет информацию об иерархии? Они используют административные коды или заглядывают в полигоны?
Почти невозможно сказать, как работает большинство программ, но я могу вам сказать, что, если они полагаются только на данные, такие как почтовые индексы, вместо проверки того, находятся ли они внутри заданного пространства и времени, нет необходимости беспокоиться о любая ГИС. Конечно, работа с геокодами намного быстрее, но имеет свои ограничения, когда речь идет о любой пространственной операции, такой как покрытие, касания, перекрытия, пересечения и т. Д.
Как быстро можно проверить, содержится ли многоугольник A внутри многоугольника B или пересекается с ним, используя PostGIS или люцен? Я никогда не работал с полигонами - знаете ли вы какие-либо учебные пособия, объясняющие, как их использовать?
Использование PostGIS абсолютно безболезненно.
Пример : рассмотрим следующий BBOX POLYGON((14.45 35.87,14.56 35.87,14.56 35.80,14.45 35.80,14.45 35.87))
:
![enter image description here](https://i.stack.imgur.com/wCoX6.png)
В этом примере проверяется, находится ли POINT(14.48 35.85)
внутри данного многоугольника, с помощью функции ST_Within
:
![enter image description here](https://i.stack.imgur.com/b4ooL.png)
db=# SELECT ST_Within('POINT(14.48 35.85)'::GEOMETRY,'POLYGON((14.45 35.87,14.56 35.87,14.56 35.80,14.45 35.80,14.45 35.87))'::GEOMETRY);
st_within
-----------
t
(1 row)
Теперь тот же эксперимент с использованием POINT(14.35 35.95)
, который находится за пределами данного многоугольника:
db=# SELECT ST_Within('POINT(14.35 35.95)'::GEOMETRY,'POLYGON((14.45 35.87,14.56 35.87,14.56 35.80,14.45 35.80,14.45 35.87))'::GEOMETRY);
st_within
-----------
f
(1 row)
Имеются ли ресурсы, которые позволяют многоугольникам бесплатно получать информацию о географических точках? Я думаю, что OpenStreetMap предоставляет его, но размер planet.osm составляет более 900 ГБ, а наша емкость в настоящее время составляет ~ 30 ГБ. Нам не нужна обширная информация об улицах и адресах, но нам нужно установить иерархию до уровня города / села. Я также посмотрел на DBPedia, но, похоже, он содержит гораздо меньше информации, чем GeoNames
Это действительно зависит от ваших требований (детализация, точность, охват и т. Д.). В Интернете есть много бесплатных источников шейп-файлов, таких как:
Если вам интересно, как импортировать шейп-файлы в PostGIS, отметьте этот ответ .
Вы можете использовать этот веб-сайт здесь для визуализации ваших WKT
(общеизвестных текстов) литералов:
Калитка WKT