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

时间:2014-02-20 08:03:47

标签: javascript android json google-maps google-maps-api-3

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

以下是代码: 我收到坐标并解析它们时的代码(通过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));

 }

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

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

e.g。 LatLng lhr =新LatLng(31.500794,74.316777);

1 个答案:

答案 0 :(得分:0)

我找到了解决上述问题的方法,我正在重复调试, 我注意到的问题是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

谢谢大家的帮助。