如何在我的应用程序中使用Google地图搜索功能api?

时间:2013-06-29 13:21:06

标签: android google-maps google-search-appliance

是否可以将其用作我的应用程序的库项目,我想使用Android Google Maps真实应用搜索功能。我怎么能这样做,有可能吗? 提前谢谢..

修改  我已成功在我的应用中显示Google地图,我想要包含Google地图搜索功能意味着我可以在自动建议的字段中搜索世界上的任何位置,并选择特定位置并将标记移动到该位置。那我该怎么办?

我尝试了thisthis但未获得自动建议的文字,为什么我不知道..

我想要:

第1步:使用搜索框显示地图

enter image description here

第二步:输入文字时应自动提示。

enter image description here

第3步:点击特定名称时将地图移动到该位置

enter image description here

4 个答案:

答案 0 :(得分:1)

您可以使用Places API和Geocode API轻松提供此类搜索功能(两者都会根据您的用例帮助您)。

请阅读以下文档以获取帮助。

  1. GeoCode API
  2. Places API

    我建议您根据需要使用Places API(根据我对您的用例的观察)。但是如果需要的话,你也可以使用地理编码。

  3. 有许多工作参考和例子。

    对于启动,以下是我的参考:

    1. PlacesAPI AutoComplete featureHotel Finder with Autocomplete
    2. GeocodeAPI Simple GeoCoding
    3. 注意: 我已经建议了javascript API。但不确定它是否会在Android环境中帮助你(我对android环境一无所知)。

答案 1 :(得分:1)

没有单一的Api可以帮助你使用多个谷歌api的

步骤1。实施Google Place自动填充Read this

第二步。您必须进行地理编码意味着您必须将地址转换为纬度和经度check this

步骤3。现在你可以在地图上绘制这些lat-long。

这对我有用。

答案 2 :(得分:0)

我认为您应该在https://developers.google.com/maps/documentation/android/

查看适用于Android的Google Maps API

Google Search Appliance目前没有任何地图或地理位置搜索功能。

答案 3 :(得分:0)

我就是这样做的---

Android清单文件应包含以下行:

<uses-library
            android:name="com.google.android.maps"
            android:required="true" >
        </uses-library>

        <!-- You must insert your own Google Maps for Android API v2 key in here. -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="<put your api key value here>" />

位置XML文件除了以外任何内容之外还应具备以下内容:

 <fragment 
          android:name="com.google.android.gms.maps.SupportMapFragment"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>

位置java文件应该是这样的:

View mapView = null;
private GoogleMap mMap;
mMap = supportMapFragment.getMap();
mapView = (View) view.findViewById(R.id.map);

SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager
                .findFragmentById(R.id.map);

         if(mMap != null){
            mMap.setMyLocationEnabled(true);
        }

    if(mMap != null)
            mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {

                @Override
                public void onMapLongClick(LatLng latLng) {
                    new EditMap().execute("", String.valueOf(latLng.latitude), String.valueOf(latLng.longitude));
                }
            });


            class EditMap extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        /**
         * getting Albums JSON
         * */
        protected String doInBackground(String... args) {
            String address = args[0];
            double latitude = Double.parseDouble(args[1]);
            double longitude = Double.parseDouble(args[2]);

            return editMap(address, latitude, longitude);
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String result) {
            if(!result.equals(""))
                ToastUtil.ToastShort(getActivity(), result);
            else {
                mMap.clear();
                mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(attvalue));
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 11));
            }

        }
    }

注意:

当您从填充文本中的位置的地图中选择时,这些是设置位置的最低要求。

当您长按地图中的位置时,会运行一个后台线程。 如上所示,为此定义的听众是setOnMapLongClickListener

执行将标记放置到您选择标记为设置的确切位置。

通过标记选择位置后,会出现done按钮。这个done按钮将确认您选择的内容并将在文本字段中为您设置。

以上代码使用方法editMap 编辑地图位置。

实施方式如下:

private String editMap(String address, double latitude, double longitude ) {
        String keyword = null;

        try {
            Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
            if(!address.equals("")){
                keyword = address;
                java.util.List<android.location.Address> result = geocoder
                .getFromLocationName(keyword, 1);
                if (result.size() > 0) {
                    lat = (double) result.get(0).getLatitude();
                    lng = (double) result.get(0).getLongitude();
                    attvalue = address;
                } else {
                    return "Record not found";
                }
            } else {

                String sUrl = "http://google.com/maps/api/geocode/json?latlng="+latitude+","+longitude+"&sensor=true";

                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet get = new HttpGet(sUrl);
                HttpResponse r = client.execute(get);
                int status = r.getStatusLine().getStatusCode();
                if(status == 200){
                    HttpEntity e = r.getEntity();
                    String data = EntityUtils.toString(e);

                    try{
                        JSONObject jsonObject = new JSONObject(data);
                        JSONArray results = jsonObject.getJSONArray("results");
                        JSONObject addressObject = results.getJSONObject(0);
                        JSONArray addressComp = addressObject.getJSONArray("address_components");

                        String city = "", state = "";
                        for(int i=0; i < addressComp.length(); i++){
                            JSONArray types = addressComp.getJSONObject(i).getJSONArray("types");
                            if(city.equals("") && types.getString(0).equals("locality"))
                                city = addressComp.getJSONObject(i).getString("long_name");
                            if(state.equals("") && types.getString(0).equals("administrative_area_level_1"))
                                state = addressComp.getJSONObject(i).getString("long_name");

                            if(!city.equals("") && !state.equals(""))
                                break;
                        }
                        attvalue = city + ", " + state;
                    } catch (JSONException e1) {
                        e1.printStackTrace();
                    }
                    lat = latitude;
                    lng = longitude;
                }else{
                    return "Location Not Found";
                }
            }
        } catch (IOException io) {
            return "Connection Error";
        }
        return "";
    }

我希望这足以帮助你。