GeoScene分批次下载GIS数据Python源码

2025-07-10 10:30:29 1 次阅读

项目使用了GeoScene,有10万多条数据,一次下载不下来,使用了分批次下载的方法。

示例代码

import requests
import json

def get_pipe_count():
    url = "https://127.0.0.1:6443/geoscene/rest/services/GAS/GAS_CURRENT/MapServer/0/query?where=1%3D1&text=&objectIds=&time=&timeRelation=esriTimeRelationOverlaps&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&distance=&units=esriSRUnit_Foot&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=4326&havingClause=&returnIdsOnly=false&returnCountOnly=true&orderByFields=OBJECTID&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&historicMoment=&returnDistinctValues=false&resultOffset=&resultRecordCount=&returnExtentOnly=false&sqlFormat=none&datumTransformation=¶meterValues=&rangeValues=&quantizationParameters=&featureEncoding=esriDefault&f=pjson"
    resp = requests.get(url, verify=False)
    obj = json.loads(resp.text)
    return obj["count"]

def download(offset, size):
    url = f"https://192.168.156.36:6443/geoscene/rest/services/GAS/GAS_CURRENT/MapServer/0/query?where=1%3D1&text=&objectIds=&time=&timeRelation=esriTimeRelationOverlaps&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&distance=&units=esriSRUnit_Foot&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=4326&havingClause=&returnIdsOnly=false&returnCountOnly=false&orderByFields=OBJECTID&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&historicMoment=&returnDistinctValues=false&resultOffset={offset}&resultRecordCount={size}&returnExtentOnly=false&sqlFormat=none&datumTransformation=¶meterValues=&rangeValues=&quantizationParameters=&featureEncoding=esriDefault&f=pjson"
    resp = requests.get(url, verify=False)
    obj = json.loads(resp.text)
    return obj
    
def main():
    count = get_pipe_count()
    print(f"管线条数:{count}")
    batch_size = 10000
    epochs = count / batch_size if count % batch_size == 0 else int(count / batch_size) + 1
    result = None
    for i in range(epochs):
        begin = batch_size * i
        print(f"正在下载:{begin}~{begin + batch_size}")
        result1 = download(begin, batch_size)
        if result == None:
            result = result1
        else:
            features = result1["features"]
            for feature in features:
                result["features"].append(feature)
        print(f"下载完成:{begin}~{begin + batch_size}")
    file = open("pipe_data.json", "w")
    json.dump(result,file,ensure_ascii=False)
    file.flush()
    file.close()
    print("管线数据全部下载完成")

if __name__ == "__main__":
    main()
转载请注明转自www.hylab.cn,原文地址:GeoScene分批次下载GIS数据Python源码

评论 (0)

登录后发表评论

暂无评论,快来发表第一条评论吧!