3

私のアプリケーションのライブラリ プロジェクトとして使用することはできますか? Android の Google マップの実際のアプリ検索機能を使用したいです。どうすればいいですか、可能ですか?前もって感謝します..

編集: アプリで Google マップを正常に表示しました。Google マップの検索機能を含めたいのは、自動提案フィールドで世界中の任意の場所を検索し、特定の場所を選択してマーカーをその場所に移動できることを意味します。どうすればいいですか?

これこれを試しましたが、自動提案されたテキストが表示されない理由がわからない..

私は好きです:

step1: 検索ボックスで地図を表示

ここに画像の説明を入力

step2: テキストを入力している間、自動的に提案する必要があります。

ここに画像の説明を入力

step3: 特定の名前をクリックすると、マップがその場所に移動します

ここに画像の説明を入力

4

4 に答える 4

1

Places API と Geocode API を使用すると、そのような検索機能を簡単に提供できます (どちらもユースケースに応じて役立ちます)。

以下のドキュメントをお読みください。

  1. ジオコード API
  2. プレイス API

    必要に応じて Places API を使用することをお勧めします (ユースケースに関する私の観察によると)。ただし、必要に応じてジオコードを使用することもできます。

多くの作業参照と例があります。

起動のために、以下は私の参考です:

  1. PlacesAPI AutoComplete 機能Autocomplete を備えた Hotel Finder
  2. GeocodeAPIシンプルなジオコーディング

注 : JavaScript API を提案しました。しかし、それがAndroid環境で役立つかどうかはわかりません(Android環境については何も知りません)。

于 2014-05-10T08:47:12.513 に答える
1

複数の Google API を使用しなければならない場合、単一の API では役に立ちません。

ステップ1。Google プレイスのオートコンプリートを実装する これを読む

ステップ2。ジオコーディングする必要があるということは、住所を緯度と経度に変換する必要があることを意味します。これを確認してください

Step3. これで、これらの緯度経度を地図上にプロットできます。

これは私にとってはうまくいきます。

于 2014-05-13T12:53:19.990 に答える
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 "";
    }

これがあなたを助けるのに十分であることを願っています。

于 2014-05-14T09:18:14.813 に答える