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源码