【问题标题】:Shape files do not show on a Cartopy basemap?形状文件不显示在 Cartopy 底图上?
【发布时间】:2018-11-06 07:12:42
【问题描述】:

我正在尝试向 Cartopy 底图添加一些形状文件。事实证明,一些形状文件有效,而其他形状文件则无效。我已经用谷歌搜索了一整天,没有任何运气。你能帮忙吗? 下面是我正在使用的代码。这两个形状文件可以在这里下载:

https://www.dropbox.com/sh/2lp93uz28rmyfcs/AAAiA-p4ge5KzHDC5dXlflXga?dl=0

import matplotlib.pyplot as plt 
import cartopy.crs as ccrs
from cartopy.io.img_tiles import OSM
from cartopy.io import shapereader

#%% ======== map paramters =================
map_extent_eastings=(378000,390000)
map_extent_northings=(6427500,6443000)

#%%
plt.subplots(1,1,figsize=(10,10))
ax = plt.axes(projection=ccrs.epsg(28350))
ax.set_extent([map_extent_eastings[0],map_extent_eastings[1],map_extent_northings[0],map_extent_northings[1]],crs=ccrs.epsg(28350))

tiler = OSM() 
cur_CRS = tiler.crs
zoom = 8 #12 for the final 
ax.add_image(tiler, zoom, interpolation='bilinear' )


#============= Figure out why this deosn't work ===================
### this one doesn't work 
ax.add_geometries(shapereader.Reader('data/AdditionalPumping_south_v2_test.shp').geometries(), 
                  ccrs.epsg(28350),facecolor='none',edgecolor='r',linewidth=1.5,zorder=10)

# This one works 
ax.add_geometries(shapereader.Reader('data/MAR_locations_v2.shp').geometries(), 
                  ccrs.epsg(28350),facecolor='none',edgecolor='r',linewidth=1.5,zorder=10)

plt.show()

===============================

【问题讨论】:

    标签: python shapefile cartopy


    【解决方案1】:

    我检查了您上传到 Dropbox 的 shapefile。原来 shapefile 没有被正确读取。

    当我打印出 MAR_locations_v2.shp 的记录时,这就是我得到的

    记录(MULTIPOLYGON (((386523.5418971451 6432084.711430285, 386523.5418971451 6432184.711430287、386573.541897146 6432184.711430287、386573.541897146 6432084.711430285, 386523.5418971451 6432084.711430285))), {'Name': ''}, )

    记录(MULTIPOLYGON (((386405.7078714892 6438043.356735789, 386405.7078714892 6438143.356735789、386505.7078714911 6438143.356735789、386505.7078714911 6438043.356735789, 386405.7078714892 6438043.356735789))), {'Name': ''}, )

    当我打印 AdditionalPumping_south_v2_test.shp 的记录时,我得到了

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 1, 'row': 465.0, 'column_': 94.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 2, 'row': 469.0, 'column_': 97.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 3, 'row': 470.0, 'column_': 94.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 4, 'row': 473.0, 'column_': 106.0, 'Shape_Leng': 80.0, 'Shape_Area': -400.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 5, 'row': 475.0, 'column_': 93.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 6, 'row': 475.0, 'column_': 97.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 7, 'row': 480.0, 'column_': 93.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 8, 'row': 482.0, 'column_': 97.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 9, 'row': 482.0, 'column_': 110.0, 'Shape_Leng': 80.0, 'Shape_Area': -400.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 10, 'row': 485.0, 'column_': 92.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 11, 'row': 489.0, 'column_': 97.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 12, 'row': 490.0, 'column_': 92.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 13, 'row': 491.0, 'column_': 114.0, 'Shape_Leng': 80.0, 'Shape_Area': -400.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 14, 'row': 495.0, 'column_': 91.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 15, 'row': 496.0, 'column_': 97.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 16, 'row': 500.0, 'column_': 91.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 17, 'row': 500.0, 'column_': 118.0, 'Shape_Leng': 80.0, 'Shape_Area': -400.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 18, 'row': 503.0, 'column_': 97.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 19, 'row': 509.0, 'column_': 120.0, 'Shape_Leng': 80.0, 'Shape_Area': -400.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 20, 'row': 510.0, 'column_': 96.0, 'Shape_Leng': 240.0, 'Shape_Area': -2000.0}, )

    Record(GEOMETRYCOLLECTION EMPTY, {'OBJECTID': 21, 'row': 518.0, 'column_': 119.0, 'Shape_Leng': 80.0, 'Shape_Area': -400.0}, )

    这不是问题的完整答案,但它回答了您没有得到情节的部分。您可能希望以不同的方式保存 shapefile 以便进行绘图。

    【讨论】:

    • 非常感谢。我会仔细检查形状文件。如果我使用 ArcMap,形状文件效果很好。但我同意,这里一定有问题。请问您是如何读取形状文件的?是通过 Python 吗?
    • 在尝试在 python 中读取之前,我在 QGIS 中对您的 shapefile 进行了快速有效性检查。此后,我刚刚检查了您与ax.add_geometries 一起使用的shapereader.Reader 的输出
    • 我尝试将 shapefile 保存到不同的版本。它没有帮助。我也试过pyshp。它在 pyshp 中工作。我猜这是cartopy的问题。
    • 如果您能够使用 pyshp 读取 shapefile,则可以使用那里的几何图形并将其附加到 cartopy。我认为 cartopy 在这方面很灵活。我本来打算在cartopy github页面上提出这个问题,但似乎你已经提出了。
    【解决方案2】:

    Github 上的 Cartopy 社区已经找到了解决方案。对此感兴趣的朋友,请查看https://github.com/SciTools/cartopy/issues/1217

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2015-11-26
      • 1970-01-01
      • 2020-02-07
      • 2019-05-21
      相关资源
      最近更新 更多