Sql server 消除地理上的差距

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)

我有一个由17个独立多边形组成的单一地理区域。STNumGeometries()按其应该的方式为其返回17。但是,在最大的多边形上,我可以看到多边形内的一些窄边界/裂缝/间隙。似乎我可以使用STBuffer隐藏它们(见下文),但几何图形的数量会增加。如何在不使地理环境更复杂的情况下消除这些差距

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()