首页 / 浏览问题 / 移动GIS / 问题详情
Android坐标系不同问题
45EXP 2022年07月08日

我现在想实现对一个图层在map上缩放到整块显示,导入的经纬度坐标系的shp数据可以显示,但是2000投影坐标系的shp数据获取的的Rectangle2D的值都是投影坐标的,由于在线图是经纬度的天地图,定位也是经纬度的。怎么转换到一起,让他们落到一起去啊。具体如下图

这个是能正常显示的shp数据的

这个是投影的不能正常显示的

1个回答

您好,您可以用map中的以下两个方法
 setDynamicProjection(boolean value)
设置是否允许地图动态投影显示。
setDynamicProjection(boolean bDynamic, PrjCoordSys value)
设置地图是否动态投影显示,以及地图的投影坐标系

希望可以帮助到您。
3,685EXP 2022年07月08日

这俩方法我用过了,现在这个投影数据放上是没有问题的,可以正常展示出来,但是我要获取到Rectangle2D,然后用

Map().setViewBounds()给他设置个范围,我是不是需要把整块数据进行转换
您可以使用CoordinateConvert类,获取Rectangle2D,再转转为天地图的坐标类型。

希望可以帮助到您。

你说的用CoordinateConvert类需要密钥才行,我用的是正常坐标转换转换过来了,代码如下,这种方法也能实现哪个效果,因为我里面塞了2个point2D,我放入point2Ds里面,里面就俩组数据我直接用getitem0和1应该没问题吧。

PrjCoordSys prjCoordSys = m_mapControl.getMap().getLayers().get(name).getDataset().getPrjCoordSys();
PrjCoordSys map_prjCoordSys = m_mapControl.getMap().getPrjCoordSys();
if (prjCoordSys.isSame(map_prjCoordSys)){
    Rectangle2D bounds = m_mapControl.getMap().getLayers().get(name).getDataset().getBounds();
    m_mapControl.getMap().setViewBounds(bounds);
    m_mapControl.getMap().refresh();
}else {
    Rectangle2D bounds = m_mapControl.getMap().getLayers().get(name).getDataset().getBounds();
    Point2D leftbottom = new Point2D(bounds.getLeft(), bounds.getBottom());
    Point2D righttop = new Point2D(bounds.getRight(), bounds.getTop());
    Point2Ds bound_2Ds = new Point2Ds();
    bound_2Ds.add(leftbottom);
    bound_2Ds.add(righttop);
    if (bound_2Ds!=null){
        boolean inverse = CoordSysTranslator.inverse(bound_2Ds, prjCoordSys);
        if (inverse){
            Rectangle2D new_bounds = new Rectangle2D(bound_2Ds.getItem(0).getX(),bound_2Ds.getItem(0).getY(),
                    bound_2Ds.getItem(1).getX(),bound_2Ds.getItem(1).getY());
            m_mapControl.getMap().setViewBounds(new_bounds);
            m_mapControl.getMap().refresh();
        }
    }
}
...