sql >> Base de Datos >  >> RDS >> Sqlserver

STContains en la columna Geografía

Usé el código que escribí para ti (Almacenamiento de la columna 'Punto' de ShapeFile ) como punto de partida para obtener una tabla de puntos. A partir de ahí:

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 asume un par de cosas. Primero:que sus puntos estén ordenados como lo haría alrededor del límite de la región. esto importa Piense en un rompecabezas de conectar los puntos. Para obtener la imagen correcta, debe hacerlo en el orden correcto. En segundo lugar, relacionado con el primero, tienen que estar en la orientación correcta. Los polígonos siguen la regla de la mano izquierda. Es decir, si estaba recorriendo los puntos en orden, está definiendo la región que está a su lado izquierdo. Entonces, si especifica los puntos en orden inverso, ¡obtiene todo menos su región! Lo sabrá de inmediato, ya que antes de SQL 2012, estaba limitado a tener regiones que están completamente contenidas en un hemisferio.

Pero ahora tengo que preguntar:dada la pregunta que hiciste antes (a la que vinculé arriba), ¿estás recibiendo archivos de forma con polígonos en ellos? Si es así, guárdelo y ahórrese el dolor de cabeza de reconstruirlo.