我是PostgreSQL和GIS的新手。
我有一个下载的 OSM数据转储(德国地图)可用,它通过osm2pgsql导入支持PostGIS的PostgreSQL 数据库 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"
我还有一个空的PostGIS启用的PostgreSQL数据库 subsetGermanyPG ,它具有相同的属性(数据库模式,结构,表,列,索引等),如< strong> 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 JTS应用程序(客户端)来协调&#39;分别做复印工作。
我知道我可以使用JAVA查询 germanyPG 数据库,然后将查询结果存储在JAVA数据类型中(可能是一个或多个数组?)和最后在 subsetGermanyPG 数据库中按顺序插入这些数据。
但是,如果查询是广泛的(多个GB)并且需要很长时间,那该怎么办呢?我认为这种极端情况会导致网络流量问题,主要内存泄漏等等。
所以我希望有一个更节省资源的解决方案吗?
请注意,我只能使用包含JTS的JAVA标准库。
答案 0 :(得分:2)
对于您的第一个问题,听起来您希望说服自己,您的方法正在运作。为此,我建议使用QGIS来映射查询结果。
对于第二个问题,听起来更简单的解决方案是从第一个查询填充第二个表。例如,请参阅此https://www.mkyong.com/database/postgresql-create-table-from-exisiting-table/。