Google会映射如何在最近的道路上强行标记

时间:2014-04-05 11:36:51

标签: google-maps google-maps-api-3

我正在进行车辆追踪项目,我从数据库中获取coordiantes,并在谷歌地图上显示。 这是我的代码..... !!

function get_coordinates(checkbox){
    var v_id=checkbox.id;
    if(checkbox.checked){
        var hr = new XMLHttpRequest();
        hr.open("POST", "fetch_coordinates.php", true);
        hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        hr.onreadystatechange = function() {
            if(hr.readyState == 4 && hr.status == 200) {
                var data = JSON.parse(hr.responseText);
                var lat=data.loc.lat;
                var lon=data.loc.lon;
                addmarker(lat,lon,v_id);
            }
        }
         hr.send("id="+v_id);   
    } else{
        var mark = markers[v_id]; // find the marker by given id
        mark.setMap(null);
        delete markers[v_id];

    }    
}
function addmarker(lat,lon,v_id){
    var marker = new google.maps.Marker({
        id: v_id,
        position: new google.maps.LatLng(lat, lon),
        zoom: 8,
        map: map,
        title: 'Vehicle No: '+v_id,
        icon: 'live.gif',
        optimized:false

    });
    markers[v_id] = marker;
    bounds.extend(new google.maps.LatLng(lat,lon));
   // map.setOptions({center:new google.maps.LatLng(lat,lon),zoom:8});
    map.fitBounds(bounds);
}

但问题是,有时我会得到距离道路1,2英寸的GPS坐标(可能是因为设备的精度较低或信号失真等) 我应该如何强制我的标记在路上自动调整?有没有办法,使用方向渲染或任何其他提示???请帮忙

2 个答案:

答案 0 :(得分:0)

2017年,正确的方法是Roads API Snap to Roads服务。

您可以在

上阅读有关此网络服务的信息

https://developers.google.com/maps/documentation/roads/snap

  

Google Maps Roads API最多可以在一条路线上收集100个GPS点,并返回一组类似的数据,这些点将被捕捉到车辆行驶的最可能的道路上。或者,您可以请求对点进行插值,从而生成一条平滑地遵循道路几何形状的路径。

答案 1 :(得分:0)

https://developers.google.com/maps/documentation/directions/intro

您可以使用所需的URL来获取json请求。

在“编码”部分中,您可以编写此代码以获取道路上的位置。

    Marker liveloc;
    JSONObject obj1=new JSONObject(s);
    JSONArray arr1=obj1.getJSONArray("routes");

    for (int i=0;i<arr1.length();i++){

    JSONObject obj2=arr1.getJSONObject(i);
    JSONArray arr2=obj2.getJSONArray("legs");

    JSONObject obj3=arr2.getJSONObject(0);
    JSONObject obj4=obj3.getJSONObject("start_location");
    String k=obj4.getString("lat");
    String k2=obj4.getString("lng");
    double k3=Double.parseDouble(k);
    double k4=Double.parseDouble(k2);
    LatLng myloc=new LatLng(k3,k4);

    if (liveloc !=null){
        liveloc.remove();
        }
   liveloc=mMap.addMarker(new MarkerOptions().position(myloc));

}

您需要从json请求中获取第一个起始位置。

希望有帮助...