0

AndroidとJavaを使用して、道路名で地図上に場所を表示するにはどうすればよいですか?

例:プログラムstreet、cityと入力し、地図上で場所を取得します

私はこのサンプルを持っています:

Intent i = new
        Intent(android.content.Intent.ACTION_VIEW,
        Uri.parse("geo:31.06221,33.781642"));
        startActivity(i);

通りと都市を挿入するためにこのコードを変更する方法は?私はこれを試してみます:

何かのようなもの:Uri.parse("geo:empire state building"));

しかし、それは機能しません):

4

2 に答える 2

3

Geocoderクラスで逆ジオコーディングを使用する

エンパイアステートビルの座標を達成するための例:

Geocoder geoCoder = new Geocoder(this, Locale.getDefault());    
        try {
            List<Address> addresses = geoCoder.getFromLocationName(
                "empire state building", 5);
            String add = "";
            if (addresses.size() > 0) {
                String coords = "geo:" + String.valueOf(addresses.get(0).getLatitude()) + "," + String.valueOf(addresses.get(0).getLongitude());
                Intent i = new
                      Intent(android.content.Intent.ACTION_VIEW,
                             Uri.parse(coords));
                startActivity(i);
            }  
    } catch (IOException e) {

            e.printStackTrace();
        }
于 2012-10-27T14:53:21.933 に答える
0

ジオコーダーは素晴らしく、llyaに感謝します。

このクエリは別のスレッドで実行する必要があります。たとえば、AsyncTaskです。これがサンプルコードです。お役に立てば幸いです。

public class AsyncTaskToQueryLocation extends
    AsyncTask<String, Integer, LatLng> {

private WeakReference<Context> m_Context;
private WeakReference<UserLocationManager> m_Manager;
private WeakReference<OnGeoLocationQueryListener> m_Listener;
private Locale m_Locale;
private String m_ParsedLocation;

public AsyncTaskToQueryLocation(Context context,
        UserLocationManager manager, OnGeoLocationQueryListener listener,
        Locale locale) {

    m_Context = new WeakReference<Context>(context);
    m_Manager = new WeakReference<UserLocationManager>(manager);
    m_Listener = new WeakReference<OnGeoLocationQueryListener>(listener);
    m_Locale = locale;
    m_ParsedLocation = null;
}

@Override
protected LatLng doInBackground(String... params) {

    Context context = m_Context.get();
    if (context == null) {
        return null;
    }

    if ((params == null) || (params.length == 0) || (params[0] == null)) {
        return null;
    }

    m_ParsedLocation = params[0];
    Geocoder geoCoder = new Geocoder(context, m_Locale);
    try {
        List<Address> addresses = geoCoder.getFromLocationName(
                m_ParsedLocation, 1);

        if (addresses.size() > 0) {
            return new LatLng(addresses.get(0).getLatitude(), addresses
                    .get(0).getLongitude());
        }
    } catch (IOException e) {

        e.printStackTrace();
    }

    return null;
}

@Override
protected void onPostExecute(LatLng latLng) {

    OnGeoLocationQueryListener listener = m_Listener.get();
    if (listener != null) {
        listener.onGeoLocationQueryFinished(m_ParsedLocation, latLng);
    }

    onCancelled();
}

@Override
protected void onCancelled() {

    UserLocationManager manager = m_Manager.get();
    if (manager != null) {
        manager.notifyAsyncTaskFinish(AsyncTaskToQueryLocation.class
                .getSimpleName());
    }

    clearReference();
}

private void clearReference() {

    // release the weak reference.
    m_Listener.clear();
    m_Manager.clear();
    m_Context.clear();
}

}

于 2014-01-31T20:35:48.923 に答える