首页 / 浏览问题 / 移动GIS / 问题详情
天地图影像服务中添加callout,位置显示错误
10EXP 2022年06月18日

添加的是天地图影像服务,经纬度投影,输入callout的坐标也是经纬度。这里的经纬度应该是在天津,但是callout显示的位置有很大偏差。

歪的很远。下面的添加影像服务的代码。

datasourceConnectionInfo.setServer("http://t0.tianditu.gov.cn/img_c/wmts?tk=2b8e5278cb029dafa802066ceb50934f&DPI=96");
datasourceConnectionInfo.setEngineType(EngineType.OGC);
datasourceConnectionInfo.setAlias("TianDiTu1");
datasourceConnectionInfo.setDriver("WMTS");

辛苦大佬帮忙看看

1个回答

你好,根据您的描述,请问您这里添加callout是主动添加还是自动添加呢,其中point2D的值是如何获取到的呢,请问您在获取到callout添加位置点的时候是否使用了map.pixelToMap方法呢,该方法可以将指定点的像素坐标转化为地图坐标。
3,405EXP 2022年06月20日

callout是主动添加的。point2D的坐标值是我自己通过定位算法计算出来的经纬度坐标。该经纬度在超图web端正常显示,但是在移动端出现偏移。可以看到是正常显示在天津地区

真机运行的,手机分辨率2772x1344不知道跟这个有没有关系。

1.请问您的安装工程的xml配置文件application节点后面是否添加了

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true">
</supports-screens>

2.请问您的“用自己的定位算法算出坐标”这一步是根据什么数据来算的呢,是读取属性表还是其他的数据呢

1.添加了

2.获取手机原始的GNSS数据,自己编写算法计算出坐标。坐标是没问题的,在web端显示正常。就是把坐标给callout显示有偏差。

这个“用自己的定位算法算出坐标”实际上就是通过手机的原始卫星数据,计算出手机现在的坐标。然后我再将坐标给point2D。计算坐标时,并没有调用超图的方法。
目前的我搞不懂得是,为啥同一个经纬度,在web端显示就没问题,在手机端显示就会出偏差呢?主要想问一下这个老师,辛苦

请问您发的第一张图片是所有添加callout的代码了吗,如果是,您这边可能缺少了一个mapview.shouwcallout的方法

这边是我添加callout的代码,其中将坐标设为一天津坐标的固定值,添加上没问题的哈

这是添加callout的全部代码。就是我把定位结果放在了double[]里面,把值再给到point2D.

添加mapview.shouwcallout方法后并没有改变。请问您调用的天地图的影像地图嘛?经纬度投影

我这边使用你的坐标,一样会有偏移。

您那边调用的是天地图的影像地图经纬度投影吗?辛苦,老师
用投影转换类CoordSysTranslator先将callout添加位置点转换为map的坐标系再添加

map的坐标系就是

PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE

我输入的坐标也是经纬度。这要怎么进行转换呀

我查了一下,他天地图影像地图的坐标系cgcs2000,我自己计算的坐标系是wgs84。有偏差的话,感觉不也会这么大呢。而且之前我自己转了一下,偏差还是很大
请问您在自己的开发环境中尝试了吗?调用天地图的影像地图经纬度投影,添加callout。辛苦老师

这种情况只会再调用天地图影像地图经纬度投影时会发生。之前调用

openstreetmap的时候并不会发生这么大的偏移

看到这里确实时偏移了

将请求天地图的服务地址后面加个dpi设置,就像这样



希望可以帮助到您。

您好,DPI设置,一开始我就是加过的crying

如图所示

不知道为啥并没有生效

问题解决了。将天地图的url修改了一下 从

http://t0.tianditu.gov.cn

改成了

http://t0.tianditu.com

就好了。

累死了。谢谢您耐心答疑。后面看到该问题的小伙伴也留意一下url的问题把

先new一个point2d,再用point2d初始化一个geopoint,将geopoint添加到trackinglayer上,添加callout的时候使用geopoint,就像这样

感谢您的耐心答疑
...