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

    xiaoxiao2021-03-25  133

    根据工作需要,将多个坐标点的中心点找出,在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, degrees def 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

    转载请注明原文地址: https://ju.6miu.com/read-7221.html

    最新回复(0)