在自定义应用程序上实现地图搜索功能,如在本机谷歌地图中

时间:2012-10-26 06:36:19

标签: android google-maps android-searchmanager

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

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

enter image description here

按下搜索按钮后,我希望显示这种布局:

enter image description here

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

1 个答案:

答案 0 :(得分:3)

以下是您的搜索工具的一些代码。这段代码和我一起工作。如果您输入位置名称,则会在地图上将您重定向到完全匹配的位置。以下代码提供了两种搜索方式,首先是名称,第二种是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();
    
    }