Python 输入多个经纬度坐标,找出中心点

来源:互联网 发布:亚欧铁路知乎 编辑:程序博客网 时间:2024/05/24 01:51
根据工作需要,将多个坐标点的中心点找出,在stackoverflow中发现了一个解决方法,也有人提供了Python版本,但运行之后的结果却是几个带负号的小于1的小数,再观察其他版本的例子时发现需要将经纬度进行转化,将角度化为弧度就需用角度乘以π/180,反之就除以(π/180),所以在C#版本中就有
//角度转弧度var latitude = geoCoordinate.Latitude * Math.PI / 180;var longitude = geoCoordinate.Longitude * Math.PI / 180;....//弧度转角度return new GeoCoordinate(centralLatitude * 180 / Math.PI, centralLongitude * 180 / Math.PI);

 而在Python中就有角度弧度转化的函数  radians()方法:转换角度为弧度的 degrees()方法:从弧度转换到角度

所以Python版本的代码应如下,其中输入为经纬度的list,例如geolocations = ((lat1,lon1), (lat2,lon2),),输出则为中心点的经纬度(center_lon,center_lat)


#-*- coding: UTF-8 -*-from math import cos, sin, atan2, sqrt, pi ,radians, degreesdef center_geolocation(geolocations):        x = 0    y = 0    z = 0    lenth = len(geolocations)    for lon, lat in geolocations:        lon = radians(float(lon))        lat = radians(float(lat))               x += cos(lat) * cos(lon)        y += cos(lat) * sin(lon)        z += sin(lat)    x = float(x / lenth)    y = float(y / lenth)    z = float(z / lenth)    return (degrees(atan2(y, x)), degrees(atan2(z, sqrt(x * x + y * y))))if __name__ == '__main__':       locations = [[116.568627,39.994879],[116.564791,39.990511],[116.575012,39.984311]]    print center_geolocation(locations)

参考链接

http://stackoverflow.com/questions/6671183/calculate-the-center-point-of-multiple-latitude-longitude-coordinate-pairs



2 0
原创粉丝点击