【问题标题】:Plotting using basemap and descartes doesn't show PolygonPatch使用底图和笛卡尔绘图不显示 PolygonPatch
【发布时间】:2013-09-03 17:33:46
【问题描述】:

我可以像这样绘制一些匀称的缓冲点:

import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from mpl_toolkits.basemap import Basemap
from shapely.geometry import Point
from descartes import PolygonPatch

fig = plt.figure()
ax = fig.add_subplot(111)
minx, miny, maxx, maxy = [-6.108398, 49.61071, 1.669922, 58.972667]
w, h = maxx - minx, maxy - miny
x, y = (-0.117588, 51.513230)
correct = Point(x, y).buffer(0.5)
ax.add_patch(PolygonPatch(correct, fc='#cc00cc', ec='#555555', alpha=0.5, zorder=5))
ax.set_xlim(minx - 0.2 * w, maxx + 0.2 * w)
ax.set_ylim(miny - 0.2 * h, maxy + 0.2 * h)
ax.set_aspect(1)
ax.add_patch(patch)
plt.show()

这将导致以下情节:

但是,如果我尝试使用底图绘制这些点,它们不会出现:

bounds = [-6.108398, 49.61071, 1.669922, 58.972667]
minx, miny, maxx, maxy = bounds
w, h = maxx - minx, maxy - miny
fig = plt.figure()
ax = fig.add_subplot(111)
m = Basemap(
    projection='merc',
    ellps = 'WGS84',
    llcrnrlon=minx - 0.2 * w,
    llcrnrlat=miny - 0.2 * h,
    urcrnrlon=maxx + 0.2 * w,
    urcrnrlat=maxy + 0.2 * h,
    lat_ts=0,
    resolution='i')
m.drawcoastlines()
m.drawmapboundary()
# set axes limits to map crs
min_x, min_y = m(minx, miny)
max_x, max_y = m(maxx, maxy)
corr_w, corr_h = max_x - min_x, max_y - min_y
ax.set_xlim(min_x - 0.2 * corr_w, max_x + 0.2 * corr_w)
ax.set_ylim(min_y - 0.2 * corr_h, max_y + 0.2 * corr_h)
ax.set_aspect(1)
# add known good coordinate
x, y = m(-0.117588, 51.513230)
correct = Point(x, y).buffer(1.)
ax.add_patch(PolygonPatch(correct, fc='#cc00cc', ec='#555555', alpha=0.5, zorder=5))

plt.show()

我做错了什么?

【问题讨论】:

    标签: python matplotlib matplotlib-basemap shapely descartes


    【解决方案1】:

    如果您提供了一个工作示例,您的图像将无法使用您提供的代码复制,这将有所帮助。

    如果您在墨卡托投影地图上使用底图进行绘图,则您提供的坐标应位于同一投影中。您正在墨卡托投影地图上绘制 WGS84 纬度/经度,那是行不通的。您应用于点的缓冲区也以地图坐标表示,即米而不是度。

    地图对象提供了简单的转换:

    x,y = m(lon,lat)
    

    因此,将您的点创建更改为:

    Point(m(lon, lat)).buffer(1000)
    

    【讨论】:

    • 将缓冲区大小更改为米已导致该点可见。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多