Извлечение геометрии из ограничительной рамки (внутри и с перекрытием) и копирование результатов в новую пустую базу данных - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в PostgreSQL и ГИС.

У меня есть загруженный дамп данных OSM (карта Германии), который был импортирован с помощью osm2pgsql в PostGIS с поддержкой PostGIS база данных germanyPG .

Запрос

SELECT PostGIS_Full_Version();

возвращает

POSTGIS="2.3.3 r15473" 
GEOS="3.6.1-CAPI-1.10.1 r4317" 
PROJ="Rel. 4.9.1, 04 March 2015" 
GDAL="GDAL 2.2.1, released 2017/06/23" 
LIBXML="2.7.8" LIBJSON="0.12"

У меня также есть пустая база данных PostgreSQL с поддержкой PostGIS subsetGermanyPG доступно с теми же свойствами (схема базы данных, структура, таблицы, столбцы, индексы и т. Д.), Что и germanyPG база данных.

Вопрос 1:

После того как я дал координаты прямоугольника (см. Рисунок 1).
Как я могу запросить germanyPG база данных, чтобы получить все объекты, которые лежат в данном прямоугольнике или перекрываются с прямоугольником (особенно те, которые намного больше прямоугольника) и заключить его (см. Рисунок 2)?

Рисунок 1: https://i.stack.imgur.com/4ZOqJ.jpg

Рисунок 2: https://i.stack.imgur.com/HEnvP.jpg

Я не уверен, что ST_Intersects в сочетании с ST_MakeEnvelope (minLong, minLat, maxLong, max Lat, srid) выполнят эту работу, потому что я не знаю, как проверить результаты запроса ...

SELECT realname
FROM domain 
WHERE ST_Intersects(ST_MakeEnvelope(11.5, 49.8, 12.0, 50.1, 4326), 
                    geom:: GEOMETRY);

Вопрос 2:

Какой самый элегантный способ скопировать запрошенные результаты из базы данных germanyPG во вторую базу данных subsetGermanyPG ?Обратите внимание, что обе базы данных находятся на одной и той же удаленной хост-системе (на стороне сервера), и мне нужно использовать JAVA-приложение JAVA (на стороне клиента), который, соответственно, выполняет координаты для копирования.

Я знаю, что могу использоватьJAVA для запроса к базе данных germanyPG и последующего сохранения результатов запроса в типе данных JAVA (возможно, в одном или нескольких массивах?) И, наконец, последовательное добавление этих данных в subsetGermanyPG база данных.

Но что делать, если запрос является обширным (несколько ГБ) и требует много времени?Я думаю, что такие крайние случаи привели бы к проблемам сетевого трафика, утечкам основной памяти и так далее.

Итак, я надеюсь, что есть более экономное решение?

Обратите внимание, что мне разрешено использовать только стандартную библиотеку JAVA, включая JTS.

1 Ответ

0 голосов
/ 26 апреля 2018

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

Для второго вопроса звучит так, что проще было бы заполнить вторую таблицу из запроса на первый.В качестве примера рассмотрим что-то вроде этого https://www.mkyong.com/database/postgresql-create-table-from-exisiting-table/.

...