Я получил шейп-файл периметров почтового индекса из здесь и хотел бы нанести их на вверху карты Cartopy, как я сделал в этом примере а>.
Согласно источнику, эти данные находятся в системе координат EPSG 4326. Когда я пытаюсь построить данные
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
# Create a Stamen terrain background instance
stamen_terrain = cimgt.Stamen('terrain-background')
fig = plt.figure(figsize = (mapsize,mapsize))
ax = fig.add_subplot(1, 1, 1, projection=stamen_terrain.crs)
# Set range of map, stipulate zoom level
ax.set_extent([-122.7, -121.5, 37.15, 38.15], crs=ccrs.Geodetic())
ax.add_image(stamen_terrain, 8, zorder = 0)
# Add city borders
shape_feature = ShapelyFeature(Reader(shapefile).geometries(), ccrs.epsg(4326),
linewidth = 2, facecolor = (1, 1, 1, 0),
edgecolor = (0.3, 0.3, 0.3, 1))
ax.add_feature(shape_feature, zorder = 1)
Я вижу следующую ошибку:
ValueError: EPSG code does not define a projection
Возможно связано - когда я смотрю на функцию ccrs.epsg()
, она говорит, что этот код EPSG не поддерживается
help(ccrs.epsg)
Help on function epsg in module cartopy.crs:
epsg(code)
Return the projection which corresponds to the given EPSG code.
The EPSG code must correspond to a "projected coordinate system",
so EPSG codes such as 4326 (WGS-84) which define a "geodetic coordinate
system" will not work.
Note
----
The conversion is performed by querying https://epsg.io/ so a
live internet connection is required.
Учитывая этот результат, я также попытался использовать ccrs.Geodetic()
:
# Add city borders
shape_feature = ShapelyFeature(Reader(shapefile).geometries(), ccrs.Geodetic(),
linewidth = 2, facecolor = (1, 1, 1, 0),
edgecolor = (0.3, 0.3, 0.3, 1))
ax.add_feature(shape_feature, zorder = 1)
Но при этом также не отображаются периметры почтового индекса и отображается это предупреждающее сообщение:
UserWarning: Approximating coordinate system <cartopy._crs.Geodetic object at 0x1a2d2375c8> with the PlateCarree projection.
'PlateCarree projection.'.format(crs))
Я тоже пробовал ccrs.PlateCarree()
, но безуспешно. Пожалуйста помоги!
ZIPCODE.prj
, проекция равнаNAD_1983_UTM_Zone_10N
. Так что это неEPSG 4326
. Подробнее см. epsg.io/26910. - person swatchai   schedule 15.07.2019ccrs.epsg(26910)
- ошибки не возвращает, но и границы не рисует - есть мысли, что дальше попробовать? - person Michael Boles   schedule 15.07.2019