Sql server 消除地理上的差距
我有一个由17个独立多边形组成的单一地理区域。STNumGeometries()按其应该的方式为其返回17。但是,在最大的多边形上,我可以看到多边形内的一些窄边界/裂缝/间隙。似乎我可以使用STBuffer隐藏它们(见下文),但几何图形的数量会增加。如何在不使地理环境更复杂的情况下消除这些差距Sql server 消除地理上的差距,sql-server,sql-server-2014,geography,Sql Server,Sql Server 2014,Geography,我有一个由17个独立多边形组成的单一地理区域。STNumGeometries()按其应该的方式为其返回17。但是,在最大的多边形上,我可以看到多边形内的一些窄边界/裂缝/间隙。似乎我可以使用STBuffer隐藏它们(见下文),但几何图形的数量会增加。如何在不使地理环境更复杂的情况下消除这些差距 select myGeography.STNumGeometries() --Result: 17 myGeography.STBuffer(+0.01).STBuffer(-0.01)
select
myGeography.STNumGeometries() --Result: 17
myGeography.STBuffer(+0.01).STBuffer(-0.01) --Result: I can no longer see lines within the largest polygon
myGeography.STBuffer(+0.01).STBuffer(-0.01).STNumGeometries() --Result: 26
原件:
固定:
这里有一种方法可以从您的地理区域中移除面积非常小的“环”。您可以通过修改
Reduce()
函数的参数来设置灵敏度
use myDB;
SELECT
myTable.pk
, geography::UnionAggregate( --Union polygons into a single geography
geography::STGeomFromWKB( --Linestring --> polygon
0x01 + 0x03000000 + 0x01000000 + SUBSTRING(myTable.myGeography.STGeometryN(geometryN.number).RingN(ringN.number).STAsBinary(),6,2147483647)
, myTable.myGeography.STSrid
)
) as shapeClean
FROM mySchema.myTable
inner join master.dbo.spt_values as geometryN
on geometryN."type" = 'P' --only integers
and geometryN.number between 1 and myTable.myGeography.STNumGeometries() --Number of geometries
inner join master.dbo.spt_values as ringN
on ringN."type" = 'P' --only integers
and ringN.number between 1 and myTable.myGeography.STGeometryN(geometryN.number).NumRings() --Number of rings
where myTable.pk = 4722
and myTable.myGeography.STGeometryN(geometryN.number).RingN(ringN.number).Reduce(0.1).STNumPoints() > 2 --Keep only rings that have some area even after "reducing" slightly
group by myTable.pk
;
你能发布一张多边形的图片以及缓冲区的结果吗?谢谢你的回复,我添加了一些图片红色圆圈中的图片是什么?myGeography.MakeValid()有什么作用吗?我并不完全熟悉它,但我的理解是,它会重新安排一些要点来“清理”它们。也许这会有帮助?除了确保17个几何体中的每一个都是有效的,也许其中一些是多重几何体。因此,请尝试使用
.STNumGeometries()