python 已知极点经纬度,极径长度和方位角大小,如何求极径终点那一点的经纬度?
首先,我们需要将极点的经纬度转换为笛卡尔坐标系中的点,然后根据方位角和极径长度计算出极径终点的笛卡尔坐标。最后,将笛卡尔坐标转换回经纬度即可。
以下是一个示例代码,其中使用了pyproj库进行坐标系转换和geopy库进行距离计算:
import math
import pyproj
from geopy.distance import distance
# 极点经纬度
pole_lon, pole_lat = -122.4194, 37.7749
# 极径长度
r = 1000 # 单位为米
# 方位角(以北为0度,顺时针递增)
theta = 45 # 单位为度
# 将极点经纬度转换为笛卡尔坐标系中的点
proj_latlon = pyproj.Proj(proj='latlong', datum='WGS84')
proj_xy = pyproj.Proj(proj='utm', zone=10, datum='WGS84')
pole_x, pole_y = pyproj.transform(proj_latlon, proj_xy, pole_lon, pole_lat)
# 计算极径终点的笛卡尔坐标
theta_rad = math.radians(theta)
end_x = pole_x + r * math.cos(theta_rad)
end_y = pole_y + r * math.sin(theta_rad)
# 将笛卡尔坐标转换回经纬度
end_lon, end_lat = pyproj.transform(proj_xy, proj_latlon, end_x, end_y)
# 计算极径终点与极点的距离,验证结果
dist = distance((pole_lat, pole_lon), (end_lat, end_lon)).m
print(dist) # 输出结果应该接近于r
注意,这里使用了UTM投影作为笛卡尔坐标系,这是因为在小范围内UTM投影可以视为平面坐标系,方便计算。如果需要处理全球范围的数据,则需要使用更复杂的投影方式。
将函数对象作为值赋给变量
def func():
print('this is func')
f = func # 注意:使用括号的话表示调用这个函数,拿函数对象不要加括号
f() # f变量已经拿到函数对象,所以直接调用f相当于间接调用 func函数
打印结果:'this is func'
可以作为返回值使用
def func():
print('this is func')
def add(x):
return x # 收到传递的值以后,没有做别的操作就执行return返回了这个值
f = func # 拿到func函数对象
res = add(func) # 将func函数对象传递给add函数
# res = func 因为将func传递进去后,执行了return 将它传递的值又返回给它了
print(res)
<function func at 0x7f9c1e50eca0> # 打印的还是func的属性
可以作为容器类型的元素,如:列表、字典、元组、集合
def func():
print('this is func project')
def bar():
print('this is bar project')
lis = [1,2,func,bar] # 将函数对象作为元素放入列表内
print(lis)
[1,2,<function func at 0x7fb5d5b0eca0>]
lis[-1]() # 可以通过这种方式执行这个函数对象
'this is bar project'
lis[-2]()
'this is func project'