sql >> Databáze >  >> RDS >> Sqlserver

STObsahuje sloupec Geografie

Použil jsem kód, který jsem pro vás napsal (Ukládání sloupce 'Point' z ShapeFile ) jako výchozí bod k získání tabulky bodů. Odtud:

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)

Tento kód předpokládá několik věcí. Za prvé:vaše body jsou seřazeny tak, jak byste obcházeli hranici regionu. Na tom záleží. Přemýšlejte o rébusu spojujících body. Abyste získali správný obrázek, musíte je udělat ve správném pořadí. Za druhé, ve vztahu k prvnímu, musí být ve správné orientaci. Polygony se řídí pravidlem levé ruky. To znamená, že pokud jste procházeli body v pořadí, definujete oblast, která je po vaší levé straně. Pokud tedy určíte body v opačném pořadí, získáte vše kromě vašeho regionu! Poznáte to hned, protože před SQL 2012 jste omezeni na oblasti, které jsou plně obsaženy v hemisféře.

Ale teď se musím zeptat:vzhledem k otázce, kterou jste položili dříve (na kterou jsem odkazoval výše), dostáváte tvarové soubory s polygony? Pokud ano, uložte si to a ušetříte si starosti s jeho rekonstrukcí.




  1. Ukládání do mezipaměti PreparedStatement – ​​co to znamená (jak to funguje)

  2. Nelze převést hodnotu data/času MySQL na System.DateTime ve VS2010

  3. MySQL:Zkopírujte tabulku do jiné tabulky se sloupcem navíc

  4. Nebylo vybráno žádné schéma k vytvoření v ... chybě