2012-04-14 110 views
1

我是Android的初學者,我正在努力創建能夠從地址標記具體位置的Google Map。如何從Android上的地址獲取緯度和經度?

現在,我的下面的代碼能夠標記「帝國大廈」,但沒有其他人..:< 我想知道如何從街道地址或完整地址獲取緯度和經度,並將其標記在地圖上。

我修改清單文件支持谷歌地圖視圖,如互聯網和ACCESS_COARSE_LOCATION

謝謝。

package cs2340.kiwi.HelloGoogleMaps; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import android.graphics.drawable.Drawable; 
import android.location.Address; 
import android.location.Geocoder; 
import android.os.Bundle; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 

public class HelloGoogleMapsActivity extends MapActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    MapView mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 

    List<Overlay> mapOverlays = mapView.getOverlays(); 
    Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
    HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this); 

    Geocoder coder = new Geocoder(HelloGoogleMapsActivity.this, Locale.getDefault()); 

    List<Address> address; 
    String strAddress = "empire state building"; 
    GeoPoint p1 = new GeoPoint(0,0); 
    Double latitude; 
    Double longitude; 
    MapController mc = mapView.getController(); 

    try { 
     address = coder.getFromLocationName(strAddress,5); 
     Address location = address.get(0); 
     latitude = location.getLatitude() * 1E6;   
     longitude = location.getLongitude() * 1E6; 

     p1 = new GeoPoint(latitude.intValue(), 
          longitude.intValue()); 

     mc.animateTo(p1);  
     mapView.invalidate(); 
    } 
    catch (IOException e){} 
    OverlayItem overlayitem2 = new OverlayItem(p1, "Hello", "not working"); 

    itemizedoverlay.addOverlay(overlayitem2); 
    mapOverlays.add(itemizedoverlay); 

} 
} 

這裏是我的另一個類

package cs2340.kiwi.HelloGoogleMaps; 

import java.util.ArrayList; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.graphics.drawable.Drawable; 

import com.google.android.maps.ItemizedOverlay; 
import com.google.android.maps.OverlayItem; 

public class HelloItemizedOverlay extends ItemizedOverlay { 

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
private Context mContext; 

public HelloItemizedOverlay(Drawable defaultMarker, Context context) { 
     super(boundCenterBottom(defaultMarker)); 
     mContext = context; 
    } 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 

protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
} 

public int size() { 
     return mOverlays.size(); 
} 

protected boolean onTap(int index) { 
     OverlayItem item = mOverlays.get(index); 
     AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
     dialog.setTitle(item.getTitle()); 
     dialog.setMessage(item.getSnippet()); 
     dialog.show(); 
     return true; 
} 

} 
+0

你的問題溶液在這裏[這裏] [1] [1]:HTTP:// stackoverflow.com/q/16686436/1858599 – 2013-08-14 20:05:44

回答

1

嘗試geocoding service的。發送HTTP請求到服務,然後讀取響應,並放置一個標記在地圖上。

1
http://maps.googleapis.com/maps/api/geocode/json?address=hyderabad&sensor=true_or_false 

http://maps.googleapis.com/maps/api/geocode/xml?address=hyderabad&sensor=true_or_false 

使用URL中的任何一個只需更換所需的地址,並有一個網絡打那麼它將返回從谷歌服務器相關LAT的列表和長。

1

要想從街道地址或完整地址的經度和緯度做以下操作:

int maxResults = 5; 
String address = "Example Road 15"; 

Geocoder geo = new Geocoder(context, Locale.getDefault()); 
List<Address> addresses = geo.getFromLocationName(address, maxResults); 

for (Address a : adresses) 
    map.addMarker(new MarkerOptions().position(new LatLng(a.getLatitude(), a.getLongitude())).title("Hello").snippet("Description about me!"));