Mamy dużą ilość geografii przechowywanej w tabelach MapInfo, którą chcielibyśmy teraz przechowywać w SQL Server. Napisaliśmy narzędzia C#, aby odczytać geografię z plików MapInfo i zaimportować je do serwera SQL. W większości przypadków działa to dobrze. Jednak po wielu próbach czyszczenia przy użyciu narzędzi, które opracowaliśmy w domu, nadal pozostaje nam znaczna liczba geografii, które są uznawane za nieważne przez SqlGeography.STIsValid()
.C# SQLGeography: diagnozowanie nieprawidłowych geometrii
Dla większości lub we wszystkich tych przypadkach, metoda .NET SqlGeography.MakeValid()
jest w stanie stworzyć poprawną instancję geografii. Jednak dokumentacja na ten temat jest dość słaba, i nie jesteśmy zadowoleni z po prostu akceptując modyfikacje, które MakeValid
czyni bez zrozumienia przyczyn geografii są uznane za nieważne, a co MakeValid
czyni je skorygować.
Po wywołaniu IsValidDetailed
otrzymujemy tajemniczy komunikat o błędzie, który nie jest dobrze udokumentowany. Dla wielu z tych przypadków, ciąg zwracany przez IsValidDetailed
wygląda mniej więcej tak:
24404: Nie ważne, ponieważ pierścień wielokąt (1) przecina się lub jakiś inny pierścień. Problem występuje w pozycji (19) w zbiorze geometrii
Wszystkie obiekty geograficzne, które próbujemy zaimportować, są wielobokami. Parsując ten komunikat o błędzie, próbowaliśmy zidentyfikować problematyczne wielokąty i pierścienie w obrębie tych wielokątów. Jednak okazuje się, że indeksy nie wydają się odpowiadać rzeczywistym problematycznym wielokątom/pierścieniom. W wielu przypadkach indeksy wykraczają poza granice tablic wejściowych geometrii.
Czy istnieje lepszy sposób, aby wskazać konkretny powód dla obiektu geometria/Geografia być uznane za nieważne i wskazać, które wielokąty, pierścienie, czy punkty są problematyczne?
dzięki za odpowiedź. Chociaż orientacja punktu może być przyczyną błędu, w naszym przypadku tak nie jest. Mamy kod, który automatycznie wykrywa orientację i naprawia go, jeśli nie poprawne. Pozostałe nieważne geometrie są nieprawidłowe z innych powodów. – jmcstwm