Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

STContém na coluna Geografia


Usei o código que escrevi para você (Armazenando a coluna 'Point' do ShapeFile ) como ponto de partida para obter uma tabela de pontos. De lá:
select geography::STPolyFromText(
'POLYGON((' + 
    stuff((
        select ',' + cast(g.STPointN(t.i).Long as varchar(10)) + ' ' + cast(g.STPointN(t.i).Lat as varchar(10))
        from [a]
        cross join tally as [t]
        where t.i <= g.STNumPoints()
        order by i
        for xml path('')

    ), 1, 1, '') + '))'
    , 4326)

Este código assume algumas coisas. Primeiro:que seus pontos sejam ordenados como você contornaria a fronteira da região. Isso importa. Pense em um quebra-cabeça de conectar os pontos. Para obter a imagem certa, você deve fazê-los na ordem certa. Em segundo lugar, em relação ao primeiro, eles devem estar na orientação correta. Os polígonos seguem a regra da mão esquerda. Ou seja, se você estivesse percorrendo os pontos em ordem, estaria definindo a região que está à sua esquerda. Então, se você especificar os pontos na ordem inversa, você obtém tudo, menos sua região! Você saberá disso imediatamente, pois antes do SQL 2012, você estava limitado a ter regiões totalmente contidas em um hemisfério.

Mas agora eu tenho que perguntar:dada a pergunta que você fez antes (que eu relacionei acima), você está recebendo shapefiles com polígonos neles? Em caso afirmativo, guarde-o e economize a dor de cabeça de reconstruí-lo.