android - 在自动完成中输入纬度/经度

时间:2016-12-26 21:47:39

标签: android google-maps

我在我的Android应用程序中添加了PlaceAutocompleteFragment,当我搜索一个地方时,它运行得很好。我的问题是,如何让用户输入纬度和经度值并在该坐标处放置标记?我只想隐藏"没有找到结果"部分,让用户点击输入并获取坐标。

以下是我到目前为止的情况。

<fragment
        android:id="@+id/place_autocomplete_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
        />

选择地点时的代码:

PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
          getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            String placeName = place.getName().toString();
            LatLng latLng = place.getLatLng();
            mMap.addMarker(new MarkerOptions().position(latLng).title(placeName));
            mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
        }
        @Override
        public void onError(Status status) {
            Log.i(TAG, "An error occurred: " + status);
        }
    });

enter image description here

我希望实现一个与Google地图非常相似的搜索栏。

3 个答案:

答案 0 :(得分:2)

不使用PlaceAutoCompleteFragment,而是使用PlaceAutocompleteIntent:

    try {
        Intent intent = new   
PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY)
                                .build(getThis());
        startActivityForResult(intent, RequestCodes.PLACE_AUTOCOMPLETE_REQUEST_CODE);

    } catch (GooglePlayServicesRepairableException e) {     
//Do something
    } catch (GooglePlayServicesNotAvailableException e) {
//Do something                
    }

这将发送一个intent而不是直接显示一个片段。然后,通过onResult方法,您可以捕获故障,并在那里执行反向地理编码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {

        switch(requestCode){
            case RequestCodes.PLACE_AUTOCOMPLETE_REQUEST_CODE:
                switch(resultCode){
                    case RESULT_OK:
                        Place place = PlaceAutocomplete.getPlace(this, data);
                       //Do something with the address you got.
                        break;
                    case RESULT_ERROR:
                        Status status = PlaceAutocomplete.getStatus(this, data);
                        //In this case, if you typed coordinates instead of an address, 
                        //you can use them to perform a reverse geocoding as you want.
            break;
                    case RESULT_CANCELED:
                        break;
                }
                break;
        }
    } catch (NullPointerException ex) {
        ex.printStackTrace();
    }
}

答案 1 :(得分:1)

  

[Google Place API translats]一个人类可读的地址   在地图上的位置。

您要做的是reverse geocoding

Android有Geocoder可用于此目的。您必须实现自己的片段才能执行此操作,但使用PlaceAutocompleteFragment无效。

答案 2 :(得分:0)

@ parth-bhoiwala请按照以下链接获取您的解决方案 的 https://developers.google.com/places/android-api/autocomplete#add_an_autocomplete_widget
在该链接中向下滚动以转到“以编程方式获取地点预测”部分

您可以创建自定义搜索UI,作为自动填充小部件提供的UI的替代方法。为此,您的应用必须以编程方式进行地点预测。您的应用可以通过调用GeoDataApi.getAutocompletePredictions()从自动填充服务获取预测的地名和/或地址列表