5

GPSを使用するAndroidアプリに取り組んでいます。「新しい位置」(ポイントC)が線分ABから離れすぎている場合に、GPS位置データを破棄する方法があるかどうかを知りたいです。ウィキペディアにあるポイントツーラインセグメントの数式を使用しています。

これまでのところ、緯度と経度の座標を使用しようとすると、私が持っているコードはNaNを返します。

private void verifyGPSLocation(Location start, Location end, Location current){
    final double errorValue = 0.0000216;
    double normalLength = Math.hypot(end.getLatitude() - start.getLatitude(), end.getLongitude() - start.getLongitude());
    double ret = Math.abs(((current.getLatitude() - start.getLatitude()) * (end.getLongitude() - start.getLongitude()) - (end.getLatitude() - start.getLatitude()))/normalLength );
    Log.e("Coooooord", normalLength+"--"+ret);
}

これは私の最初の投稿ですので、これを正しく行っていないか、十分な情報を持っていない場合はお知らせください。あなたの助けをありがとう、私はこのサイトが大好きです!

4

2 に答える 2

3

2つの地理的ポイント間の距離を見つけるために使用している式は単純すぎると思います。地球の湾曲のため、式はもう少し複雑です。ここを見てください、これはより正確な近似を提供します。

Javascriptの例もあるので、構文を少し調整するだけで簡単にJavaに変更できます。

明確にした後、2つの場所の間の地球上のパスまでのポイントの距離を探しているようです。上記のリンクでクロストラック距離の変動を確認してください。

于 2013-02-11T00:41:43.567 に答える
2

距離アルゴリズムが間違っています。地球の曲率は考慮されていません。経度の線は、緯度が高いほど近く、緯度が低いほど近くなります。Location.distanceTo関数を使用します。

于 2013-02-11T00:40:47.503 に答える