利用python实现直角坐标转换为极坐标。
import numpy as np
import pandas as pd
'''
将经纬度转换为极坐标
'''
df = pd.read_csv('data.csv')
# 纬度latitude,经度longitude
loc_x = df['latitude'].values
loc_y = df['longitude'].values
# 将直角坐标转换为极坐标,可以用坐标中最小的点为极点,也可以用(0,0)为极点
# 半径
def get_radius(x, y):
r = np.sqrt((x - x_min) ** 2 + (y - y_min) ** 2)
# r = np.sqrt((x **2+y **2))
return r
# 角度
def get_angle(x, y):
a = np.arctan((y - y_min) / (x - x_min)) * 180 / np.pi
# a = np.arctan(y / x * 180 / np.pi)
return a
# 将最小的点设为极点
x_min = df['latitude'].values.min()
y_min = df['longitude'].values.min()
radius = []
angle = []
for x, y in zip(loc_x, loc_y):
radius.append(get_radius(x, y))
angle.append(get_angle(x, y))
radius = np.array(radius)
angle = np.array(angle)
# 保留小数点后8位
df['radius'] = radius.round(decimals=8)
df['angle'] = angle.round(decimals=8)
注意:在有些数据中,经纬度会以负数的形式存在,用来区分东西经度和南北纬度的,需要考虑进去。可以先取绝对值,然后在进行坐标变换。