我正在尝试将shapefile转换为代表shapefile定义的每个点的纬度和经度点列表。使用geopandas
读取文件并使用.plot()
函数将这些点显示为图形,但我想要原始点。我试图遍历geopandas
.geometry
中的多边形并存储多边形内的所有点。我绘制了这些点来测试他们是否准确表示了该区域,但他们没有。我用以下代码完成了所有这些:
import re
import geopandas as gpd
import matplotlib.pyplot as plt
def geoToList(geodataframe):
points = []
for s in geodataframe.geometry:iq
s = str(s)
s = re.sub('[^0-9., ]+', '', s).split(',')
s = map(lambda x: x.strip(), s)
s = map(lambda x: (float(x.split()[0]), float(x.split()[1])), s)
points.extend(list(s))
return points
habitat = gpd.read_file('desktop/species_19377/species_19377.shp')
#borough = borough.to_crs(epsg=4326)
points = geoToList(habitat)
x = [point[0] for point in points]
y = [point[1] for point in points]
plt.scatter(x, y)
plt.show() #representation of the points in all polygons
habitat.plot() #representtation of the points I want
我想要一些函数返回一个可以绘制的点列表,看起来与habitat.plot()
的输出相同
我的下一个想法是将图形存储为图像,并根据图形的比例分配像素值纬度和经度值,但我确信这比它需要的更复杂。
任何帮助将不胜感激!
答案 0 :(得分:1)
要从一组多边形/多边形中提取所有点,您可以执行以下操作:
from shapely.geometry import MultiPolygon
def points_from_polygons(polygons):
points = []
for mpoly in polygons:
if isinstance(mpoly, MultiPolygon):
polys = list(mpoly)
else:
polys = [mpoly]
for polygon in polys:
for point in polygon.exterior.coords:
points.append(point)
for interior in polygon.interiors:
for point in interior.coords:
points.append(point)
return points
points = points_from_polygons(habitat.geometry)
x = [point.x for point in points]
y = [point.y for point in points]