我一直试图在底图包的正投影上绘制独家经济区(EEZ)形状文件。但是,shapefile文件具有来自世界各地的EEZ,因此当我尝试绘制shapefile时,总是存在某些在该特定角度的投影中不可见的文件。这导致形状被涂抹,这并不是我想要的效果。最终,我只希望绘制选定的shapefile,但是随后可能会出现同样的问题,因此,我现在很乐意解决这种更基本的情况,尝试绘制所有文件。
在代码中,我尝试一种简单的情况,即使用底图的readshapefile命令绘制shapefile。我还尝试将各种形状绘制为多边形(图使我可以更灵活地更改各个shapefile的外观),但后来我无法使多边形出现在地图上的正确位置,并且我会看到类似的污点行为(很可能是该问题具有相同或相似的根本原因)。
我已附上下面简单案例中的代码。如果运行此命令,则投影将显示为所需的形状,但会拖尾shapefile。可以在http://www.marineregions.org/downloads.php#unioneezcountry上找到shapefile,在这里我使用的是海洋和陆地区域版本2:世界国家边界和专属经济区的结合。
#Here is the figure
fig=plt.figure(figsize=(20,12))
ax=fig.add_subplot(111)
#create the map projection
Map=Basemap(projection='ortho',lon_0=0,lat_0=0,resolution='l')
Map.drawcoastlines(zorder=10)
Map.drawcountries(zorder=10)
Map.drawmapboundary()
#Reading in the shapefile and plotting it
Map.readshapefile('~/EEZ_Boundaries/EEZ_land_v2_201410','countries')
答案 0 :(得分:0)
好吧,因此,在花了更多时间尝试使其工作之后,我几乎放弃了Basemap并做了(早就应该这样做)切换到cartopy了。在那种情况下,问题确实已经由Cartopy解决了,所以创建我试图获取的图形的代码是:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cpf
from cartopy.io.shapereader import Reader
#Set the projection
projection=ccrs.Orthographic(central_longitude=0,central_latitude=0)
fig=plt.figure(figsize=(20,12))
axMap=fig.add_subplot(1,1,1,projection=projection)
#resolution of the coastlines
resolution='10m'
axMap.coastlines(resolution=resolution,edgecolor='black',zorder=10)
#Add the shapefiles
shape_feature = cpf.ShapelyFeature(Reader(direc_shp+file_shp).geometries(),
ccrs.PlateCarree(), edgecolor='black')
axMap.add_feature(shape_feature,zorder=1)