Проблема с построением шейп-файлов на ортографической проекции в базовой карте - PullRequest
0 голосов
/ 19 июня 2019

Я пытался построить шейп-файлы исключительной экономической зоны (EEZ) на ортографической проекции из пакета базовой карты. Однако файл шейп-файла содержит ИЭЗ со всего мира, и поэтому, когда я пытаюсь построить шейп-файлы, всегда есть такие, которые не видны в проекции под этим конкретным углом. Это приводит к размазыванию форм, что не совсем то, чего я добиваюсь. В конечном счете, я хочу построить только выбранные шейп-файлы, но тогда эта проблема, скорее всего, появится, поэтому сейчас я был бы рад решить этот более простой случай, когда я попытаюсь построить все из них.

Здесь, в коде, я пробую простой случай, когда я строю шейп-файлы с помощью команды readshapefile из базовой карты. Я также попытался представить различные формы в виде многоугольников (полагал, что это дало бы мне больше гибкости в изменении внешнего вида отдельных шейп-файлов), но тогда я не смог заставить полигоны появляться на карте в нужном месте, и я видел бы похожее размытие поведение (поэтому вероятность того, что проблема связана с той же или схожей основной причиной).

Я приложил код из простого случая ниже. Если я запускаю это, я получаю проекцию, которая отображается как я хочу, но с размазыванием шейп-файлов. Шейп-файлы можно найти в http://www.marineregions.org/downloads.php#unioneezcountry, где я использую версию 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')

Вот ссылка на изображение, которое я получаю, когда запускаю код

1 Ответ

0 голосов
/ 11 июля 2019

Хорошо, так что после большего количества попыток заставить это работать, я в значительной степени отказался от Базовой карты и сделал (давно пора) переключиться на картопию. В этом случае проблема уже решена 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...