经纬度转换的简要总结

对于经纬度转换这件事,我不想去抄写或证明复杂的推导,故只把简要的方法及工具放在这里,供之后方便取用。

1、经纬度在线转换工具(十进制经纬度与度分秒互换)

http://www.ab126.com/Geography/2703.html

图1 经纬度在线转换

2、给出两点经纬度,计算两点间距离

http://www.movable-type.co.uk/scripts/latlong.html

图2 两点间距离计算

3、已知两点经纬度,计算其距离(米)的程序代码

function measure(lat1, lon1, lat2, lon2){  // generally used geo measurement function
    var R = 6378.137; // Radius of earth in KM
    var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180;
    var dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180;
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
    Math.sin(dLon/2) * Math.sin(dLon/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;
    return d * 1000; // meters
}

这是JavaScript的版本,可以自己修改成其他语言的版本。
(参考自http://stackoverflow.com/questions/639695/how-to-convert-latitude-or-longitude-to-meters

K-means聚类是一种常见的无监督机器学习算法,用于将数据集中的点划分为K个簇。K是指聚类的数量,算法的目标是最小化每个点到其所属簇中心(质心)的距离的平方和。 当处理经纬度数据进行聚类时,需要注意经纬度是球面坐标,如果直接使用普通的欧几里得距离计算可能会得到不准确的结果,因为地球是曲面。在实际应用中,可以使用Haversine距离公式来计算地球上两点之间的距离,以获得更准确的聚类结果。 以下是使用Python实现经纬度数据的K-means聚类的一个简要例子: ```python import numpy as np from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from math import radians, cos, sin, asin, sqrt def haversine(lon1, lat1, lon2, lat2): # 将十进制度数转换为弧度 lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # Haversine公式计算两点间距离 dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2 c = 2 * asin(sqrt(a)) r = 6371 # 地球平均半径,单位为公里 return c * r # 假设data是一个包含经纬度的numpy数组,其中第一列是经度,第二列是纬度 data = np.array([ [116.46, 39.92], [117.19, 39.13], # ... 更多经纬度数据 ]) # 使用Haversine公式计算距离 X = np.array([haversine(row[0], row[1], data[:, 0], data[:, 1]) for row in data]) # 数据标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X.reshape(-1, 1)) # 应用K-means算法 kmeans = KMeans(n_clusters=3, random_state=0).fit(X_scaled) # 输出聚类结果 print(kmeans.labels_) # 聚类中心点 print(kmeans.cluster_centers_) ``` 在实际应用中,需要根据数据的具体情况调整K值,即聚类的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值