我无法得到准确的GPS位置在谷歌地图API在Android上使用(I'm having tr

2019-09-27 02:35发布

我们正在开发供人们纪念区使用Android手机(2.1以上)谷歌地图上的应用程序(单点,线和面)。 他们都获得了谷歌地图视图,并通过他们想创建一个点,然后按下GUI上的按钮,在该位置添加点的位置为中心的屏幕上输入的线的点。

进入一个点后,他们recenter对下一个点的位置的画面,然后按重新创建点按钮。 所有对于外形的要点已经进入后,切换到他们进入一些描述性信息,并将该信息发送到中央数据库另一种观点。

不幸的是,由点少量相对于他们应该标记的位置偏移。 如果从摘要视图回点编辑视图,用户交换机,所有的点都将已经转移,一些只脚,有的多达10或15英尺。 这个问题似乎是

GeoPoint point = mapView.getMapCenter();

返回视图已经被平移后不准确的GPS坐标。 当点被渲染到一个新的观点,他们一直在与互联网上的那些相同的GPS坐标谷歌地图的看法密切相关的同一位置显示。 我们广泛的调试软件和坐标有错误的地图位置/ GPS坐标,当他们从返回mapView.getMapCenter();

因为我们关注的是,

Point p = new Point();
mapView.getProjection().toPixels(mapView.getMapCenter(), p); 

可能无法返回screenWidth / 2screenHeight / 2的位置,我们实际上显示用于在toPixels位置来放置点的十字线,并最初创建时,他们新创建的点与十字线完全匹配起来。 切换到摘要屏幕和背部后,他们在自己的真实GPS坐标重新呈现。

另外,要清楚,这有什么好做的GPS传感器的精度。

如果我们能刷新/重新初始化地图视图平移后,可能会很难,但它是在我们当前的问题的改善。 移动到其他地图软件,同时,需要占用大量的时间,并可能有其自身的问题。

Answer 1:

我做同样的事情,并有误差没有问题。 我怀疑这是你把你的十字线的方式。 我定义矿使用Unicode字符和其固定到使用此片断视图中心main.xml中:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#0000ff"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <include
        layout="@layout/googlemap"/>
    <Button
        android:text='\u25ce'
        android:id="@+id/BullseyeButton"
        android:background="@android:color/transparent"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24pt"
        android:typeface="monospace"
        android:textColor="#afffff00"></Button>
    <include
        layout="@layout/infobar"/>
</RelativeLayout>

该centerInParent属性保证,无论是交叉线,的MapView使用相同的中心。

该u25ce做一个很好的指标我。 还有其他的,你可能会找到更好的。

更新

嗯,我有一个处理程序以每秒一次的更新我的应用程序的信息栏。 我说这种测试方法在处理程序被称为

protected void backAndForth(MapView mv){
    GeoPoint centreGpt = mv.getMapCenter();
    int inLon = centreGpt.getLongitudeE6();
    int inLat = centreGpt.getLatitudeE6();
    Point p = new Point();
    mv.getProjection().toPixels(centreGpt, p);
    GeoPoint backGpt = mv.getProjection().fromPixels(p.x, p.y);
    int outLat = backGpt.getLatitudeE6();
    int outLon = backGpt.getLongitudeE6();
    String res = "In lat " + inLat + " In lon " + inLon 
                + " Out lat " + outLat + " Out lon " + outLon;
    Log.d("POS_TAG", res);
}

在进出坐标完美匹配无论我怎么平移和缩放。 使用反向地理编码,跳跃从芝加哥到伦敦到柏林,我从测试方法的输出:

In lat 41878113 In lon -87629798 Out lat 41878113 Out lon -87629798
In lat 41878113 In lon -87629798 Out lat 41878113 Out lon -87629798
In lat 51500152 In lon -126236 Out lat 51500152 Out lon -126236
In lat 51500152 In lon -126236 Out lat 51500152 Out lon -126236
In lat 51500152 In lon -126236 Out lat 51500152 Out lon -126236
In lat 52523405 In lon 13411399 Out lat 52523405 Out lon 13411399
In lat 52523405 In lon 13411399 Out lat 52523405 Out lon 13411399
In lat 52523405 In lon 13411399 Out lat 52523405 Out lon 13411399

我怕你有我难倒

更新

我改变了我的应用程序从正常的5显示6位小数,并在伦敦附近我一个超市选择了停车场海湾的交集。 我确实如你所说,把屏幕截图,在最大变焦从我的模拟器在一开始,我会摇镜和变焦和平移回原来的地方尽可能靠近我可以不看显示的纬度/经度,因为我做了后。 这些都是典型的结果

开始

结束

1个microdegree只有约11纬度变化厘米,在这个纬度经度变化约6cm,所以我认为这是一个很值得我准确地平移能力范围之内。

谷歌地图本身似乎有更大的特有的显示错误。 例如,英国测绘局(大地测量)维护了大量全国各地的三角点。 这些是通过在WGS84数据卫星基准子毫米精度之内的固定。 它们通常设置为具体的四分之一英寸的铜柱。 一,我们可以用谷歌地图视图关联是在

火腿TRIG点

有它在的位置的草图:

草图

在本网站中的照片(螺栓是狗的右前方爪子下):

触发点照片

如果你看一下我的应用程序的屏幕截图地理固定到该位置

你可以看到,谷歌已经当场为超出码头的边缘良好的6英尺,是在涨潮的水。

总之,我认为我在重复性方面看到任何错误都是由那些在坐标谷歌的解释固有淹没。 这可能是可以预料的,因为我知道他们是利用地球表面的一个简单的球形投影,而不是它的GPS系统是基于更准确的椭圆形之一。



Answer 2:

我们最终换成Bing地图谷歌地图在我们的Android应用程序,使用从InKnowledge了Android SDK。 他们提供精确的GPS坐标的地图视图的中心,我们用它来建立多边形,折线和图钉形状。



文章来源: I'm having trouble getting accurate GPS locations from the Google Maps API for use on Android