5

開始緯度、経度、終了緯度、経度があります。

緯度と経度を使用してジオポイントを見つけます。

その後、2つのジオポイントの間に線を引きます。

私の質問は、ジオポイントの中心を見つける方法ですか?

開始位置と終了位置に「OverlayItem」を表示します。しかし、ジオポイントの中心を見つけることができません。

中心点を見つける方法は?

開始位置と終了位置にoverlayItemを表示するために以下のコードを使用します。

        drawable            = getResources().getDrawable(R.drawable.annot_start);
        point               = new GeoPoint((int)(startLatitude*1E6), (int)(startLongitude*1E6));
        overlayItem         = new OverlayItem(point, startAddress, "Welcome");
        itemizedOverlay[n]= new MyItemizedOverlay(drawable, mapView);
        itemizedOverlay[n].addOverlay(overlayItem);
        mapOverlays.add(itemizedOverlay[n]);

        drawable            = getResources().getDrawable(R.drawable.annot_end);
        point               = new GeoPoint((int)(endLatitude*1E6), (int)(endLongitude*1E6));
        overlayItem         = new OverlayItem(point, endAddress, "Welcome");
        itemizedOverlay[n+1]= new MyItemizedOverlay(drawable, mapView);
        itemizedOverlay[n+1].addOverlay(overlayItem);
        mapOverlays.add(itemizedOverlay[n+1]);
4

3 に答える 3

9

Haversine formulaスニペットを使用して、このページで確認できます

public static void midPoint(double lat1,double lon1,double lat2,double lon2){

double dLon = Math.toRadians(lon2 - lon1);

//convert to radians
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
lon1 = Math.toRadians(lon1);

double Bx = Math.cos(lat2) * Math.cos(dLon);
double By = Math.cos(lat2) * Math.sin(dLon);
double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);

//print out in degrees
System.out.println(Math.toDegrees(lat3) + " " + Math.toDegrees(lon3));
}
于 2012-07-27T07:01:44.740 に答える
0

2点の緯度の平均と経度の平均をとることで、中点を概算できます。

もう少し正確に必要な場合は、Haversine式といくつかの代数を使用して中点を導出できます。

于 2012-07-27T05:57:25.860 に答える
0

チェックしたソリューションは私には機能しません。

とにかく、私は最も簡単な解決策を見つけました:

   private GeoPoint midPoint(double lat1,double lon1,double lat2,double lon2){
        //create origin geopoint from parameters
        GeoPoint origin = new GeoPoint(lat1,lon1);
        //create destination geopoints from parameters
        GeoPoint destination = new GeoPoint(lat2,lon2);
        //calculate and return center
        return GeoPoint.fromCenterBetween(origin, destination);
    }

起点と終点がGeoPointの場合は、「GeoPoint.fromCenterBetween」メソッドを直接使用できます。

于 2015-11-10T08:20:47.640 に答える