首页 / 浏览问题 / 移动GIS / 问题详情
android 根据经纬度添加CallOut,图片被挤压
30EXP 2021年11月18日

获取当前位置经纬度添加CallOut

CallOut callout = new CallOut(this);
callout.setBackgroundResource(R.mipmap.map_marker_1);
callout.setCustomize(true);// 是否自定义背景图片
callout.setLocation(point2D.getX(), point2D.getY());// 设置显示位置
mapView.addCallout(callout,"当前位置");

设置的map_marker_1这个图片,显示的时候明显被压扁了很多,这个怎么解决?

1个回答

您好,这个您先看下导入进来的图片是否已经被压缩呢?你可以自己写一个view来存放这张图片,然后使用callout.setContentView(android.view.View contentView)添加对应的图片
9,137EXP 2021年11月18日

图片没有被压缩,自己写个view来存这张图片不会被压缩。。。

                CallOut callout = new CallOut(mContext);
1.
              View inflate = LayoutInflater.from(mContext).inflate(R.layout.layout_marker, null);
                callout.setContentView(inflate);
2.
   callout.setBackgroundResource(R.mipmap.map_marker);
第一种方式不会被压缩,第二种方式会被压缩
建议你那边使用第一种方式,第二种方式应该是导入到工程里面就已经被压缩了。

好的,我使用高德定位获取的gcj02的坐标系。

加载天地图时,转为gps84定位是准的

加载高德时,没有转坐标系,使用下面

Point2Ds points = new Point2Ds();
points.add(point2D);
PrjCoordSys desPrjCoorSys = new PrjCoordSys();
desPrjCoorSys.setType(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE);
CoordSysTranslator.convert(points, desPrjCoorSys, Prj,
        new CoordSysTransParameter(),
        CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
point2D.setX(points.getItem(0).getX());
point2D.setY(points.getItem(0).getY());

显示定位也是准的。

加载百度时,转为bd09ll,使用下面

Point2Ds points = new Point2Ds();
points.add(point2D);
PrjCoordSys desPrjCoorSys = new PrjCoordSys();
desPrjCoorSys.setType(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE);
CoordSysTranslator.convert(points, desPrjCoorSys, Prj,
        new CoordSysTransParameter(),
        CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
point2D.setX(points.getItem(0).getX());
point2D.setY(points.getItem(0).getY());

定位不准,请问这是什么原因?

百度的坐标系是火星坐标系,和其他坐标系不一致,所以定位不准
百度是火星坐标系再封装,叫bd09ll坐标系

我已经将高德获取的gcj02坐标转为百度的bd09ll坐标了,

这个为什么还是不准呢
这个你可以转换后和百度对比一下,因为这个转换还需要转换参数,直接使用我们的类默认转换肯定是不行的
我将这个gcj02转换成bd09ll的坐标,显示在百度地图上是准的。

那SuperMap还需要做什么操作呢?
意思你转换后的坐标在百度地图上面是准的,在我们里面打开百度地图定位不准?

是的,我转为bd09ll的坐标在百度地图上是准的。

在Supermap里面的百度地图是不准的。

Supermap加载百度地图

DatasourceConnectionInfo dcInfo = new DatasourceConnectionInfo();
dcInfo.setAlias("BaiDu");
dcInfo.setEngineType(EngineType.BaiDu);
baiduDatasource = m_woWorkspace.getDatasources().open(dcInfo);

Supermap定位bd09ll坐标

Point2Ds points = new Point2Ds();
points.add(point2D);
PrjCoordSys desPrjCoorSys = new PrjCoordSys();
desPrjCoorSys.setType(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE);
CoordSysTranslator.convert(points, desPrjCoorSys, Prj,
        new CoordSysTransParameter(),
        CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
point2D.setX(points.getItem(0).getX());
point2D.setY(points.getItem(0).getY());
你在超图里面加载的这个bd09ll坐标在百度上是不是准的?你说的百度地图上是准的坐标是超图里面转换的吗
我在超图加载的这个bd09ll坐标在百度上是准的啊

这个bd09ll坐标我是使用百度的接口转换的。

但是超图里面百度地图的PrjCoordSysType是PCS_USER_DEFINED,

然后超图显示的PrjCoordSysType是PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE

所以不是需要在转换一次吗?

我问的是后续超图的操作。这个bd09ll坐标是没有问题的
你现在具体的问题是什么呢?是想用超图转换坐标系吗
我的问题是这个bd09ll的坐标在Supermap上的百度底图显示的定位不准,

是什么原因,有什么办法可以解决.
你那边不采用坐标转换直接添加这个点看是否正确?

不行,我都试了。

高德坐标在高德地图的显示和百度坐标在百度地图的显示,我都是这样的

Point2Ds points = new Point2Ds();
points.add(point2D);
PrjCoordSys desPrjCoorSys = new PrjCoordSys();
desPrjCoorSys.setType(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE);
CoordSysTranslator.convert(points, desPrjCoorSys, Prj,
        new CoordSysTransParameter(),
        CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
point2D.setX(points.getItem(0).getX());
point2D.setY(points.getItem(0).getY());

是不是高德和百度,不是同样的转换方法?

你的坐标如果是使用百度的接口转换的,可以直接拿这个坐标显示在我们超图打开的百度底图上,而不需要再用我们的接口进行坐标转换
这样我也试了,那更加的偏了。

直接拿这个坐标显示,定位到非洲那边去了,

使用你们的接口转换一下,只是有偏差
直接拿这个坐标定位到非洲是因为坐标系不一致,坐标是经纬度的但是地图是投影坐标系的。您那边在切换地铁的时候是否将地图关闭重新添加的百度地图呢?可以获取当前地图的坐标系看下是地理坐标系还是投影坐标系的

切换地图是这样的

m_mapControl.getMap().getLayers().clear();

if (baiduDatasource == null) {
    DatasourceConnectionInfo dcInfo = new DatasourceConnectionInfo();
    dcInfo.setAlias("BaiDu");
    dcInfo.setEngineType(EngineType.BaiDu);
    baiduDatasource = m_woWorkspace.getDatasources().open(dcInfo);
}
int count = baiduDatasource.getDatasets().getCount();
Log.e("123", "count:" + count);

m_mapControl.getMap().getLayers().add(baiduDatasource.getDatasets().get(0), true);

m_mapControl.getMap().setScale(1.0641132515917893E-5);
m_mapControl.getMap().setCenter(new Point2D(1.257386650713317E7, 2924949.646010306));
m_mapControl.getMap().refresh();

百度地图的当前的坐标系是

PCS_USER_DEFINED
地图不能这么切换,需要先将地图关闭再添加,因为添加一个数据到地图中,地图就会有一个原始的坐标系。您那边可以直接添加百度地图然后定位看下是否准确

我不切换地图,默认加载百度地图,定位后还是不准确,和以前 的一样,坐标系也是和以前一样的

PCS_USER_DEFINED
...