Użyłem kodu, który dla Ciebie napisałem (Przechowywanie kolumny „Punkt” z pliku ShapeFile ) jako punkt wyjścia do uzyskania tabeli punktów. Stamtąd:
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)
Ten kod zakłada kilka rzeczy. Po pierwsze:że twoje punkty są uporządkowane tak, jakbyś poruszał się po granicach regionu. To ma znaczenie. Pomyśl o łamigłówce typu „połącz kropki”. Aby uzyskać właściwy obraz, musisz je wykonać we właściwej kolejności. Po drugie, w związku z pierwszym, muszą być we właściwej orientacji. Wielokąty stosują się do zasady lewej ręki. Oznacza to, że jeśli chodziłeś po punktach w kolejności, definiujesz region, który znajduje się po twojej lewej stronie. Tak więc, jeśli określisz punkty w odwrotnej kolejności, otrzymasz wszystko oprócz swojego regionu! Dowiesz się o tym od razu, ponieważ przed SQL 2012 ograniczasz się do regionów, które są w pełni zawarte w półkuli.
Ale teraz muszę zapytać:biorąc pod uwagę pytanie, które zadałeś wcześniej (do którego połączyłem powyżej), czy otrzymujesz pliki kształtu z wielokątami w nich? Jeśli tak, zachowaj to i oszczędź sobie bólu głowy związanego z rekonstrukcją.