Извлечение данных из cartopy.feature - PullRequest
0 голосов
/ 03 сентября 2018

как я могу извлечь контурные линии из данных, импортированных через интерфейс feature cartopy? Если решение включает geoviews.feature или другую оболочку, то, конечно, все в порядке.

Например, как мне извлечь данные, представленные как cfeature.COASTLINE в следующем примере?

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE)
plt.show()

Я благодарен за любые подсказки, которые у вас могут быть!

FWIW, в basemap я бы сделал это так:

import mpl_toolkits.basemap as bm
import matplotlib.pyplot as plt
m = bm.Basemap(width=2000e3,height=2000e3,
            resolution='l',projection='stere',
            lat_ts=70,lat_0=70,lon_0=-60.)

fig,ax=plt.subplots()
coastlines = m.drawcoastlines().get_segments()

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Для дальнейшего использования. Некоторое время спустя я также наткнулся на этот (более общий?) Метод доступа к любой функции:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader

shpfilename = shpreader.natural_earth(resolution='110m',
                                      category='physical',
                                      name='coastline')  
coastlines = shpreader.Reader(shpfilename).records()

fig, ax = plt.subplots(subplot_kw = dict(projection=ccrs.PlateCarree()))
for c in coastlines:
    for g in c.geometry:
        ax.plot(*zip(*list(g.coords)))

, получая тот же график, что и выше.

0 голосов
/ 07 сентября 2018

Вы можете получить координаты для построенных линий непосредственно из объекта, который содержит набор shapely.MultiLineString с. В качестве подтверждения концепции, проверьте этот код:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

fig, (ax1,ax2) = plt.subplots(nrows=2, subplot_kw = dict(projection=ccrs.PlateCarree()))
ax1.add_feature(cfeature.COASTLINE)

for geom in cfeature.COASTLINE.geometries():
    for g in geom.geoms:
        print(list(g.coords))
        ax2.plot(*zip(*list(g.coords)))

plt.show()

, который дает эту картину:

result of the above code

Другими словами, вы можете перебирать MultiLineString функции, открывая ее geometries(). Каждый из этих MultiLineString с содержит один или несколько LineString с атрибутом coords, который можно преобразовать в список. Надеюсь, это поможет.

...