Wziąłem kopię super-nikczemnej książki „Python Geospatial Development” Erika Westry ( link do Amazon ) i pracuję nad tym. Obecnie uczy mnie, jak ładować dane wybrzeża GSHHS z pliku kształtu do bazy danych PostGIS, przygotowując się do budowy geoprzestrzennej aplikacji internetowej.
Mój problem jest następujący: kiedy próbuję zaimportować dane GSHHS do PostGIS, jest on odrzucany, ponieważ wielokąty linii brzegowej nie są uważane za „prawidłowe”. W szczególności pojawia się komunikat o błędzie opisujący niektóre (ale nie wszystkie) wielokąty linii brzegowej jako „niezamknięte pierścienie”.
Rozumiem, że ten błąd próbuje mi powiedzieć, że pierwszy i ostatni punkt wielokąta nie są takie same. Jednak to po prostu nieprawda. Zbadałem reprezentację WKT wielu wielokątów i są one poprawne. Oni na pewno się zaczynać i kończyć w tym samym współrzędnej.
Wieloboki są wyodrębniane z plików kształtów za pomocą biblioteki OGR i eksportowane do każdego elementu wielokąta do WKT. Próbowałem odtworzyć wielokąt za pomocą Shapely i eksperymentowałem z WKB, ale bezskutecznie. I nie udało się załadować te same dane w PostGIS jak stół MULTIPOLYGON za pomocą ładowacza shp2pgsql.
Zastanawiałem się, czy ktoś tam:
(a) być może użył tej samej książki, utknął przy tym samym problemie i czy ma dla mnie odpowiedź?
(b) napotkał podobny problem i znalazł rozwiązanie?
(c) w przeciwnym razie, czy istnieją jakieś porady dotyczące najlepszych praktyk w celu zapewnienia prawidłowej geometrii przed załadowaniem do PostGIS?
AKTUALIZACJA: kolega zasugerował, że problem „niezamkniętych pierścieni” może być tylko objawem innego problemu. Możliwe, że moja konfiguracja PostGIS / PostgreSQL ma ograniczenia wielkości (przy transakcjach wstawiania, otrzymanych pakietach, ciągach tekstowych itp.).
Ponieważ używam bardzo długich wielokątów WKT jako danych wejściowych, PostGIS może wycinać je zbyt wcześnie, aby umożliwić ukończenie każdego wielokąta. Przetestuję to jutro, ale wydaje się prawdopodobne. Moje wstawienie granic kraju akceptowało tylko niektóre rekordy, a nie inne. Z pamięci zaakceptowano geometrie dla małych narodów wyspiarskich, takich jak Antigua (a więc prawdopodobnie miały krótkie reprezentacje WKT).
Może to być bardziej wątek administracyjny bazy danych PostGIS niż nieprawidłowy wątek geometrii.
Odpowiedzi:
Sprawdziłem twoje dane i przykład książki, problem polega na tym, że w danych przetwarzanych w książce są trzy nieprawidłowe wielokąty:
GSHHS_l_L1.shp
ID = 92-W
ID = 486-W
GSHHS_l_L2.shp
ID = 7333-W
Ponieważ jest to przykład, najłatwiej byłoby usunąć te wielokąty ze zbioru danych lub po prostu dodać instrukcję if w kodzie
źródło