在自定义应用中实现地图搜索功能(如在本地谷歌地图中)
问题描述:
我需要在自定义地图应用上实现搜索功能,就像在本地谷歌地图中一样(操作栏变成搜索字段,并且可以编写查询) 。现在我知道如何使用google geocoding api,以及如何从数据中检索位置。但是我没能实现那个可变动的操作栏。在自定义应用中实现地图搜索功能(如在本地谷歌地图中)
我的应用程序看起来像这样:
后,我按下搜索按钮,我想有这种布局显示:
感谢您的帮助,希望你能解决我的问题。
答
以下是您的搜索工具的一些代码。这段代码和我一起工作。如果您输入地点名称,则会将您在地图上重定向到完全匹配的地点。下面的代码提供了两种搜索方式,首先由名字命名,然后由LatLang命名。
-
通过名称OG位置
public void searchPlace() { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Search Location"); alert.setMessage("Enter Location Name: "); // Set an EditText view to get user input final EditText input = new EditText(this); alert.setView(input); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String value = input.getText().toString(); // Do something with value! Log.d("value", value); Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault()); try { List<Address> addresses = geoCoder.getFromLocationName( value, 5); String add = ""; if (addresses.size() > 0) { p = new GeoPoint( (int) (addresses.get(0).getLatitude() * 1E6), (int) (addresses.get(0).getLongitude() * 1E6)); mc.animateTo(p); // create mapController object like `MapController mc = mapView.getController();` mapView.invalidate(); } } catch (IOException e) { e.printStackTrace(); } } }); alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); alert.show(); }
-
通过LAtLang。
public void byLatLang() { LayoutInflater factory = LayoutInflater.from(this); final View textEntryView = factory.inflate(R.layout.latlong, null); AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Search Location"); alert.setMessage("Enter Lattitude and Longitude: "); alert.setView(textEntryView); // Set an EditText view to get user input AlertDialog latLongPrompt = alert.create(); final EditText lat = (EditText) textEntryView.findViewById(R.id.lat); final EditText longi = (EditText) textEntryView.findViewById(R.id.longi); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getBaseContext(), "clicked ok ", Toast.LENGTH_SHORT).show(); Double value1 = Double.parseDouble(lat.getText().toString()); Double value2 = Double.parseDouble(longi.getText().toString()); // Do something with value! //Log.d("value1", value1); //Log.d("value2", value2); p = new GeoPoint( (int) (value1 * 1E6), (int) (value2 * 1E6)); mc.animateTo(p); mc.setZoom(17); mapView.invalidate(); } }); alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); alert.show(); }
+0
嗨,谢谢你的答案,它很酷。但主要问题并没有解决。我需要像在标准谷歌地图中那样更改操作栏。我已经提出了你的问题,但我不能接受。 – Csabi
这个问题是不是在谷歌地图API V3。 (标签已移除)。 – Marcelo