在自定义应用中实现地图搜索功能(如在本地谷歌地图中)

问题描述:

我需要在自定义地图应用上实现搜索功能,就像在本地谷歌地图中一样(操作栏变成搜索字段,并且可以编写查询) 。现在我知道如何使用google geocoding api,以及如何从数据中检索位置。但是我没能实现那个可变动的操作栏。在自定义应用中实现地图搜索功能(如在本地谷歌地图中)

我的应用程序看起来像这样:

enter image description here

后,我按下搜索按钮,我想有这种布局显示:

enter image description here

感谢您的帮助,希望你能解决我的问题。

+1

这个问题是不是在谷歌地图API V3。 (标签已移除)。 – Marcelo

以下是您的搜索工具的一些代码。这段代码和我一起工作。如果您输入地点名称,则会将您在地图上重定向到完全匹配的地点。下面的代码提供了两种搜索方式,首先由名字命名,然后由LatLang命名。

  1. 通过名称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(); 
    
    } 
    
  2. 通过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