【问题标题】:How to show PlacePicker location on a Google Map?如何在 Google 地图上显示 PlacePicker 位置?
【发布时间】:2017-03-29 19:22:48
【问题描述】:

我的应用程序使用 google maps api 和 google places api。一切正常,直到我搜索某个地方,当我搜索一个地方然后从结果中选择它时,会出现一个对话框(不应显示)并提示用户是否要选择那个地方或更改地址.单击“选择”后,应用程序会删除地点 UI 并变成常规地图,而无需前往所选地点。我的代码如下。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private static final int PLACE_PICKER_REQUEST = 1000;
    private GoogleApiClient mClient;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);


        int PLACE_PICKER_REQUEST = 1;
        PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();


        try {
            startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }
        mClient = new GoogleApiClient
                .Builder(this)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .build();

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PLACE_PICKER_REQUEST) {
        if (resultCode == RESULT_OK) {
            Place place = PlacePicker.getPlace(data, this);
            StringBuilder stBuilder = new StringBuilder();
            String placename = String.format("%s", place.getName());
            String latitude = String.valueOf(place.getLatLng().latitude);
            String longitude = String.valueOf(place.getLatLng().longitude);
            String address = String.format("%s", place.getAddress());
            stBuilder.append("Name: ");
            stBuilder.append(placename);
            stBuilder.append("\n");
            stBuilder.append("Latitude: ");
            stBuilder.append(latitude);
            stBuilder.append("\n");
            stBuilder.append("Logitude: ");
            stBuilder.append(longitude);
            stBuilder.append("\n");
            stBuilder.append("Address: ");
            stBuilder.append(address);

        }
    }
}

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
    @Override
    protected void onStart() {
        super.onStart();
        mClient.connect();
    }
    @Override
    protected void onStop() {
        mClient.disconnect();
        super.onStop();
    }

}

【问题讨论】:

    标签: android google-maps google-places-api


    【解决方案1】:

    您需要使用data Intent 来获取用户选择的地点的位置,在地图上添加一个标记,然后移动相机使其位于所选地点的中心:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, this);
                String placeName = String.format("Place: %s", place.getName());
                String placeAddress =  String.format("Address: %s", place.getAddress());
                LatLng toLatLng = place.getLatLng();
    
                // Add Marker
                marker = mMap.addMarker(new MarkerOptions().position(toLatLng)
                        .title(placeName).snippet(placeAddress)
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));
    
                // Move Camera to selected place
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11));
    
            }
        }
    }
    

    【讨论】:

    • 感谢您解决了问题
    • 所以我有一个问题,这段代码适用于我的模拟器,但是当我运行它时它不能在我的安卓手机上运行,​​所以我不确定是什么问题。
    • 我认为唯一可能出错的是 Android API 级别。当我的手机运行 Android 7.0 时,模拟器运行的是 android 6.0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多