Я новичок в 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.