谷歌地图标记出现在地图上的错误位置

Posted

技术标签:

【中文标题】谷歌地图标记出现在地图上的错误位置【英文标题】:Google map markers appearing on wrong location on the map 【发布时间】:2014-03-21 00:50:22 【问题描述】:

我一直在开发一个具有谷歌地图的 android 应用程序,我正在请求节点 js 服务器的坐标,然后将响应解析为 double 类型,当传递给 Marker 对象时,标记出现在不准确的位置,我已经从数据库中复制了坐标,当我将它们直接传递给标记的对象时,标记出现在正确的位置,当我从服务中接收到标记时,我还有一个显示标记值的警告框,它似乎正在显示正确的坐标,我认为在我分配坐标的变量中有一些垃圾值,或者当我从服务器以 JSON 的形式获取它们并将它们解析为双倍时,这可能是解析中的问题 我做了一些搜索,但找不到专门解决我的问题的解决方案,如果我没有彻底解决,我很抱歉,提前感谢大家的帮助。

代码如下: 当我收到坐标并解析它们时的代码(通过socketIO):

public void on(String functionName, IOAcknowledge ioAck, Object... arguments) 

                if("points_of_interest".equals(functionName))

                temp=arguments[0].toString();
                try 
                    JSONObject object=new JSONObject(temp);
                    String idStop=object.getString("route_id");
                    String longt=object.getString("stop_longg");
                    String lat=object.getString("stop_lat");

                    lati=Double.parseDouble(lat);
                    lngi=Double.parseDouble(longt);



                 catch (JSONException e) 
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                
                                 
                            

现在是在 onCreate 方法中创建标记的函数调用:

      map=((MapFragment) getFragmentManager().findFragmentById(R.id.allBusMaps)).getMap();


     createStops();

这里是 createStops() 方法的代码:

     public void createStops()

     map.clear();
//   LatLng lhr=new LatLng(31.500794,74.316777);
             LatLng lhr=new LatLng(lati,lngi);



    Marker lahore = map.addMarker(new MarkerOptions().position(lhr).title("busStop"));
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(lhr, 15));

 

在上述情况下,当我通过变量传递值时,这是生成的输出:

但是当我将值直接传递给标记的对象时,标记会出现在正确的位置:

例如LatLng lhr=new LatLng(31.500794,74.316777);

【问题讨论】:

你从 json 中得到的 lati,lngi 变量的值是什么? 先生,我使用了一个警告框来显示 lati,lngi 变量的值,并且分别正确显示 31.500794 和 74.316777 我认为问题在于解析 查看从 json 中检索经度的密钥。 stop_longg 正确吗?您是否将这两个变量输出到任何地方以查看它们的值是否设置正确? @DiscoS2 是的,先生,我在单击按钮时将它们显示在警报中,结果是正确的,您认为解析还可以吗? 【参考方案1】:

我在反复调试时找到了上述问题的解决方案, 我注意到的问题是,lati 和 lngi 对象在指定的时间间隔内没有获得它们各自的值,直到这两个对象分别保持初始值 0.0 和 0.0,因此在大多数测试尝试中,标记没有出现在准确的位置。 为了克服这个问题,我在调用 createStops 方法之前强制等待 500 毫秒,这让 lati 和 lngi 对象有足够的时间从服务器获取它们各自的值。 这对我有用:

  map=((MapFragment) getFragmentManager().findFragmentById(R.id.allBusMaps)).getMap();

    //new pointMarker().execute();
    try 
        Thread.sleep(500); //a wait of 500 milliseconds
     catch (InterruptedException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    createStops(); // this is the method that creates the markers

感谢大家的帮助。

【讨论】:

以上是关于谷歌地图标记出现在地图上的错误位置的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图 API V3 - 完全相同的位置上的多个标记

移动相机方法上的谷歌地图空对象引用[关闭]

如何创建一个包含纬度和经度的数组并使用 for 循环在 android 中标记谷歌地图上的位置

从谷歌地图上的 JSON 更新标记

如何在谷歌地图的指定位置获取标记(或图钉)?

谷歌地图标记被放置在错误的地方