尝试使用 Cartopy 绘制特定城市的地图
Trying to draw map of a particular city with Cartopy
我正在尝试使用 Cartopy 获取旧金山地图。我得到了加利福尼亚的地图,但不知道如何绘制特定城市的地图。有没有可能得到一张只有旧金山的地图?
我的代码:
import pandas
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
data = pandas.read_csv('train_200.csv',header=None)
lats,lons = data[7],data[8]
ax = plt.axes([0, 0, 1, 1],
projection=ccrs.LambertConformal())
ax.set_extent([-138, -110.5, 32, 40], ccrs.Geodetic())
shapename = 'admin_1_states_provinces_shp'
states_shp = shpreader.natural_earth(resolution='10m',
category='cultural', name=shapename)
for i in shpreader.Reader(states_shp).records():
if i.attributes['postal'] == "CA":
print i.attributes
ax.add_geometries([i.geometry], ccrs.PlateCarree(),facecolor=[0.9375, 0.9375, 0.859375], edgecolor='black')
else:
pass
ax.scatter(lats,lons,transform=ccrs.PlateCarree(),zorder=100)
plt.show()
输出地图:
shpreader.Reader(states_shp).records().attributes 的前几个输出:
{'labelrank': 7, 'sr_adm0_a3': 'BDI', 'region_cod': ' ', 'adm0_sr': 1, 'gadm_level': 1, 'scalerank': 9, 'Shape_Area': '1.46386727466e-001', 'type_en': 'Province', 'datarank': 8, 'iso_3166_2': 'BI-', 'wikipedia': ' ', 'note': ' ', 'big_code': ' ', 'hasc_maybe': ' ', 'type': 'Province', 'region_big': ' ', 'provnum_ne': 20005, 'mapcolor13': 8, 'code_hasc': 'BI.CA', 'name_alt': ' ', 'adm1_code_': 'BDI-2632', 'code_local': ' ', 'name_local': ' ', 'check_me': 0, 'Shape_Leng': '1.77905469919e+000', 'iso_a2': 'BI', 'featurecla': 'Admin-1 scale rank', 'postal': 'CA', 'sr_sov_a3': 'BDI', 'admin0_lab': 2, 'name_len': 7, 'area_sqkm': '0.00000e+000', 'name': 'Cankuzo', 'admin': 'Burundi', 'region': ' ', 'abbrev': ' ', 'sameascity': 7, 'mapcolor9': 5, 'adm1_code': 'BDI-2632', 'diss_me': 2632}
{'labelrank': 5, 'sr_adm0_a3': 'COL', 'region_cod': ' ', 'adm0_sr': 1, 'gadm_level': 1, 'scalerank': 5, 'Shape_Area': '2.49683494720e+000', 'type_en': 'Department', 'datarank': 5, 'iso_3166_2': 'CO-', 'wikipedia': ' ', 'note': ' ', 'big_code': ' ', 'hasc_maybe': ' ', 'type': 'Departamento', 'region_big': ' ', 'provnum_ne': 2, 'mapcolor13': 1, 'code_hasc': 'CO.CA', 'name_alt': ' ', 'adm1_code_': 'COL-1404', 'code_local': ' ', 'name_local': ' ', 'check_me': 0, 'Shape_Leng': '1.26131409274e+001', 'iso_a2': 'CO', 'featurecla': 'Admin-1 scale rank', 'postal': 'CA', 'sr_sov_a3': 'COL', 'admin0_lab': 2, 'name_len': 5, 'area_sqkm': '0.00000e+000', 'name': 'Cauca', 'admin': 'Colombia', 'region': ' ', 'abbrev': ' ', 'sameascity': -99, 'mapcolor9': 3, 'adm1_code': 'COL-1404', 'diss_me': 1404}
{'labelrank': 9, 'sr_adm0_a3': 'CRI', 'region_cod': ' ', 'adm0_sr': 1, 'gadm_level': 1, 'scalerank': 8, 'Shape_Area': '2.55427502099e-001', 'type_en': 'Province', 'datarank': 8, 'iso_3166_2': 'CR-', 'wikipedia': ' ', 'note': ' ', 'big_code': ' ', 'hasc_maybe': ' ', 'type': 'Provincia', 'region_big': ' ', 'provnum_ne': 6, 'mapcolor13': 2, 'code_hasc': 'CR.CA', 'name_alt': ' ', 'adm1_code_': 'CRI-1327', 'code_local': ' ', 'name_local': ' ', 'check_me': 0, 'Shape_Leng': '2.55929902160e+000', 'iso_a2': 'CR', 'featurecla': 'Admin-1 scale rank', 'postal': 'CA', 'sr_sov_a3': 'CRI', 'admin0_lab': 2, 'name_len': 7, 'area_sqkm': '0.00000e+000', 'name': 'Cartago', 'admin': 'Costa Rica', 'region': ' ', 'abbrev': ' ', 'sameascity': 9, 'mapcolor9': 4, 'adm1_code': 'CRI-1327', 'diss_me': 1327}
使用 cartopy.io.shapereader.natural_earth()
,您可以将每个国家/地区的管理员级别降至 states/provinces(使用 admin_1)。不够详细,无法达到任何国家/地区的 county/city/district 水平。
在您的情况下,您需要从其他来源获取数据。尝试从 http://www.gadm.org/country 下载美国。
对于您选择下载的特定国家/地区,您将获得一个 admin 0-3 的 zip 文件。在您的本地文件夹中获得形状文件后,您可以使用以下方式阅读它:
as_shp = cartopy.io.shapereader.Reader( 'path_to/shape_files/XXX_adm2.shp' )
as_shp
是一个迭代器,用于抓取形状文件中的每条记录。
我正在尝试使用 Cartopy 获取旧金山地图。我得到了加利福尼亚的地图,但不知道如何绘制特定城市的地图。有没有可能得到一张只有旧金山的地图?
我的代码:
import pandas
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
data = pandas.read_csv('train_200.csv',header=None)
lats,lons = data[7],data[8]
ax = plt.axes([0, 0, 1, 1],
projection=ccrs.LambertConformal())
ax.set_extent([-138, -110.5, 32, 40], ccrs.Geodetic())
shapename = 'admin_1_states_provinces_shp'
states_shp = shpreader.natural_earth(resolution='10m',
category='cultural', name=shapename)
for i in shpreader.Reader(states_shp).records():
if i.attributes['postal'] == "CA":
print i.attributes
ax.add_geometries([i.geometry], ccrs.PlateCarree(),facecolor=[0.9375, 0.9375, 0.859375], edgecolor='black')
else:
pass
ax.scatter(lats,lons,transform=ccrs.PlateCarree(),zorder=100)
plt.show()
输出地图:
shpreader.Reader(states_shp).records().attributes 的前几个输出:
{'labelrank': 7, 'sr_adm0_a3': 'BDI', 'region_cod': ' ', 'adm0_sr': 1, 'gadm_level': 1, 'scalerank': 9, 'Shape_Area': '1.46386727466e-001', 'type_en': 'Province', 'datarank': 8, 'iso_3166_2': 'BI-', 'wikipedia': ' ', 'note': ' ', 'big_code': ' ', 'hasc_maybe': ' ', 'type': 'Province', 'region_big': ' ', 'provnum_ne': 20005, 'mapcolor13': 8, 'code_hasc': 'BI.CA', 'name_alt': ' ', 'adm1_code_': 'BDI-2632', 'code_local': ' ', 'name_local': ' ', 'check_me': 0, 'Shape_Leng': '1.77905469919e+000', 'iso_a2': 'BI', 'featurecla': 'Admin-1 scale rank', 'postal': 'CA', 'sr_sov_a3': 'BDI', 'admin0_lab': 2, 'name_len': 7, 'area_sqkm': '0.00000e+000', 'name': 'Cankuzo', 'admin': 'Burundi', 'region': ' ', 'abbrev': ' ', 'sameascity': 7, 'mapcolor9': 5, 'adm1_code': 'BDI-2632', 'diss_me': 2632}
{'labelrank': 5, 'sr_adm0_a3': 'COL', 'region_cod': ' ', 'adm0_sr': 1, 'gadm_level': 1, 'scalerank': 5, 'Shape_Area': '2.49683494720e+000', 'type_en': 'Department', 'datarank': 5, 'iso_3166_2': 'CO-', 'wikipedia': ' ', 'note': ' ', 'big_code': ' ', 'hasc_maybe': ' ', 'type': 'Departamento', 'region_big': ' ', 'provnum_ne': 2, 'mapcolor13': 1, 'code_hasc': 'CO.CA', 'name_alt': ' ', 'adm1_code_': 'COL-1404', 'code_local': ' ', 'name_local': ' ', 'check_me': 0, 'Shape_Leng': '1.26131409274e+001', 'iso_a2': 'CO', 'featurecla': 'Admin-1 scale rank', 'postal': 'CA', 'sr_sov_a3': 'COL', 'admin0_lab': 2, 'name_len': 5, 'area_sqkm': '0.00000e+000', 'name': 'Cauca', 'admin': 'Colombia', 'region': ' ', 'abbrev': ' ', 'sameascity': -99, 'mapcolor9': 3, 'adm1_code': 'COL-1404', 'diss_me': 1404}
{'labelrank': 9, 'sr_adm0_a3': 'CRI', 'region_cod': ' ', 'adm0_sr': 1, 'gadm_level': 1, 'scalerank': 8, 'Shape_Area': '2.55427502099e-001', 'type_en': 'Province', 'datarank': 8, 'iso_3166_2': 'CR-', 'wikipedia': ' ', 'note': ' ', 'big_code': ' ', 'hasc_maybe': ' ', 'type': 'Provincia', 'region_big': ' ', 'provnum_ne': 6, 'mapcolor13': 2, 'code_hasc': 'CR.CA', 'name_alt': ' ', 'adm1_code_': 'CRI-1327', 'code_local': ' ', 'name_local': ' ', 'check_me': 0, 'Shape_Leng': '2.55929902160e+000', 'iso_a2': 'CR', 'featurecla': 'Admin-1 scale rank', 'postal': 'CA', 'sr_sov_a3': 'CRI', 'admin0_lab': 2, 'name_len': 7, 'area_sqkm': '0.00000e+000', 'name': 'Cartago', 'admin': 'Costa Rica', 'region': ' ', 'abbrev': ' ', 'sameascity': 9, 'mapcolor9': 4, 'adm1_code': 'CRI-1327', 'diss_me': 1327}
使用 cartopy.io.shapereader.natural_earth()
,您可以将每个国家/地区的管理员级别降至 states/provinces(使用 admin_1)。不够详细,无法达到任何国家/地区的 county/city/district 水平。
在您的情况下,您需要从其他来源获取数据。尝试从 http://www.gadm.org/country 下载美国。
对于您选择下载的特定国家/地区,您将获得一个 admin 0-3 的 zip 文件。在您的本地文件夹中获得形状文件后,您可以使用以下方式阅读它:
as_shp = cartopy.io.shapereader.Reader( 'path_to/shape_files/XXX_adm2.shp' )
as_shp
是一个迭代器,用于抓取形状文件中的每条记录。