3

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

编辑: 我已经在我的应用程序中成功显示了谷歌地图,我想包含谷歌地图搜索功能意味着我可以在自动建议字段中搜索世界上的任何位置,并通过选择特定位置并将标记移动到该位置。那我该怎么办?

我试过这个这个,但没有得到自动建议的文本,为什么我不知道..

我想喜欢:

step1:用搜索框显示地图

在此处输入图像描述

step2:在输入文本时它应该自动建议。

在此处输入图像描述

step3:当点击特定名称时,将地图移动到该位置

在此处输入图像描述

4

4 回答 4

1

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

阅读以下文档以获得帮助。

  1. 地理编码 API
  2. 地方 API

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

那里有许多工作参考和示例。

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

  1. PlacesAPI自动完成功能带有自动完成功能的酒店查找器
  2. GeocodeAPI简单地理编码

注意: 我建议使用 javascript API。但不确定它是否会在 Android 环境中对您有所帮助(我对 android 环境一无所知)。

于 2014-05-10T08:47:12.513 回答
1

没有一个 Api 可以帮助您必须使用多个 google api

步骤1。实施 Google Place 自动完成功能阅读此内容

第2步。您必须进行地理编码意味着您必须将地址转换为纬度和经度检查这个

第三步。现在您可以在地图上绘制这些经纬度。

这对我有用。

于 2014-05-13T12:53:19.990 回答
0

我就是这样做的——

Android Manifest 文件应包含以下几行:

<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 "";
    }

我希望这足以帮助你。

于 2014-05-14T09:18:14.813 回答
0

我认为您应该在https://developers.google.com/maps/documentation/android/上查看适用于 Android 的 Google Maps API

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

于 2013-08-29T00:46:49.847 回答