Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

STContains in der Geographie-Spalte

Ich habe den Code verwendet, den ich für Sie geschrieben habe (Spalte 'Punkt' aus ShapeFile speichern ) als Ausgangspunkt, um eine Punktetabelle zu erhalten. Von dort:

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)

Dieser Code setzt ein paar Dinge voraus. Erstens:dass Ihre Punkte so geordnet sind, wie Sie um die Grenze der Region gehen würden. Das ist wichtig. Denken Sie an ein Verbinde-die-Punkte-Puzzle. Um das richtige Bild zu erhalten, müssen Sie sie in der richtigen Reihenfolge ausführen. Zweitens müssen sie im Zusammenhang mit dem ersten in der richtigen Ausrichtung sein. Polygone folgen der Linke-Hand-Regel. Das heißt, wenn Sie die Punkte der Reihe nach durchlaufen haben, definieren Sie die Region, die sich auf Ihrer linken Seite befindet. Wenn Sie also die Punkte in umgekehrter Reihenfolge angeben, erhalten Sie alles außer Ihrer Region! Sie werden dies sofort wissen, da Sie vor SQL 2012 darauf beschränkt waren, Regionen zu haben, die vollständig in einer Hemisphäre enthalten sind.

Aber jetzt muss ich fragen:Angesichts der Frage, die Sie zuvor gestellt haben (die ich oben verlinkt habe), erhalten Sie Shapefiles mit Polygonen darin? Wenn ja, speichern Sie das und ersparen Sie sich die Kopfschmerzen, es zu rekonstruieren.