【问题标题】:Calculating midpoint from two coordinates从两个坐标计算中点
【发布时间】:2015-04-01 16:25:56
【问题描述】:

我在尝试找到两点之间的中点时遇到了一些问题。这是我得到两点之间最短距离的部分:

                    double distance = 0;
                    double minDistance = Double.MAX_VALUE;

                    convertedHotSpotGeomList = RetrieveHotSpotAsyncTask.convertedHotSpotGeom;
                    LatLng[] minPoints = new LatLng[2]; 

                    for(int i = 0; i < convertedHotSpotGeomList.size(); i++){
                        LatLng point1 = new LatLng(convertedHotSpotGeomList.get(i).getY(),   convertedHotSpotGeomList.get(i).getX());                                 
                        LatLng point2 = new LatLng(convertedHotSpotGeomList.get(++i).getY(), convertedHotSpotGeomList.get(++i).getX());

                        distance = calculateDistance(point1, point2);
                        if(distance < minDistance){
                            minDistance = distance;
                            minPoints[0] = point1;
                            minPoints[1] = point2;
                        }
                    }

                    // Finish all the comparison and draw the circles
                    if(minPoints[0]!=null && minPoints[1] !=null){
                        CircleOptions circleOptions = new CircleOptions()
                            .center(minPoints[0])
                            .radius(1000)
                            .fillColor(Color.argb(95, 178, 30, 37))
                            .strokeColor(Color.TRANSPARENT);
                        CircleOptions circleOptions1= new CircleOptions()
                            .center(minPoints[1])
                            .radius(1000)
                            .fillColor(Color.argb(95, 88, 130, 37))
                            .strokeColor(Color.TRANSPARENT);

                        googleBasemap.addCircle(circleOptions);
                        googleBasemap.addCircle(circleOptions1);

                        midPoint(minPoints[0].latitude,minPoints[0].longitude,minPoints[1].latitude,minPoints[1].longitude);
                    }
                }

然后从我画的两个圆的中心点,我调用这个方法得到中点:

private void midPoint(double lat1,double lon1,double lat2,double lon2){
    double dLon = Math.toRadians(lon2 - lon1);

    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);

    Log.i("LAT", String.valueOf(lat3));
    Log.i("LON", String.valueOf(lon3));
    CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(lon3, lat3))
    .radius(1000)
    .fillColor(Color.argb(95, 178, 30, 137))
    .strokeColor(Color.TRANSPARENT);

    googleBasemap.addCircle(circleOptions);
}

在中点,我想在谷歌地图上再画一个圆圈。但是,当我打印出中点的 lat 和 lng 时,我得到了这个:

LAT 0.02512664 LON 1.811859

据我所知,google map的坐标应该是103. , 1. .我想这是因为格式不同,这就是第三个圆圈没有出来的原因。有什么想法吗?

提前致谢。

【问题讨论】:

  • 首先,两点之间的最短距离听起来有点奇怪。据我所知,点之间只有一个距离。两个坐标的中位数就是M((lat1+lat2)/2,(lng1+lng2)/2)
  • Opps 抱歉解释不佳:)

标签: java algorithm google-maps math coordinate


【解决方案1】:
 double lat3 = Math.atan2(Math.sin(lat1) +...
 double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);

这将返回弧度。转到度数:

double latdeg = Math.toDegrees(lat3);
double londeg = Math.toDegrees(lon3);


103.81187377279383
1.4396504253445948

【讨论】:

  • 但如果我改变了它,我将重绘前两个圆圈,即 minPoints[],而不是在两点之间绘制第三个圆圈。有什么想法吗?
  • midPoint 应该计算什么,即,您在那里编码的公式从哪里来?
  • 我一直在为 i = 0(1)90 调用 midPoint(0,0,i,i),结果(添加 Math.toDegrees 后)看起来很合理。在没有得到预期结果的情况下,您使用哪些值调用 midPoint?
  • 我正在传递彼此之间最近的 minPoints[0] 和 minPoints[1]。右边它们都在地图的顶部中心,但是当我调用 midPoint 那个方法时,它应该在它们之间画出一个圆圈。相反,之前的两个圆圈在地图的底部中心重新绘制。有什么想法吗?
  • @IWasSoLost 你是说midPoint() 不会重新绘制一个新的圆圈,而只是为midPoints[0]midPoints[1] 重新绘制两个cricles 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2022-01-19
相关资源
最近更新 更多