有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有经度和纬度值的Java KMeans算法

我发现下面的算法可以完美地处理单个值[2;4;56;10;34;....]https://radixcode.com/k-mean-clustering-algorithm-implementation-in-c-java

现在我想用geolocation coordinates替换我的单一数据集-

例如,假设我有以下几对:

Longitude: 759849.934, Latitude: 193728.08
Longitude: 760151.603, Latitude: 192624.342
Longitude: 759217.306, Latitude: 191895.671
Longitude: 758446.428, Latitude: 191074.83
Longitude: 758422.0, Latitude: 192359.0

有没有一种方法可以从LongitudeLatitude计算一个值,从而应用此算法


共 (2) 个答案

  1. # 1 楼答案

    有一个叫做geohash的概念,它本质上是将经度转换为字符串(字母数字),从中很容易找到附近的地方。你可以看看。有图书馆可以找到geohash的邻居

    然而,K-means在地理空间数据上并不适用。原因很简单,地理空间数据是非线性的。一般来说,最好使用DBSCAN/CLARA进行此操作

    关于将地理空间数据转换为单个值。我想这里也讨论过同样的话题:

    https://stackoverflow.com/questions/8285599/is-there-a-formula-to-change-a-latitude-and-longitude-into-a-single-number
    
  2. # 2 楼答案

    有几种方法可以做到这一点,但这些方法不适用于聚类地理点,可以将坐标视为二维向量,这样就可以将所有向量规范转换为一维值see her for different norms,但这对你没有多大帮助

        for (int c : cz) {
            row.add(abs(c - aItem));
          }
       groups.get(row.indexOf(Collections.min(row))).add(aItem);
       row.removeAll(row);
    

    在一个完美的实现中,K-Means也会将距离函数作为参数。在for循环中,您可以看到您的代码使用绝对值abs(c - aItem)作为距离函数,例如,您需要更改它以使用合适的距离函数look here