如何从500多个地址中获取纬度和经度?

11

我在数据库中有超过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)));

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


请检查我的以下解决方案。 - Ravindra Kushwaha
嗯,我明白你现在面临的问题。如果无法从地址获取位置信息,那么就无法获得纬度/经度。 - Daniel Nugent
它不会返回由您提供的LatLng提供的位置名称。每个LatLng都没有位置名称。 - M D
现有一些API可以返回地址的纬度和经度。也许考虑使用其中之一? - camiblanch
2个回答

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);

    }

提供在清单文件中的条目

<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,但它仍然无法工作。 - user3675056
是的,我已经授予了所有权限。 - user3675056
你的应用程序中是否有任何异常?或者你是否使用了我的代码并将地址放在我的代码中的“PUT THE ADDRESS HERE”字符串中? - Ravindra Kushwaha
没有任何异常。 仅 From_geocode 返回此 [],即空白无经纬度。 - user3675056
可以请您在评论中添加代码吗?这些代码是根据我的代码更改的。请只粘贴那部分代码,不要全部代码。 - Ravindra Kushwaha

0
尽管谷歌数据库十分广泛,但您提供的某些地址可能无法进行地理编码。因此,对于这些地址,您将无法获得纬度/经度信息。您可以通过检查响应状态来验证这一点。
正如下面链接中所提到的那样:

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

Geocoding响应对象中的“status”字段包含请求的状态,并且可能包含调试信息,以帮助您跟踪为什么地理编码不起作用。 “status”字段可能包含以下值:
1. “OK”表示没有发生错误;地址已成功解析并返回至少一个地理编码。 2. “ZERO_RESULTS”表示地理编码成功但未返回结果。如果传递了不存在的地址,则可能会出现这种情况。

谢谢@joyson。 我会检查一下。 - user3675056

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接