目前手中有城区房屋建筑面数据,属性中包含“建筑层数”。
计划对gdb中的房屋数据进行处理,设置新字段存储房屋高度,导出为geojson格式用于后续渲染。
【1】字段计算
arcgis pro中加载数据,创建新字段,用于赋值。
现有的房屋数据为面图层,属性字段FLOORNUM中存储了房屋层数,本次采用字段值×3作为建筑高度值;未采集层数的房屋面字段赋值为-9999,需要单独处理。
在属性表中使用“计算字段”功能,对新字段EC进行赋值。
由于本次涉及浅层次的逻辑判断和计算,编写简单的代码块实现上述处理目标:
def tempCal(a):
if a>=0:
return a*3
else:
return 0
定义tempCal函数,传参使用FLOORNUM,返回值赋值给新字段EC,点击执行。
【2】gdb数据转出为shp
ArcGIS Pro的导出shp功能藏在工具箱里了!
图层树里的“导出”功能,无法指定输出为shp格式。
在“地理处理”模块,输入关键字检索,找到“要素类转Shapefile”工具:
输入要素选择源图层,输出文件夹指定shp存放路径,点击运行即可。
【3】shp数据转换为geojson格式
使用python实现shp到geojson的格式转换。
需要用fiona库,如果之前没有安装,可以使用pip安装:
pip install fiona
使用以下代码进行转换:
import codecs
import json
import fiona
shapefile_path = 'G:/data/temp/building/build1.shp'
# 使用fiona读取shp文件
with fiona.open(shapefile_path, 'r') as shapefile:
geojson_features = [
{
"type":"Feature",
"properties":{
key: value for key, value in feature['properties'].items()
},
"geometry": feature["geometry"]
}for feature in shapefile
]
#创建geojson字典
geojson = {
"type": "FeatureCollection",
"features": geojson_features
}
n = len(geojson_features)
geojson_output_path = 'G:/data/temp/build1.geojson'
for i in range(0, n):
geomI = geojson_features[i]['geometry']
geometry_json = json.dumps(geomI.__geo_interface__)
geojson_features[i]['geometry'] = json.loads(geometry_json)
ws = codecs.open(geojson_output_path, 'w', encoding='utf-8')
ws.write(json.dumps(geojson, ensure_ascii=False, indent=4) + '\n')
ws.close()
print('GeoJSON file saved to:'+ geojson_output_path)
等待代码执行完毕,控制台提示输出成功。
geojson文件可以用cesium等软件打开,看看转换效果: