【发布时间】:2021-12-09 18:16:34
【问题描述】:
我对 XML 以及使代码有效的原因还很陌生,而且我使用的代码需要很长时间才能运行。
所以我想尽快从给定的经纬度值中提取海拔高度(我有很多经度、经度点)。我就是这样尝试的:
import xml.etree.ElementTree as ET
from urllib.request import urlopen
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
def elevation(lat, long):
query = ('http://openwps.statkart.no/skwms1/wps.elevation2?request=Execute&service=WPS&version=1.0.0'
f'&identifier=elevation&datainputs=lat={lat};lon={long};epsg=4326')
parsing = "{http://www.opengis.net/wps/1.0.0}"
with urlopen(query) as f:
tree = ET.parse(f)
root = tree.getroot()
return float(root.findall(f".//{parsing}Data/*")[0].text)
在我从 csv 文件中提取的数据集上使用此函数,同一文件中的多个数据集由“new_sheep”-line 分隔:
df = pd.read_csv("/Users/ninsalv/Documents/Sheepdata/Data.csv", delimiter=';',
dtype={"Initial start": "str", "Start": "str", "Stop": "str"})
print(df.head())
dataset = 1
Lat = []
Long = []
temp = 0
for i in range(len(df)):
if "new_sheep" in df.iloc[i][0]:
temp += 1
continue
if temp == dataset:
Lat.append(df.iloc[i][3])
Long.append(df.iloc[i][4])
if temp > dataset:
break
step = np.linspace(0,len(Lat),len(Lat))
altitude = []
for i in range(len(Lat)):
altitude.append(elevation(Lat[i], Long[i]))
if (i % 100) == 0:
print("round number ", i)
plt.plot(step, altitude)
这行得通,但是每 100 个海拔高度需要将近一分钟的时间,而且我有大约 7000-15000 个点要检查我的数据集。有人知道 XML、pandas 或其他可以让我的代码更快的东西吗?
【问题讨论】:
-
我猜问题不在于 XML 解析,而在于您对远程 Web 服务进行了数千次 HTTP 调用。您正在使用的 Web 服务端点似乎只返回一个点的高程:是否有可以将多个点传递到的端点?