2017-09-18 11 views
0

が、私は、単一の値[2;4;56;10;34;....]で完璧に動作し、次のアルゴリズムを発見した値私は、次のペアを持っている:経度と緯度とJavaのK-手段は

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から単一の値を計算する方法はありますか?

答えて

1

これを行うにはいくつかの方法がありますが、ジオポイントをクラスタリングするのに適していないものは、座標を2次元ベクトルと考えるので、それらを1次元の値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もパラメータとしてDistance関数を使用します。 forループでは、あなたのコードは、距離関数として絶対値abs(c - aItem)を使用していることがわかります。たとえば、適切な距離関数を使用するように変更する必要があります。here

+0

ありがとうKetrox。完全ではないにしても問題はありません。私は、可能な限り最善の方法で動作する最初の実装を探しています。しかし、私の元の質問はまだ残っています:緯度と経度の値を単一の値に変換する方法はありますか?私はそれに続くことができることもまた準備:(ラット+90)* 180 + lng ...あなたは同意する? – hublo

+0

は答えを編集しました – ketrox

0

本質的に緯度経度を文字列(アルファベット数字)に変換するgeohashというコンセプトがあり、そこから近くの場所を簡単に見つけることができます。あなたは一見をすることができます。地獄の隣人を見つけるための図書館があります。

しかし、K-meansは地理空間データでうまく機能しません。単純な理由から、地理空間データは非線形である。通常、この目的のためにDBSCAN/CLARAを使用することが望ましいです。

ジオ空間データを単一の値に変換する場合。私は同じ話題についてここで議論されている事:

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