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í.