将纬度/经度转换为XY的有效方式



我有一个工作script,它将LatitudeLongitude坐标转换为笛卡尔坐标。但是,我必须针对每个时间点(row by row(的特定点执行此操作。

我想在更大的df上做一些类似的事情。我不确定在每个row上迭代的loop是否是最有效的方法?以下是转换单个XY点的script

import math
import numpy as np
import pandas as pd
point1 = [-37.83028766, 144.9539561]
r = 6371000 #radians of earth meters
phi_0 = point1[1]
cos_phi_0 = math.cos(np.radians(phi_0))
def to_xy(point, r, cos_phi_0):
lam = point[0]
phi = point[1]
return (r * np.radians(lam) * cos_phi_0, r * np.radians(phi))
point1_xy = to_xy(point1, r, cos_phi_0)

如果我想在单点之间转换,这很好。问题是,如果我有一个大的数据帧或坐标列表(>100,000 rows(。CCD_ 11到每个CCD_ 12的CCD_。有没有更好的方法来执行相同的功能?

下面是一个稍微大一点的df的例子。

d = ({
'Time' : [0,1,2,3,4,5,6,7,8],       
'Lat' : [37.8300,37.8200,37.8200,37.8100,37.8000,37.8000,37.7900,37.7900,37.7800],       
'Long' : [144.8500,144.8400,144.8600,144.8700,144.8800,144.8900,144.8800,144.8700,144.8500],                               
})
df = pd.DataFrame(data = d)

如果我是你,我会这么做。(Btw:元组铸造部分可以进行优化。

import numpy as np
import pandas as pd
point1 = [-37.83028766, 144.9539561]
def to_xy(point):
r = 6371000  #radians of earth meters
lam,phi = point
cos_phi_0 = np.cos(np.radians(phi))

return (r * np.radians(lam) * cos_phi_0,
r * np.radians(phi))
point1_xy = to_xy(point1)
print(point1_xy)
d = ({
'Lat' : [37.8300,37.8200,37.8200,37.8100,37.8000,37.8000,37.7900,37.7900,37.7800],       
'Long' : [144.8500,144.8400,144.8600,144.8700,144.8800,144.8900,144.8800,144.8700,144.8500],                               
})
df = pd.DataFrame(d)
df['to_xy'] = df.apply(lambda x: 
tuple(x.values),
axis=1).map(to_xy)
print(df)

最新更新