参考资料
https://blog.csdn.net/u012539364/article/details/74059679
可用于的地图厂商
由于我是用百度地图做项目,目前只在百度地图上做过准确性测试
其他地图厂商没试过
涉及到的公式
地球半径:6378137米
任意地球经度周长:2 * 6378137米 * Math.PI = 40075016.68557849 米
南纬38度地球周长: 40075016.68557849 * Math.cos(38) = 38274592.22115159 米
问:任意经度,纬度38度处1米等于几度
答:
南北方向1米等于:360 / 40075016.68557849 =0.000008983152841195214 度(注:任意经度地球周长 40075016.68557849米)
东西方向1米等于:360 / 38274592.22115159 =0.000009405717451407729 度(注:38纬度地球周长 38274592.22115159 米)
————————————————
参考资料里的
直接贴代码吧
import math
def square(lon, lat, dis):
'''
:param lon:经度
:param lat:纬度
:param dis:需要的正方形边长
:return:4个角经纬度的列表 [(),(),(),()]
'''
L = []
dis = dis/2
perimeter_lon = 2 * 6378137 * math.pi
north_south_lon_m = 360/perimeter_lon # 南北方向一米,单位(度)
perimeter_lat = 40075016.68557849 * math.cos(lon)
east_west_lat_m = 360/perimeter_lat # 东西方向一米,单位(度on
point_lat_1 = lat + north_south_lon_m*dis
point_lon_1 = lon - east_west_lat_m*dis
point_1 = (point_lon_1,point_lat_1)
point_lat_2 = lat + north_south_lon_m*dis
point_lon_2 = lon + east_west_lat_m*dis
point_2 = (point_lon_2,point_lat_2)
point_lat_3 = lat - north_south_lon_m*dis
point_lon_3 = lon + east_west_lat_m*dis
point_3 = (point_lon_3,point_lat_3)
point_lat_4 = lat - north_south_lon_m*dis
point_lon_4 = lon - east_west_lat_m*dis
point_4 = (point_lon_4,point_lat_4)
L.append(point_1)
L.append(point_2)
L.append(point_3)
L.append(point_4)
return L
lon = 104.14448021513333
lat = 30.66940441906869
dis = 20
L = square(lon, lat, dis)
for i in L:
print(i)
perimeter_lat = 40075016.68557849 * math.cos(lon)这个位置其实应该是perimeter_lat = 40075016.68557849 * math.cos(lat),但这样算出来他是一个长方形,于是改成了lon