目前手中有城区房屋建筑面数据,属性中包含“建筑层数”。

计划对gdb中的房屋数据进行处理,设置新字段存储房屋高度,导出为geojson格式用于后续渲染。

【1】字段计算

arcgis pro中加载数据,创建新字段,用于赋值。

现有的房屋数据为面图层,属性字段FLOORNUM中存储了房屋层数,本次采用字段值×3作为建筑高度值;未采集层数的房屋面字段赋值为-9999,需要单独处理。

在属性表中使用“计算字段”功能,对新字段EC进行赋值。

由于本次涉及浅层次的逻辑判断和计算,编写简单的代码块实现上述处理目标:

ArcGIS Pro字段计算处理+转GeoJson_gis

def tempCal(a):
    if a>=0:
        return a*3
    else:
        return 0

定义tempCal函数,传参使用FLOORNUM,返回值赋值给新字段EC,点击执行。

【2】gdb数据转出为shp

ArcGIS Pro的导出shp功能藏在工具箱里了!

图层树里的“导出”功能,无法指定输出为shp格式。

在“地理处理”模块,输入关键字检索,找到“要素类转Shapefile”工具:

ArcGIS Pro字段计算处理+转GeoJson_gis_02

输入要素选择源图层,输出文件夹指定shp存放路径,点击运行即可。

ArcGIS Pro字段计算处理+转GeoJson_gis_03

【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等软件打开,看看转换效果:

ArcGIS Pro字段计算处理+转GeoJson_gis_04