从当前位置到 poi android maps v2 的路线

Posted

技术标签:

【中文标题】从当前位置到 poi android maps v2 的路线【英文标题】:Directions from current location to poi android maps v2 【发布时间】:2015-05-13 13:30:33 【问题描述】:

我在这里阅读了很多帖子,但我无法解决我的问题。

我构建了一个简单的应用程序,它显示了许多 poi、信息视图,并且我能够绘制一条折线并在地图中正确显示步行方向,设置两个 Lat Lng 点。

现在我正在尝试添加 START POINT 作为用户当前位置的功能。如果我使用 map.setMyLocationEnabled(true);它显示了我位置的蓝光点,我使用了“getMyLocation().getLatitude();”和“getMyLocation().getLongitude();”获取正确坐标的方法。但是当我运行我的应用程序时,它会因 NullPoint 错误而崩溃。

编辑:我解决了我的问题,我用解决方案编辑了 MainAcrivity 类

这是我的 MainActivity.java

    package com.directions.android;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.directions.route.Route;
import com.directions.route.Routing;
import com.directions.route.RoutingListener;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;

public class MyActivity extends FragmentActivity implements RoutingListener 
    protected GoogleMap map;
    protected LatLng start;
    protected LatLng end;
    protected Double myPosLat;
    protected double myPosLng;
    /**
     * This activity loads a map and then displays the route and pushpins on it.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        map = fm.getMap();

        CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(47.3369217,9.353883));
        CameraUpdate zoom = CameraUpdateFactory.zoomTo(16);

        map.moveCamera(center);
        map.animateCamera(zoom);
        map.setMyLocationEnabled(true);


    map.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() 
        @Override
        public void onMyLocationChange(Location location) 
            map.addMarker(new MarkerOptions().position(new LatLng(
                    location.getLatitude(), location.getLongitude())).title("You are here!"));

            start = new LatLng(location.getLatitude(), location.getLongitude());
            end = new LatLng(44.48861858, 11.36779726);

            Routing routing = new Routing(Routing.TravelMode.WALKING);
            routing.registerListener(MyActivity.this);
            routing.execute(start, end);
        
    );




    


    @Override
    public void onRoutingFailure() 
        // The Routing request failed
    

    @Override
    public void onRoutingStart() 
        // The Routing Request starts
    

    @Override
    public void onRoutingSuccess(PolylineOptions mPolyOptions, Route route) 
        PolylineOptions polyOptions = new PolylineOptions();
        polyOptions.color(Color.RED);
        polyOptions.width(8);
        polyOptions.addAll(mPolyOptions.getPoints());
        map.addPolyline(polyOptions);

        // Start marker
        MarkerOptions options = new MarkerOptions();
        options.position(start);
        options.icon(BitmapDescriptorFactory.fromResource(R.drawable.start_blue));
        map.addMarker(options);

        // End marker
        options = new MarkerOptions();
        options.position(end);
        options.icon(BitmapDescriptorFactory.fromResource(R.drawable.end_green));
        map.addMarker(options);


    


【问题讨论】:

请发布您的 LogCat 日志。 没有 logcat 我们无法预测您的问题:( 【参考方案1】:

我建议您将与map.getMyLocation() 相关的部分代码放在OnMyLocationChangeListener 中。在 Android 上获取MyLocation 需要时间。

map.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() 
        @Override
        public void onMyLocationChange(Location location) 

            myPosLat = location.getLatitude();
            myPosLng = location.getLongitude();

            start = new LatLng(myPosLat, myPosLng);
            end = new LatLng(48.823515, 10.1246599);

            Routing routing = new Routing(Routing.TravelMode.WALKING);
            routing.registerListener(this);
            routing.execute(start, end);

        
    );

【讨论】:

【参考方案2】:

我知道我在问什么。这是添加从当前位置到固定纬度经度的路线的代码的 sn-p。

map.setMyLocationEnabled(true);


        map.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() 
            @Override
            public void onMyLocationChange(Location location) 
                map.addMarker(new MarkerOptions().position(new LatLng(
                        location.getLatitude(), location.getLongitude())).title("You are here!"));

                start = new LatLng(location.getLatitude(), location.getLongitude());
                end = new LatLng(44.48861858, 11.36779726);

                Routing routing = new Routing(Routing.TravelMode.WALKING);
                routing.registerListener(MyActivity.this);
                routing.execute(start, end);
            
        );

【讨论】:

以上是关于从当前位置到 poi android maps v2 的路线的主要内容,如果未能解决你的问题,请参考以下文章

Android- Google Maps V2:跟踪从当前位置到另一个目的地的路线

在 Android google maps api v2 for 4.0 中,显示从当前位置到给定纬度的路线

如何从 Google Maps android 中的当前位置不断检测附近的标记位置?

打开android原生谷歌地图应用程序获取从当前位置开始的方向

如何使用 android 手机上的本地 Google Maps .html 文件平移到当前位置?

如何通过google map api最新版本(google play service 8.3)绘制从当前位置到目的地的行车路线