【问题标题】:Android google maps. Add marker by address安卓谷歌地图。按地址添加标记
【发布时间】:2014-06-22 14:21:53
【问题描述】:

我在 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();
        }

【问题讨论】:

  • 你能发布你到目前为止尝试过的东西吗??

标签: android google-maps


【解决方案1】:

创建一个将地址转换为 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));
}

【讨论】:

    【解决方案2】:

    这是可能的。您的问题似乎是地理编码部分。

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

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

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

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

    【讨论】:

    • 如果地理编码器不存在,我们能做什么?如何在地图上显示目的地 amrker?!
    • @Mr.Hyde 您可以使用我建议的 URL 作为替代。这没有 Android API 要求。
    • 为什么地理编码器不在支持库中!?你知道吗?
    • 因为手机制造商没有创建自己的实现。它不是核心 android 框架的一部分。
    【解决方案3】:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多