java - 从当前位置到 poi 的路线 android map v2

标签 java android google-maps

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

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

现在我正在尝试添加将起始点作为用户当前位置的功能。如果我使用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);


    }

}

最佳答案

我建议您将与 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);

        }
    });

关于java - 从当前位置到 poi 的路线 android map v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30216387/

相关文章:

java - Junit5:动态测试中动态断言工作异常

java - 带有 delaySubscription 的 rxjava onStart 事件

android - 如何在Android中使用服务播放声音

ios - 将 Mapkit 设置为仅包含城市名称的位置

android - Google map 比 LocationManager 更快地获得 GPS 定位!为什么?

java - 如何扩展一个共同基础的多个后代?

java - 在不下载 WSDL 的情况下实例化 JAX-WS 服务?

java - 如何在 Android 上没有任何 TextView 的情况下在字符串上使用自定义字体样式

android - Phonegap 屏幕尺寸因状态栏高度而异?

android - Google maps api v2 - 无法解析类型 android.app.Fragment。它是从所需的 .class 文件中间接引用的