将具有格式的文本从 ArcGIS 地图服务器查询复制到文本文件,同时保持格式,使用 Python 3?
Copy text with formatting from a ArcGIS map server query to a text file, while maintaining formatting, using Python 3?
我正在尝试自动化一个过程,通过该过程我可以查询 ArcGIS 地图服务器,获取结果文本并将其保存为 .json 文件。
可以通过API查询地图服务器。
api = "https://csg.esri-southafrica.com/server/rest/services/CSGSearch/MapServer/2/query?where=1%3D1&text=&objectIds=&time=&geometry=2053965%2C-4019103%2C2054056%2C-4019169+&geometryType=esriGeometryEnvelope&inSR=3857&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=3857&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=¶meterValues=&rangeValues=&f=pjson"
这个 URL 不是那么重要,但是当我在浏览器中 运行 这个时,它给出了这个响应:
{
"displayFieldName": "SP_NAME",
"fieldAliases": {
"OBJECTID": "OBJECTID",
"GID": "Geometry Identifier",
"PRCL_KEY": "26 Digit Code",
"PRCL_TYPE": "Parcel Type",
"LSTATUS": "Legal Status",
"WSTATUS": "Work Status",
"GEOM_AREA": "Geometry Area",
"COMMENTS": "Comments",
"TAG_X": "Longitude",
etc.etc.etc
如果我将此文本复制到记事本并另存为 "any_file.json"。然后我可以在 QGIS 中加载它并将其保存为 shapefile。
我一直在使用下面的代码来尝试实现这个
import requests
mainapi = "https://csg.esri-southafrica.com/server/rest/services/CSGSearch/MapServer/2/query?where=1%3D1&text=&objectIds=&time=&geometry=2053965%2C-4019103%2C2054056%2C-4019169+&geometryType=esriGeometryEnvelope&inSR=3857&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=3857&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=¶meterValues=&rangeValues=&f=pjson"
r = str(requests.get(mainapi).json())
#Write response to json text file
with open("csg_erven.json", "w") as f:
f.write(r)
.json 文件中的结果未格式化
它们显示为:
{'displayFieldName': 'SP_NAME', 'fieldAliases': {'OBJECTID': 'OBJECTID', 'GID': 'Geometry Identifier', 'PRCL_KEY':
我一般不熟悉编码,但我假设格式在这里很重要。如何复制带格式的文本?是编码问题吗?
当我从浏览器手动复制格式化文本时它工作正常,但单行文本不起作用。
如有任何帮助,我们将不胜感激。
在我看来,您保存文件的方式有点混乱。尝试使用 json 库而不是转换为字符串并另存为文本,这可能会导致问题
import json
with open('csg_erven.json', 'w') as f:
json.dump(requests.get(mainapi).json(), f)
我正在尝试自动化一个过程,通过该过程我可以查询 ArcGIS 地图服务器,获取结果文本并将其保存为 .json 文件。
可以通过API查询地图服务器。
api = "https://csg.esri-southafrica.com/server/rest/services/CSGSearch/MapServer/2/query?where=1%3D1&text=&objectIds=&time=&geometry=2053965%2C-4019103%2C2054056%2C-4019169+&geometryType=esriGeometryEnvelope&inSR=3857&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=3857&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=¶meterValues=&rangeValues=&f=pjson"
这个 URL 不是那么重要,但是当我在浏览器中 运行 这个时,它给出了这个响应:
{
"displayFieldName": "SP_NAME",
"fieldAliases": {
"OBJECTID": "OBJECTID",
"GID": "Geometry Identifier",
"PRCL_KEY": "26 Digit Code",
"PRCL_TYPE": "Parcel Type",
"LSTATUS": "Legal Status",
"WSTATUS": "Work Status",
"GEOM_AREA": "Geometry Area",
"COMMENTS": "Comments",
"TAG_X": "Longitude",
etc.etc.etc
如果我将此文本复制到记事本并另存为 "any_file.json"。然后我可以在 QGIS 中加载它并将其保存为 shapefile。
我一直在使用下面的代码来尝试实现这个
import requests
mainapi = "https://csg.esri-southafrica.com/server/rest/services/CSGSearch/MapServer/2/query?where=1%3D1&text=&objectIds=&time=&geometry=2053965%2C-4019103%2C2054056%2C-4019169+&geometryType=esriGeometryEnvelope&inSR=3857&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=3857&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=¶meterValues=&rangeValues=&f=pjson"
r = str(requests.get(mainapi).json())
#Write response to json text file
with open("csg_erven.json", "w") as f:
f.write(r)
.json 文件中的结果未格式化
它们显示为:
{'displayFieldName': 'SP_NAME', 'fieldAliases': {'OBJECTID': 'OBJECTID', 'GID': 'Geometry Identifier', 'PRCL_KEY':
我一般不熟悉编码,但我假设格式在这里很重要。如何复制带格式的文本?是编码问题吗?
当我从浏览器手动复制格式化文本时它工作正常,但单行文本不起作用。
如有任何帮助,我们将不胜感激。
在我看来,您保存文件的方式有点混乱。尝试使用 json 库而不是转换为字符串并另存为文本,这可能会导致问题
import json
with open('csg_erven.json', 'w') as f:
json.dump(requests.get(mainapi).json(), f)