首页 / 浏览问题 / 移动GIS / 问题详情
imobile经纬度坐标转投影坐标不正确
82EXP 2022年04月01日

各位大佬。使用

CoordSysTranslator将经纬度坐标转成投影坐标返回的值不正确

使用如下代码转换

var isTranslate = CoordSysTranslator.forward(points, mMap!!.prjCoordSys)

将106.532200000000 29.571400000000转换成投影坐标返回的值为357752.336252857000 3273460.403523680000

问题关闭原因: 解决

1个回答

你好,我这边测试投影转换和桌面结果是一致的且正确的,您可以参考:

PrjCoordSys sourcePrjCoordSys = new PrjCoordSys();
                //二选一
                sourcePrjCoordSys.fromFile("投影信息xml文件", PrjFileType.SUPERMAP);
//                sourcePrjCoordSys.fromFile("投影信息prj文件", PrjFileType.ESRI);

                PrjCoordSys targetPrjCoordSys = new PrjCoordSys();
                //二选一
                targetPrjCoordSys.fromFile("投影信息xml文件", PrjFileType.SUPERMAP);
//                targetPrjCoordSys.fromFile("投影信息prj文件", PrjFileType.ESRI);

                GeoPoint point  = new GeoPoint(new Point2D(106.5322, 29.5714));
                CoordSysTranslator.convert(point, sourcePrjCoordSys, targetPrjCoordSys, null, CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
                System.out.println(point.getX()+"   "+point.getY());

2,842EXP 2022年04月02日

谢谢大佬,4326个3857应该是EPSGCode,我还有个疑问,我获取地图的坐标系参数时返回如下数据,请问我如何能够获取到地图坐标系里面的EPSGCode值(4545)

<sml:CoordinateReferenceSystem>
<sml:Name>China_2000_3_DEGREE_GK_Zone_36N</sml:Name>
<sml:Type>-1</sml:Type>
<sml:EPSGCode>4545</sml:EPSGCode>
<sml:Units>METER</sml:Units>
<sml:DistUnits>METER</sml:DistUnits>
<sml:GeographicCoordinateSystem>
<sml:Name>GCS_China_2000</sml:Name>
<sml:Type>37313</sml:Type>
<sml:EPSGCode>4326</sml:EPSGCode>
<sml:Units>DEGREE</sml:Units>
<sml:DistUnits>METER</sml:DistUnits>
<sml:HorizontalGeodeticDatum>
<sml:Name>D_China_2000</sml:Name>
<sml:Type>39313</sml:Type>
<sml:Spheroid>
<sml:Name>CGCS2000</sml:Name>
<sml:Type>7044</sml:Type>
<sml:SemiMajorAxis>6378137</sml:SemiMajorAxis>
<sml:InverseFlattening>298.257222101</sml:InverseFlattening>
</sml:Spheroid>
</sml:HorizontalGeodeticDatum>
<sml:PrimeMeridian>
<sml:Name>Greenwich</sml:Name>
<sml:Type>8901</sml:Type>
<sml:PrimeMeridian>0</sml:PrimeMeridian>
</sml:PrimeMeridian>
</sml:GeographicCoordinateSystem>
<sml:MapProjection>
<sml:Name>Gauss_Kruger</sml:Name>
<sml:Type>43005</sml:Type>
</sml:MapProjection>
<sml:Parameters>
<sml:FalseEasting>500000</sml:FalseEasting>
<sml:FalseNorthing>0</sml:FalseNorthing>
<sml:CentralMeridian>108</sml:CentralMeridian>
<sml:StandardParallel1>0</sml:StandardParallel1>
<sml:StandardParallel2>0</sml:StandardParallel2>
<sml:ScaleFactor>1</sml:ScaleFactor>
<sml:CentralParallel>0</sml:CentralParallel>
<sml:Azimuth>0</sml:Azimuth>
<sml:FirstPointLongitude>0</sml:FirstPointLongitude>
<sml:SecondPointLongitude>0</sml:SecondPointLongitude>
<sml:RectifiedAngle>0</sml:RectifiedAngle>
</sml:Parameters>
</sml:CoordinateReferenceSystem>

而且我试了下imoblie里面没有new PrjCoordSys(EPSGCode)这个方法
你好,用PrjCoordSys.fromFile()方法来构建坐标系,参考上面代码,坐标系xml可以从iDesktop中导出使用,也支持ESRI的prj文件

我不明白的是,我上面都已经获取到了坐标系参数,直接使用如下代码转换为啥会不正确哎

CoordSysTranslator.forward(points, mMap!!.prjCoordSys)
你好,forward这个方法这边测试确实有些问题,我这边跟研发反馈确认下,建议先用convert来转换。
这个方法应该如果坐标系与当前坐标在同一坐标系,转换出来的坐标是正确的,如果说当前坐标和地图坐标系不一致转出来就不正确,如地图坐标系在a度带,当前坐标在b度带,那么转出来的数据就不是想要的数据
...