Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

STContiene nella colonna Geografia

Ho usato il codice che ho scritto per te (Memorizzazione della colonna 'Punto' da ShapeFile ) come punto di partenza per ottenere una tabella dei punti. Da 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)

Questo codice presuppone un paio di cose. Primo:che i tuoi punti siano ordinati come faresti intorno al confine della regione. Questo è importante. Pensa a un puzzle connetti i punti. Per ottenere l'immagine giusta, devi eseguirli nell'ordine giusto. In secondo luogo, in relazione al primo, devono essere nell'orientamento corretto. I poligoni seguono la regola della mano sinistra. Cioè, se stavi percorrendo i punti in ordine, stai definendo la regione che è alla tua sinistra. Quindi, se specifichi i punti in ordine inverso, ottieni tutto tranne la tua regione! Lo saprai subito poiché prima di SQL 2012 sei limitato ad avere regioni completamente contenute in un emisfero.

Ma ora devo chiederti:vista la domanda che hai fatto prima (che ho linkato sopra), stai ricevendo degli shapefile con dei poligoni? Se è così, salvalo e risparmiati il ​​mal di testa di ricostruirlo.