首页 / 浏览问题 / 移动GIS / 问题详情
计算几何图形间的最短距离
mxc
112EXP 2018年11月15日

使用产品:supermap-imobile-9.1.0-153-android-zip-chs 

数据类型: 文件型 smwu

问题详细描述:

计算两个 几何点(GeoPoint)的距离,计算出来的结果不对。

现在的问题是:Geometrist.distance() 在没有转换坐标系之前确实是以度为单位的结果,转换后的结果是为米单位的,

但是跟使用测地线方法(Geometrist.computeGeodesicDistance)得出的结果或者单纯计算两个个GPS点相差甚远 ,是因为坐标系转换问题吗?


现在的地图坐标系为 Longitude / Latitude Coordinate System---GCS_China_2000

代码如下:

 //连续点击的两个点
GeoPoint preGeo = new GeoPoint(prePoint);
GeoPoint lastGeo = new GeoPoint(point2D);
// 地理坐标系下 单位 度
 double geoDistance = Geometrist.distance(new GeoPoint(prePoint), new GeoPoint(point2D));
//转换为 平面坐标系
boolean convert = CoordSysTranslator.convert(preGeo, mMapControl.getMap().getPrjCoordSys(),
                        new PrjCoordSys(PrjCoordSysType.PCS_SPHERE_MERCATOR),
                        new CoordSysTransParameter(),
                        CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
boolean convert1 = CoordSysTranslator.convert(lastGeo, mMapControl.getMap().getPrjCoordSys(),
                        new PrjCoordSys(PrjCoordSysType.PCS_SPHERE_MERCATOR),
                        new CoordSysTransParameter(),
                        CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
// 墨卡托 平面坐标系 下 单位 米
double convertDistanace = Geometrist.distance(preGeo,lastGeo);
 //计算测地线 米
Point2Ds point2Ds = new Point2Ds();
 point2Ds.add(prePoint);
 point2Ds.add(point2D);
 double pointsDistance = Geometrist.computeGeodesicDistance(point2Ds, 6378137, 0.0033528107);
//单纯计算 两个 GPS的 距离
Gps preGps = new Gps(prePoint.getY(),prePoint.getX());
 Gps gps = new Gps(point2D.getY(),point2D.getX());
float[] result = new float[3];
            Location.distanceBetween(preGps.getWgLat(),preGps.getWgLon(),gps.getWgLat(),gps.getWgLon(),result);
double gpsDistance = result[0];
String format = String.format("Geometrist.distance[%1$f] Geometrist.computeGeodesicDistance[%2$f] distanceBetween[%3$f]convertDistanace[%4$f],地图坐标系:%5$s", geoDistance, pointsDistance, gpsDistance,convertDistanace,mMapControl.getMap().getPrjCoordSys().getName());
log(BMapToolActivity.class.getSimpleName() + "", "tapSingle ->"+format);

希望得到解决。谢谢

1个回答

你好,geometrist中的distance方法计算的是两个几何对象的距离,而测地线和gps测距是具有地理位置的距离,两者是不一样的,所以说计算出来的结果也是不一样的
9,232EXP 2018年11月15日
你好,两个几何对象的距离单位转换后不是米吗?如果要测量 两个几何对象的实际地理位置距离怎么算呢
距离单位转换后测量的单位是根据你坐标系来确定的,如果是经纬度坐标系的为度,如果是投影坐标系的单位为米。如果要测量实际地理位置的距离可以用测地线的方法
你好,测地线方法Geometrist.computeGeodesicDistance() 只能测量点,如果要测量 两个线或者两个面或者点到线这种几何图形的实际地理位置距离,如何测量呢
比如说两个面,可以去提取面对象内点getInnerPoint();然后再用测地线的方法。
如果点到线呢,线的怎么提取呢
可以对其进行投影转换,然后用distance来计算距离。我们有投影转换的demo可以参考一下
好的,谢谢
...