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

STIndeholder på kolonnen Geografi

Jeg brugte koden, som jeg skrev til dig (Gemmer 'Point'-kolonnen fra ShapeFile ) som udgangspunkt for at få en pointtabel. Derfra:

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)

Denne kode forudsætter et par ting. For det første:at dine point er ordnet, som du ville gå rundt om regionens grænse. Dette betyder noget. Tænk på et "connect-the-dots"-puslespil. For at få det rigtige billede, skal du lave dem i den rigtige rækkefølge. For det andet, relateret til den første, skal de være i den korrekte orientering. Polygoner følger venstrehåndsreglen. Det vil sige, hvis du gik punkterne i rækkefølge, definerer du det område, der er på din venstre side. Så hvis du angiver punkterne i omvendt rækkefølge, får du alt undtagen din region! Du ved det med det samme, da du før SQL 2012 er begrænset til at have områder, der er fuldt indeholdt i en halvkugle.

Men nu må jeg spørge:givet det spørgsmål, du stillede før (som jeg linkede til ovenfor), modtager du shapefiler med polygoner i dem? Hvis ja, så gem det og spar dig selv for hovedpinen ved at rekonstruere det.




  1. Sådan itereres gennem PostgreSQL jsonb-arrayværdier med det formål at matche i en forespørgsel

  2. MAX vs Top 1 - hvad er bedre?

  3. Sådan opdeles et navn i efternavn plus initialer

  4. Dynamisk dropdownlisteværdi fra database