投影转换

iMobile支持动态投影,动态叠加不同坐标系的数据,使用时,参照如下代码:

mMap.setDynamicProjection(true);//开启动态投影
mMap.refresh();

此外,还支持投影转换,投影转换一般有三种工作方式:

(1)地理(经纬度)坐标和投影坐标之间转换(forward);

(2)投影坐标和地理(经纬度)坐标之间的转换使用(inverse);

(3)两种投影坐标系之间的转换(convert)。

注意事项:

当前版本不支持光栅数据的投影转换。即在同一数据源中,投影转换只转换矢量数据部分。

这里以两种投影坐标系转换为例,主要分为四步:

(1)获取需要投影转换的点串;

(2)设置目标投影坐标系;

(3)设置坐标系转换参数(可选);

(4)投影转换。

try{
    /** ————获取需要投影转换的点串———— **/
    Point2Ds points = new Point2Ds();
    Recordset recordset = ((DatasetVector)mDataset).getRecordset(false, CursorType.STATIC);
    recordset.moveFirst();
    GeoPoint point;
    Geometry geo;
    while(!recordset.isEOF()){
        geo = recordset.getGeometry();
        if(geo instanceof GeoPoint){
            point = (GeoPoint)geo;
            points.add(new Point2D(point.getX(), point.getY()));
        }
        recordset.moveNext();
    }
    /** ————设置源投影坐标系———— **/
    PrjCoordSys mTargetPrjCoordSys = new PrjCoordSys(PrjCoordSysType.PCS_USER_DEFINED);
    projection = new Projection(ProjectionType.PRJ_GAUSS_KRUGER);
    mTargetPrjCoordSys.setProjection(projection);
    parameter = new PrjParameter();
    parameter.setCentralMeridian(110);
    parameter.setStandardParallel1(20);
    parameter.setStandardParallel2(40);
    mTargetPrjCoordSys.setPrjParameter(parameter);
    /** ————投影转换———— **/
    CoordSysTranslator.convert(points,mDataset.getPrjCoordSys(),getTargetPrjCoordSys(type), getcoordSysTransParameter(), CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
     /** ————显示到地图———— **/
    recordset = mDataset.getRecordset(false, CursorType.DYNAMIC);
    for(int i=points.getCount()-1;i>=0;i--){
        point = new GeoPoint(points.getItem(i));
        recordset.addNew(point);
        recordset.update();
    }
    recordset.close();
    mMapDes.getLayers().add(mDataset, true);
    mMapDes.setCenter(mMapDes.getBounds().getCenter());
    mMapDes.setScale(mMapSrc.getScale());
    mMapDes.refresh();
}catch(Exception e){
    e.printStackTrace();
}

目前,移动端不支持服务之间的动态投影。

Rest服务想要叠加在高德地图上,需要通过SuperMap iDesktopX将Rest服务数据的坐标系转成与高德地图同样坐标系,再发布为Rest地图服务,即可正确叠加到高德地图服务中。操作步骤如下:

(1)打开SuperMap iDesktopX,右上方搜索框搜索“插件”,选择电子地图坐标转换

图:电子地图坐标转换

(2)在SuperMap iDesktopX中打开原始数据,同时,新建一个空白udbx数据集并打开,用于存放转换后的结果数据集。

图:打开原始数据

(3)右上搜索框中,搜索坐标转换,选择坐标转换

图:坐标转换

(4)结果坐标设置为火星坐标(高德),并将生成的数据集放入新建的空白数据源中,点击确定转换坐标。

图:高德坐标转换

(5)坐标系选项卡中->投影转换,查看新数据集的属性,这时看到的还是原始数据的坐标系。

图:查看坐标系

(6)点击导入坐标系,选择"火星.xml"(火星坐标信息文件),提取码:b88k,点击确定

图:导入坐标系

(7)查看新生成的数据集属性,坐标系已转换完成。

图:查看新坐标系

(8)验证转换成果。工作空间管理器中数据源右键->打开web型数据源->xyztile,服务地址中输入“https://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}”,点击打开

地图窗口中打开新地图,将转换后的数据集添加到地图中,查看在地图上位置是否正确。

图:验证转换成果

(9)将新数据集发布为Rest地图服务,移动端即可正常叠加高德显示。