Android谷歌地图。按地址添加标记

时间:2014-06-22 14:21:53

标签: android google-maps

我在android应用程序中添加了地图,并希望通过地址在地图上添加标记。有可能的? 我已经尝试使用Geocoder进行长时间的转换,但我收到错误Service not Available

我的代码:

Geocoder geocoder = new Geocoder(getBaseContext());
        List<Address> addresses = null;

        try {
            addresses = geocoder.getFromLocationName(event.getPlace(), 20);
            System.out.println(addresses);
//          for (int i = 0; i < addresses.size(); i++) { // MULTIPLE MATCHES
//
//              Address addr = addresses.get(i);
//
//              double latitude = addr.getLatitude();
//              double longitude = addr.getLongitude(); // DO SOMETHING WITH
//                                                      // VALUES
//
//              System.out.println(latitude);
//              System.out.println(longitude);
//
//          }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

3 个答案:

答案 0 :(得分:12)

创建一个将地址转换为LatLng的方法:

public LatLng getLocationFromAddress(Context context, String strAddress)
{
    Geocoder coder= new Geocoder(context);
    List<Address> address;
    LatLng p1 = null;

    try
    {
        address = coder.getFromLocationName(strAddress, 5);
        if(address==null)
        {
            return null;
        }
        Address location = address.get(0);
        location.getLatitude();
        location.getLongitude();

        p1 = new LatLng(location.getLatitude(), location.getLongitude());
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return p1;

}

然后,

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);      

}


@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
  LatLng address = getLocationFromAddress(this, yourAddressString(eg. "Street Number, Street, Suburb, State, Postcode");
    mMap.addMarker(new MarkerOptions().position(address).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(address));
}

答案 1 :(得分:2)

有可能。你的问题似乎是地理编码部分。

使用Geocoder的问题在于它需要一个未包含在核心android框架中的后端服务,如Android API for Geocoder中所述。您应该使用geocoder.isPresent()来检查此功能是否可用。如果不是,则不能使用此方法。

地理编码也可以使用网址在Google地图中完成,如The Google Geocoding API中所述。例如(您需要API密钥):

  

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=API_KEY

提供可以解析的结果以检索标记的纬度和经度。

答案 2 :(得分:1)

Kotlin 版本:

import com.google.android.gms.maps.model.LatLng

fun getLocationByAddress(context: Context, strAddress: String?): LatLng? {
    val coder = Geocoder(context)
    try {
        val address = coder.getFromLocationName(strAddress, 5) ?: return null
        val location = address.first()
        return LatLng(location.latitude, location.longitude)
    } catch (e: Exception) {
        Timber.e(e, "getLocationByAddress")
    }
    return null
}