我有一个从美国人口普查局获得的新罕布什尔州主要道路的形状文件(TIGER / Line)(文件here),并正在尝试使用Cartopy / Matplotlib串联绘制它们。
Shapefile的属性
shapefile属性分为四个类别:LINEARID
,FULLNAME
,RTTYP
和MTFCC
第一种方法|绘制所有线条
第一种方法是使用cartopy.feature加载shapefile并将其绘制出来,这可以在下面的代码片段中看到。这按预期工作,并绘制了shapefile中包含的每条道路线:
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
roads = '/path/to/file/majorroads.shp'
roads_feature = ShapelyFeature(Reader(roads).geometries(), crs.LambertConformal(), facecolor='none', edgecolor='gray')
ax.add_feature(roads_feature, linewidth=0.75)
第二种方法|地块特定属性
第二种方法是使用Cartopy Reader定位并仅绘制满足特定属性的线。阅读NASA的this文章后,我使用示例编写了以下代码:
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
roads = '/path/to/file/majorroads.shp'
roads_feature = Reader(roads)
parts = roads_feature.records()
for part in parts:
if part.attributes['FULLNAME'] == 'US Hwy 202':
ax.add_geometries(part.attributes, linewidth=0.50, facecolor='none', edgecolor='gray')
这没有在shapefile中绘制所需的线。可以进行哪些更正以确保此代码正确运行?
代码段
import geopandas as gpd
data = gpd.read_file('/path/to/file/majorroads.shp')
sorted = data[(data.RTTYP == 'I') | (data.RTTYP == 'U') | (data.FULLNAME == 'State Rte 101') | (data.FULLNAME == 'Rte 101')]
ax.add_geometries(sorted.geometry, crs=crs.LambertConformal(), linewidth=1.00, facecolor='none', edgecolor='gray')
重要注意事项
shapefile被读入一个熟悉的数据框结构,如在Pandas的使用中所见。您会注意到:data[(data.RTTYP == 'I') | (data.RTTYP == 'U') | (data.FULLNAME == 'State Rte 101') | (data.FULLNAME == 'Rte 101')]