Próbuję odczytać plik kształtu i wykreślić go za pomocą matplotlib. Oto kod:
import matplotlib.pyplot as plt
import shapefile
shpFilePath = "D:\test.shp"
listx=[]
listy=[]
test = shapefile.Reader(shpFilePath)
for sr in test.shapeRecords():
for xNew,yNew in sr.shape.points:
listx.append(xNew)
listy.append(yNew)
plt.plot(listx,listy)
plt.show()
Jednak dostaję linie łączące moje wielokąty. Jak narysować wielokąty w taki sposób, aby stanowiły drogę w pliku kształtu? Oto zrzuty ekranu z fabuły i pliku kształtu, gdy jest on otwierany za pomocą ArcGIS.
shapefile
matplotlib
statBeginner
źródło
źródło
Odpowiedzi:
Pozostawię wam, jak zbierać kształty, ale taka jest zasada
źródło
Dla przyszłych odniesień oto rozwiązanie, do którego doszedłem po wykonaniu powyższych rad.
Wynikowa liczba będzie bardzo kolorowa, ale wtedy wystarczy dostosować słowa kluczowe fabuły.
źródło
import shapefile
odnosi się dopyshp
pakietu: pypi.python.org/pypi/pyshpMusisz użyć ścieżek i łatek matplotlib, a istnieje moduł Pythona dedykowany do drukowania wieloboków z plików kształtów za pomocą tych funkcji Kartezjusza .
Ponieważ Pyshp (shapefile) ma konwencję geo_interface ( Nowy interfejs geo dla PyShp ), możesz jej używać.
Wynikiem jest reprezentacja geometrii przez GeoJSON. Możesz użyć rozwiązania Jak narysować dane geograficzne za pomocą matplotlib / python
źródło
descartes
rozwiązanie nie działa, jeśli spróbujesz wykreślić dwa różne pliki kształtów na dwóch sąsiednich działkach za pomocą,fig, ax = plt.subplots(1,2,figsize=(15, 8))
a następnieax[0].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
iax[1].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
. Rezultatem jest pusty obraz. Dowolny pomysł?Oprócz odpowiedzi ldocao i odpowiedzi na pytanie FaCoffee. Gdy masz izolowane wyspy i są one częścią tej samej funkcji, możesz spróbować dalej:
To sprawia, że działa dla mnie. „Części” kształtu właściwości zwracają indeksy początkowe różnych geometrii wewnątrz elementu.
źródło
Można to zrobić za pomocą geopandas lub pyshp, jak omówiono w tej odpowiedzi . Geopandy używają matplotlib na swoim zapleczu do kreślenia.
źródło
Jednak w jednym kształcie pliku kształtu może być wiele części. Spowoduje to wydrukowanie każdej części osobno w jednym kształcie.
źródło