一、中国2421个国家级气象观测站点空间分布
下载网站的原始文件,得到一个station-wgs的压缩包
解压之后通过QGIS打开shp文件
就可以看到站点的空间分布情况
打开属性,即可看到站点的数据属性
二、使用python处理上述的shp文件,生成csv和json格式
# -*- coding: utf-8 -*-
import csv
import json
try:
from osgeo import gdal
from osgeo import ogr
from osgeo import osr
except ImportError:
import gdal
import ogr
import osr
# 读shp文件
def readShp():
# 支持中文路径
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
# 支持中文编码
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
# 注册所有的驱动
ogr.RegisterAll()
# 打开数据
ds = ogr.Open("./station/stations-geo.shp", 0)
if ds is None:
return "打开文件失败!"
# 获取数据源中的图层个数,shp数据图层只有一个,gdb、dxf会有多个
layer_count = ds.GetLayerCount()
print("图层个数 = ", layer_count)
# 获取第一个图层
layer = ds.GetLayerByIndex(0)
if layer == None:
return "获取图层失败!"
# 对图层进行初始化
layer.ResetReading()
# 输出图层中的要素个数
num = layer.GetFeatureCount(0)
print("要素个数 = ", num)
print("属性表结构信息:")
attrs = []
lydefn = layer.GetLayerDefn()
iFieldCount = lydefn.GetFieldCount()
for iAttr in range(iFieldCount):
oField = lydefn.GetFieldDefn(iAttr)
attrs.append(oField.GetNameRef())
print("%s: %s(%d.%d)" % (
oField.GetNameRef(),
oField.GetFieldTypeName(oField.GetType()),
oField.GetWidth(),
oField.GetPrecision()))
result_list = []
# 获取要素
for i in range(num):
ofeature = layer.GetFeature(i)
data = {}
for j in attrs:
data.setdefault(j, ofeature.GetFieldAsString(j))
for key in data:
if key != 'sheng' and key != 'name' and key != 'type' and key != 'memo':
data[key] = eval(data[key])
if key == 'NO':
data[key] = int(data[key])
elif key == 'stationid':
data[key] = int(data[key])
result_list.append(data)
ds.Destroy()
del ds
print(result_list)
new_s = sorted(result_list, key=lambda e: e.__getitem__('NO'))
f = open('test1.csv', 'w', encoding='utf8', newline='') # 指定newline=‘’参数
writer = csv.DictWriter(f, fieldnames=data.keys())
writer.writeheader() # 将字段写入csv格式文件首行
for line in new_s:
writer.writerow(line)
with open("test1.json", 'w', encoding="utf-8") as f:
json.dump(new_s, f, ensure_ascii=False)
return result_list
readShp()
得到原始文件的csv和json格式
数据来源请引用:地理遥感生态网科学数据注册与出版系统