J'essaie de lire un fichier de formes et de le tracer en utilisant matplotlib. Voici le code:
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()
Cependant, je reçois des lignes reliant mes polygones. Comment puis-je dessiner les polygones de telle sorte qu'ils soient le chemin dans le fichier de formes. Voici des captures d'écran du tracé et du fichier de formes lorsqu'il est ouvert avec ArcGIS.
shapefile
matplotlib
statBeginner
la source
la source
Réponses:
Je vous laisse le soin de collecter les formes mais c'est le principe
la source
Pour les références futures, voici la solution à laquelle je suis parvenu après avoir suivi les conseils ci-dessus.
Le chiffre résultant sera très coloré, mais ensuite, il vous suffit d'ajuster les mots clés du graphique.
la source
import shapefile
fait référence aupyshp
package: pypi.python.org/pypi/pyshpVous devez utiliser des chemins et des correctifs matplotlib et il existe un module Python dédié au tracé de polygones à partir de fichiers de formes à l'aide de ces fonctions Descartes .
Comme Pyshp (shapefile) a la convention geo_interface ( New geo_interface for PyShp ), vous pouvez l'utiliser.
Le résultat est la représentation GeoJSON de la géométrie et vous pouvez utiliser la solution Comment tracer des géo-données en utilisant matplotlib / python
la source
descartes
solution ne fonctionne pas si vous essayez de tracer deux fichiers de formes différents sur deux sous-tracés adjacents à l'aide defig, ax = plt.subplots(1,2,figsize=(15, 8))
et puisax[0].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
etax[1].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
. Le résultat est une image vide. Une idée?Cela peut être fait en utilisant des géopandas ou pyshp comme discuté dans cette réponse . Les géopandas utilisent matplotlib à son backend pour le traçage.
la source
En plus de la réponse ldocao et de la réponse à la question FaCoffee. Lorsque vous avez des îles isolées et qu'elles font partie de la même fonctionnalité, vous pouvez essayer ensuite:
Cela fonctionne pour moi. La propriété "parties" d'une forme renvoie les index de départ des différentes géométries à l'intérieur d'une fonction.
la source
Pourtant, dans une forme de fichier de formes, il peut y avoir plusieurs parties. Cela tracera chaque pièce dans une forme, séparément.
la source