当前位置: 首页 > 知识库问答 >
问题:

如何有效地联合多个3d多边形并将它们投射到另一张桌子上?

萧阳波
2023-03-14

我正在处理大量CityGML三维建筑数据(LoD2),并使用3d城市数据库(及其进口商/出口商工具)导入数据(请参见https://www.3dcitydb.org/3dcitydb/)它在数据库中创建一个新的模式,并使用java例程将XML样式的地理数据转换为PostGIS兼容的数据库输入

然后将每个建筑的信息(空间和非空间)写入不同的表,其中“建筑”表保存建筑元数据,如建筑功能或街道名称,“surface_geometry”表保存所有建筑的实体和三维表面几何。将列“id”、“parent_id”和“root_id”用作PK和FK,以确保一个表的元素可以与另一个表中的一个或多个元素匹配

由于我的大多数分析都需要二维建筑足迹(或鸟瞰多边形),所以我在可用FK上使用st_force2d()对同一建筑的所有二维表面进行groupby之前创建了查询,以使曲面二维化

是否有任何想法如何改进以下代码以有效处理庞大的数据集?

查询是

CREATE TABLE citydb.building_geom_tmp AS
SELECT a.*, b.bldg_footprint AS geom
FROM Citydb.building AS a
LEFT JOIN (
        SELECT *, ST_Force2D(geometry) AS bldg_footprint FROM citydb.surface_geometry
        ) AS b
ON a.lod2_solid_id = b.root_id;

DROP TABLE IF EXISTS citydb.building_geom ;
CREATE TABLE citydb.building_geom AS
SELECT a.*, b.geom
FROM citydb.building AS a
LEFT JOIN (
        SELECT id, ST_Union(geom) AS geom
        FROM citydb.building_geom_tmp  AS c
        GROUP BY c.id
        ) AS b
ON a.id = b.id;

DROP TABLE IF EXISTS citydb.building_geom_tmp

我正在使用Win 10和< code>SELECT version()和< code > SELECT postgis _ full _ version() give的虚拟机

PostgreSQL 13.2,由Visual C构建1914编译,64位

POSTGIS = " 3 . 1 . 1 3 . 1 . 1 "[扩展]PGSQL = " 130 " GEOS = " 3 . 9 . 1-CAPI-1 . 14 . 1 " PROJ = " 7 . 1 . 1 " GDAL = " GDAL 3 . 2 . 1,发布于2020/12/29 " LIBXML = " 2 . 9 . 9 " LIBJSON = " 0.12 " LIBPROTOBUF = " 1 . 2 . 1 " WAGYU = " 0 . 5 . 0(内部)"栅格

分别是。3dcityDB在虚拟机上是4.1.0,上面显示了postgres/postgis版本。

CityGML LoD2数据样本可从德国联邦制图和大地测量局(此处)下载。

此外,我在github repo中向3DCityDB开发人员征求了一些想法。

提前感谢任何想法和最好的问候
安德烈

共有1个答案

东郭昌胤
2023-03-14

直接在Github上从开发人员那里得到了答案:https://github.com/3dcitydb/3dcitydb/issues/73

 类似资料:
  • 问题内容: 我有两个具有相同列的表,我需要将一个表的行复制到另一表的行,以创建一个包含两个表中所有值的大表。现在,我正在执行此查询以返回相同的内容: 但是,这似乎效率极低,并且在我的系统上非常慢(返回1210189条记录)。 问题答案: 可能只是这样做:

  • 我是新来的,对C#来说也是新来的,我希望有一个简单的问题要解决。 (我使用gmaps.net for winforms来实现这一点,但也将通过web API maps版本使用该方法)。 我们的数据库中有一个zipcodes和Area的数据库。每个区域包含多个Zipcode。每个zipcode都有一系列坐标,可以为该zipcode创建一个google maps多边形。 目前,如果我们想在地图上显示我

  • 在我的属性模型中,我定义了这两个关系 在我的控制器中,我创建一个属性对象,并尝试获取已批准和挂起的图像。 变量是预期的。 然而,只是! 我尝试使用这个答案获取最后一个数据库查询,似乎挂起的查询甚至没有被执行。(最后一次查询运行已批准=1,这是针对关系。) 我怀疑这种关系可能是一个问题,但我被难住了。

  • 我有一对(封闭的)多边形,每个多边形被定义为一个点序列(顶点)。每个多边形都代表一块土地,由一条小河分开,所以溪流在两个多边形之间形成一个狭窄的缝隙。 我正在寻找一种算法,通过将两个多边形连接成一个连接的多边形来识别和消除间隙。 下图显示了一个示例,其中原始多边形为绿色和红色,生成的多边形显示为黄色。 到目前为止,我已经能够做到以下几点: 对于多边形A中的每条边,找到多边形B中最近的顶点。 找到多

  • 有没有办法在python中合并两个重叠的GEOJSON多边形,返回一个合并的GEOJSON对象?

  • 我想将光栅数据聚合到自定义形状文件中的每个多边形。 在这种情况下,我想获得撒哈拉以南非洲次国家区域城市化的平均程度。 我的sf如下所示: 或绘制: 另一方面,光栅数据采用以下形式: 这些比整个星球所需的要细得多。为了加速计算,我首先聚合光栅,然后将其转换为shapefile,剩余的每个光栅像素都转换为shapefile中的点几何形状。然后,这个shapefile可以聚合到我的区域边界。诚然,这不是