0

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

我的应用看起来像这样:

在此处输入图像描述

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

在此处输入图像描述

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

4

1 回答 1

3

这是您的搜索工具的一些代码。这段代码对我有用。如果您输入位置名称,这会将您在地图上重定向到完全匹配的位置。下面的代码提供了两种搜索方式,第一种是 Name,第二种是 LatLang。

  1. 按名称和位置

    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. 通过拉特朗。

    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();
    
    }  
    
于 2012-10-26T06:56:03.630 回答