- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2020-8-26 17:06:36
|
显示全部楼层
本帖最后由 15195775117 于 2020-10-13 17:27 编辑
欲写先读---读取美国州界案例
3个附件为美国州界shp文件,是从IDL的软件数据里找的,画的图和代码如下。
观察数据特点,如果一个州的边界是一笔画的,其边界几何类型就是Polygon;如果是多段,就是MultiPolygon。
边界坐标数据有的是形如(经度、纬度)的元组组成的list,有的是单个的形如(经度、纬度)的元组,个人感觉有些不统一。
import fiona
import matplotlib.pyplot as plt
shpfile=r"C:\Users\Administrator\Desktop\shp_example\states.shp"
c = fiona.open(shpfile)
print('文件编码:',c.encoding)
print(c.schema['properties'])
# 输出数据的基本信息
print(f'数据范围:{c.bounds}')
print(f'投影定义:{c.crs}')
print(f'数据格式:{c.driver}')
print(f'数据编码:{c.encoding}')
# 输出文件的属性字段信息
fields = c.schema['properties']
print('文件的属性字段信息:')
for k, v in fields.items():
print(f'{k} -> {v}')
plt.axes([0,0,1,1])#撑满画布
plt.axis('off')#隐藏坐标轴
# 遍历集合中的要素
# f是一个tuple,第一个元素是要素编号,第二个是dict格式的要素
for f in c.items():
# 输入要素的详细信息
# 要素是以GeoJSON表示的
x=f[1]
# dict_keys(['type', 'id', 'properties', 'geometry'])
print('州名:',x['properties']['STATE_NAME'])
geom=x['geometry']
crd=geom['coordinates']
n=len(crd)
print('该州几何体类型与个数:',geom['type'],n)
for i in range(n):
y=crd
m=len(y)
if m==1:
y=y[0]
if isinstance(y,list)==True:
lng=[]
lat=[]
dotnum=len(y)
for (lng0,lat0) in y:
lng.append(lng0)
lat.append(lat0)
plt.plot(lng,lat,lw=0.5)
if m>1:
lng=[]
lat=[]
for j in range(m):
if isinstance(y[j],tuple)==True:
lng.append(y[j][0])
lat.append(y[j][1])
plt.plot(lng,lat,lw=0.5)
plt.show()
输出结果:
文件编码: iso-8859-1
OrderedDict([('AREA', 'float:12.3'), ('STATE_NAME', 'str:25'), ('STATE_FIPS', 'str:2'), ('SUB_REGION', 'str:7'), ('STATE_ABBR', 'str:2'), ('POP1990', 'int:10'), ('POP1996', 'int:10')])
数据范围:(-178.21502685546875, 18.924781799316406, -66.9698486328125, 71.40664672851562)
投影定义:{}
数据格式:ESRI Shapefile
数据编码:iso-8859-1
文件的属性字段信息:
AREA -> float:12.3
STATE_NAME -> str:25
STATE_FIPS -> str:2
SUB_REGION -> str:7
STATE_ABBR -> str:2
POP1990 -> int:10
POP1996 -> int:10
州名: Washington
该州几何体类型与个数: MultiPolygon 3
州名: Montana
该州几何体类型与个数: Polygon 1
州名: Maine
该州几何体类型与个数: MultiPolygon 2
... ...
州名: Alaska
该州几何体类型与个数: MultiPolygon 32
州名: Michigan
该州几何体类型与个数: MultiPolygon 5
|
|