1 回答

TA貢獻1847條經驗 獲得超7個贊
您收到的錯誤源于以下事實:您正在提取的城市信息包含北美城市很少,或者它們未被正確識別為北美境內。您的問題是關于基于首都創建Voronoi圖,因此我包含了一個指向美國首都數據集的鏈接,以便您可以使用可靠數量的城市測試示例:
import matplotlib.pyplot as plt
import numpy as np
import geopandas as gpd
from geovoronoi.plotting import subplot_for_map, plot_voronoi_polys_with_points_in_area
from geovoronoi import voronoi_regions_from_coords
cities = gpd.read_file('us-state-capitals.csv')
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
usa = world[world.name == 'United States of America']
usa = usa.to_crs(epsg=3857)
usa_shape = usa.iloc[0].geometry
coords = np.array(list(zip(cities.Shape_X,cities.Shape_Y)), dtype='float')
poly_shapes, pts, poly_to_pt_assignments = voronoi_regions_from_coords(coords, usa_shape)
fig, ax = subplot_for_map()
plot_voronoi_polys_with_points_in_area(ax, usa_shape, poly_shapes, coords)
ax.set_title('Cities data for South America from GeoPandas\nand Voronoi regions around them')
plt.tight_layout()
plt.savefig('using_geopandas.png')
plt.show()
生產:
對于北美,您可以下載城市 CSV 并使用以下代碼:
import matplotlib.pyplot as plt
import geopandas as gpd
from shapely.ops import cascaded_union
from geovoronoi.plotting import subplot_for_map, plot_voronoi_polys_with_points_in_area
from geovoronoi import voronoi_regions_from_coords, points_to_coords
cities = gpd.read_file('world_populated_cities.csv')
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
na = world[world.continent == 'North America']
na = na.to_crs(epsg=3857)
cities.geometry.to_crs(epsg=3857)
na_shape = cascaded_union(na.geometry)
cities = cities.to_crs(na.crs) # convert city coordinates to same CRS!
cities = cities[cities.geometry.within(na_shape)]
coords = points_to_coords(cities.geometry)
poly_shapes, pts, poly_to_pt_assignments = voronoi_regions_from_coords(coords, na_shape)
fig, ax = subplot_for_map()
plot_voronoi_polys_with_points_in_area(ax, na_shape, poly_shapes, coords)
ax.set_title('Cities data for South America from GeoPandas\nand Voronoi regions around them')
plt.tight_layout()
plt.savefig('using_geopandas.png')
plt.show()
生產:
添加回答
舉報