专栏名称: CityMaker
CityMaker是国内领先的国产三维地理信息软件(3DGIS)平台和解决方案提供商,提供三维地理数据整合管理、浏览展示、服务发布、地形管理发布等多款专业应用软件产品、增值服务、整体解决方案等等。
目录
相关文章推荐
GiantPandaCV  ·  梳理下Flash ... ·  2 天前  
GiantPandaCV  ·  【ml-engineering ... ·  昨天  
GiantPandaCV  ·  图解大模型训练系列:序列并行3,Ring ... ·  6 天前  
GiantPandaCV  ·  【ml-engineering ... ·  1 周前  
GiantPandaCV  ·  图解大模型训练系列:序列并行2,DeepSp ... ·  1 周前  
51好读  ›  专栏  ›  CityMaker

3D GIS空间查询:如何查找定范围内的建筑

CityMaker  · 公众号  · 3D  · 2017-04-24 18:22

正文

 


空间查询是GIS中最常见的基本功能之一,3D GIS由于考虑到Z方向的因素,因此在进行空间查询的时候与进行二维空间查询时有相似也有不同,而这种区别常常会导致很多误解。


利用空间查询方法寻找一定范围内所包含的空间对象是我们遇到最多的查询问题,那么分别采用二维数据和三维数据进行查询会得到怎样的不同结果呢?




通过三维面查询


准备2组三维多边形数据,水平方向形状和坐标完全相同,只有Z值不同:


1. 通过三维面查询(Z=36m)


进行空间查询的主体包括两个部分:对于待查询的对象我们称之为TargetGeometry,查询的范围对象我们称之为QueryGeometry如果二者均为三维对象(如下图中具有一定高度Z的三维多边形和三维模型)那么查询时进行的是真三维空间查询



采用上述数据查询到的建筑集合仅为与三维多边形在三维空间中相交的模型,黄色高亮建筑为查询结果(下同)




2. 通过三维面查询(Z=15m)


将前面提到的三维多边形沿Z方向移动一段高度(将高度由36m降为15m),如下图,再次进行三维查询。由于TargetGeometryQueryGeometry二者仍然为三维对象,因此查询时进行的依然是真三维空间查询



采用上述数据查询结果如下图,由于多边形高度降低之后与部分低层的建筑产生交集,因此得到的查询结果包含了与多边形相交的低层建筑。




通过二维面查询

  

采用与(一)中相同的模型数据,将三维面转换为不包含Z的二维面,其他保持不变。


与(一)不同,TargetGeometry仍然是三维,可是QueryGeometry变成了二维。对于这种情况,查询时平台会TargetGeometry自动降为二维,再进行空间查询。



由于查询时先将三维模型降为二维再与多边形在平面内进行空间查询,因此查询过程与Z无关,仅反映一种平面的拓扑关系,查询结果如下:




示例代码与注意事项


进行上述空间查询的主要示例代码如下:


ISpatialFilter filter=new SpatialFilter();

filter.GeometryField="Geometry";

filter.SpatialRel=gviSpatialRel.gviSpatialRelEnvelope; 

filter.Geometry=geo.Clone2(gviVertextAttribute.gviVertextAttributeNone);//最好将QueryGeometry维度降为2

IFdeCursor cursor=fc.Search(filter,false);


另外,需要注意的是:


在空间查询中有若干种查询算子可以选择,如gviSpatialRelEnvelope 或gviSpatialRelIntersects等等。针对上述基于三维模型的查询,一般采用gviSpatialRelEnvelope ,相对而言效率更高。


如果查询过程不需要考虑对象的Z方向,建议可不使用真三维查询,而将QueryGeometry降为二维再进行查询。





 想了解更多? 
 那就赶紧来关注我们 

长按二维码 关注我们

加入我们官方QQ讨论群,参与更多互动分享

CityMaker软件技术分享群

189406624