Próbuję otworzyć plik kształtu za pomocą notatnika Jupyter, ale nie mogę go otworzyć. Plik shapefile znajduje się w tym samym folderze co mój skoroszyt, a Python nie może go zidentyfikować, nawet jeśli użyję pełnej ścieżki.
import shapefile as shp
import matplotlib.pyplot as plt
sf = shp.Reader(r'C:\Users\Public\Documents\1-11-99n.shp')
ShapefileException: Unable to open C:\Users\Public\Documents\1-11-99n.dbf or C:\Users\Public\Documents\1-11-99n.shp.
Otwieranie go za pomocą Fiona i geopandów też nie działa.
import fiona
shape = fiona.open("1-11-99n.shp")
i
import geopandas as gp
shp = gp.GeoDataFrame.from_file('1-11-99n.shp')
print (shp)
oba kończą się na
CPLE_OpenFailedError: b'Unable to open 1-11-99n.shx or 1-11-99n.SHX.Try --config SHAPE_RESTORE_SHX true to restore or create it'
Wiem, że może to być trywialny problem, ale jestem nowy w używaniu plików kształtów i przestrzennych bibliotek Pythona, więc tak naprawdę nie wiem, jak obejść ten problem.
Odpowiedzi:
Istnieje pułapka dla użytkowników plików kształtu po raz pierwszy. Rzeczywisty plik kształtów (.shp) jest bezużyteczny bez plików towarzyszących: .dbf, .shx, .prj itp.
Jest to opisane w specyfikacji technicznej pliku kształtu, ale jest to nieco zaawansowane, artykuł Esri może być bardziej odpowiedni do szybkiego wyjaśnienia.
Bardzo ważne jest, aby wszystkie pliki należące do pliku kształtu były traktowane jako pojedyncza jednostka. Jeśli plik shapefile jest edytowany na dowolnym etapie, nawet po prostu zmiany atrybutów, zmieniają się identyfikatory FID (identyfikatory funkcji), co oznacza zmianę kolejności w pliku .DBF. Jeśli edytujesz atrybuty pliku shapefile i kopiujesz tylko plik .DBF, nadpisując istniejący plik .DBF, kształty będą wskazywać niewłaściwe wiersze. Zawsze kopiuj WSZYSTKIE pliki razem .
Wysyłając plik kształtu przez e-mail, Dropbox, Dysk Google itp. Uważam za celowe skompresowanie wszystkich plików do jednego archiwum, aby po rozpakowaniu wszystkie powiązane pliki pojawiały się razem.
źródło
Jeśli jedynym elementem, który masz, jest plik .shp i możesz obejść się bez innych części, rozważ to rozwiązanie, otwieranie i zapisywanie z OpenJump. https://gis.stackexchange.com/a/306228 Nadal możesz potrzebować pliku .proj, w zależności od celu, ale możesz być w stanie uciec od „standardowego” pliku skopiowanego z innego projektu i przemianowanego tak, aby pasował do twojego pliku kształtu , jeśli korzysta z tej samej projekcji.
źródło