繁体   English   中英

从边界框(内部和重叠)中提取几何并将结果复制到新的空数据库

[英]Extract geometries from bounding box (within and overlapping) and copy results to new empty database

我是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具有相同的属性(数据库架构,结构,表,列,索引等)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数据库复制到第二个数据库子集GermanyPG中 ,最优雅的方法是什么? 注意,两个数据库都在同一远程主机系统(服务器端)上,我需要使用JAVA JTS应用程序(客户端),它们分别由“协调员”执行复制工作。

我知道我可以使用JAVA来查询germanyPG数据库,然后将查询结果存储在JAVA数据类型(可能是一个或多个数组?)中,最后将这些数据顺序插入subsetGermanyPG数据库中。

但是,如果查询范围很广(多个GB)并且需要很长时间,该怎么办。 我认为这种极端情况会导致网络流量问题,主内存泄漏等。

因此,我希望那里有更多节省资源的解决方案?

请注意,只允许我使用JAVA标准库(包括JTS)。

对于第一个问题,听起来好像您是在说服自己您的方法在起作用。 为此,我建议使用QGIS来映射您的查询结果。

对于第二个问题,听起来更简单的解决方案是从第一个表的查询中填充第二个表。 例如,请参见类似https://www.mkyong.com/database/postgresql-create-table-from-exisiting-table/的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM