我在我的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);
}
});
我希望实现一个与Google地图非常相似的搜索栏。
答案 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()从自动填充服务获取预测的地名和/或地址列表