【问题标题】:How to get Latitude Longitude from more than 500 addresses?如何从 500 多个地址中获取纬度经度?
【发布时间】:2015-08-11 20:51:06
【问题描述】:

我在数据库中有 700 多个地址。 我想明智地绘制它们的区域。 我已经实现了这段代码:

public LatLng getSingleLocationFromAddress(String strAddress)
{
    Geocoder coder = new Geocoder(this, Locale.getDefault());
    List<Address> address = null;
    Address location = null;
    GeoPoint p1 = null;
    LatLng temp = null;//new LatLng(26.0000, 121.0000);
    String strAddresNew = strAddress.replace(",", " ");
    try
    {
        address = coder.getFromLocationName(strAddresNew, 1);
        if (!address.isEmpty())
        {
            location = address.get(0);
            location.getLatitude();
            location.getLongitude();
            temp = new LatLng(location.getLatitude(), location.getLongitude());
            Log.d("Latlng : ", temp + "");
        } else
        {
            arrTemp.add(strAddress);
            System.out.println(arrTemp);
        }
    } catch (IOException e)
    {
        Toast.makeText(mContext, e.toString(), Toast.LENGTH_LONG).show();
        e.printStackTrace();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    return temp;
}

但问题是当我像这样在循环中调用此方法时:

Marker TP1 = googleMap.addMarker(new MarkerOptions().position(getSingleLocationFromAddress(fullAddress)));

coder.getFromLocationName(strAddresNew, 1); 行对某些地址返回 null,例如,如果我有 7 个地址的 ArrayList,那么我只会得到 4-5 个 LatLong 值。

【问题讨论】:

  • ...请查看我的以下解决方案
  • 嗯,我看到了你现在面临的问题。如果无法从地址中获取位置,则无法获取纬度/经度。
  • 它不会返回 LatLng 提供的位置名称。每个 LatLng 都没有位置名称。
  • 现有的 API 将返回地址的纬度和经度。也许会考虑使用其中之一?

标签: android google-maps reverse-geocoding


【解决方案1】:

使用下面的代码行...对你有帮助

在您的 OncreateOncreatView

上方声明这些变量
List<Address> From_geocode = null;
private double sLat, sLong;
private Geocoder geocoder;

比在你的 oncreateoncreateVIew 中使用这些代码行

geocoder = new Geocoder(getActivity());

    try {
        From_geocode = geocoder.getFromLocationName("PUT THE ADDRESS HERE", 1);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    if (From_geocode.size() > 0) {
        System.out.println("2");
        From_geocode.get(0).getLatitude(); // getting
        // latitude
        From_geocode.get(0).getLongitude();

        sLat = From_geocode.get(0).getLatitude();
        sLong = From_geocode.get(0).getLongitude();

        System.out.println("LATITUTE====="+sLat+"   LONGITUTE====="+sLong);

    }

并提供 ma​​nifest 文件中的条目

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

【讨论】:

  • 感谢@Ravindra Kushwaha,但它仍然无法正常工作。
  • 是的..我已授予所有权限
  • 您的应用程序中是否有任何异常或者您是否使用了我的代码并将地址放在我的代码中的“PUT THE ADDRESS HERE”字符串中???
  • 不,也不例外。只是 From_geocode 返回这个 [] 即空白 no lat long
  • 您能否在评论中添加代码....您根据我的代码进行了更改...仅粘贴该代码...没有完整代码
【解决方案2】:

尽管 google 数据库很广泛,但您提供的某些地址可能无法进行地理编码。因此,您不会获得这些地址的纬度/经度。您可能可以检查响应的状态。

如下链接所述

https://developers.google.com/maps/documentation/geocoding/#StatusCodes

地理编码响应对象中的“状态”字段包含请求的状态,并且可能包含调试信息,以帮助您找出地理编码不起作用的原因。 “状态”字段可能包含以下值:

  1. “OK”表示没有发生错误;地址已成功解析并返回至少一个地理编码。

  2. “ZERO_RESULTS”表示地理编码成功但未返回任何结果。如果向地理编码器传递了一个不存在的地址,则可能会发生这种情况。

【讨论】:

  • 谢谢@joyson。我会检查的。
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多