Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

STContains sur la colonne Géographie

J'ai utilisé le code que j'ai écrit pour vous (Stocker la colonne 'Point' de ShapeFile ) comme point de départ pour obtenir un tableau de points. À partir 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)

Ce code suppose deux ou trois choses. Premièrement :que vos points soient ordonnés comme vous le feriez autour de la limite de la région. C'est important. Pensez à un puzzle connect-the-dots. Afin d'obtenir la bonne image, vous devez les faire dans le bon ordre. Deuxièmement, lié au premier, ils doivent être dans la bonne orientation. Les polygones suivent la règle de la main gauche. Autrement dit, si vous parcourez les points dans l'ordre, vous définissez la région qui se trouve à votre gauche. Ainsi, si vous spécifiez les points dans l'ordre inverse, vous obtenez tout sauf votre région ! Vous le saurez tout de suite car avant SQL 2012, vous étiez limité à avoir des régions entièrement contenues dans un hémisphère.

Mais maintenant, je dois demander :compte tenu de la question que vous avez posée auparavant (que j'ai liée ci-dessus), recevez-vous des fichiers de formes contenant des polygones ? Si c'est le cas, stockez-le et épargnez-vous le mal de tête de le reconstruire.