在Android或REST中从Lat / Long生成地址

时间:2013-06-19 13:32:50

标签: android web-services rest web-applications

我正在使用与REST网络服务交互的Android应用。我们在手机中有一项功能,可以在Google原生地图中选择一个位置,然后发送到服务器。

出于某种原因,我们需要在网站上获取该点的地址以便打印出来。

如果我们使用Geocoder从手机中获取Latitude和Longtitude的地址并将其发送到REST,我们需要在手机中消耗一些内存,数据和带宽。

如果我们在REST中执行此操作,因为应该对使用该应用程序的许多用户执行此操作,因此该过程可能非常耗时。 (这是我们的REST开发人员所相信的)

你可以帮我看看你的意见吗?哪个想法更好,为什么?

3 个答案:

答案 0 :(得分:2)

您正在做的事情称为“反向地理编码”(https://developers.google.com/maps/documentation/geocoding/?hl=fr#ReverseGeocoding

关于你的问题:我知道你反向对一些用户的位置进行地理编码,并且许多其他用户将使用生成的地址。

知道:  反向地理成本高昂  2.获得的地址将被许多用户使用  3.每个用户将使用许多这些地址 然后你应该在服务器端执行并将所有地址放在一条消息中。如果您可以将地址数量限制为唯一有用的地址,那么它会更好(可能是您附近的地址,但取决于您的应用功能)

重要提示:在移动设备上,对性能至关重要的不是传输的数据量而不是消息数量:带宽很好但滞后很糟糕。所以 在您的服务器API中,避免原子操作并尽可能多地聚合!

答案 1 :(得分:1)

请使用此功能

String getAddress(Double lat,Double lon){         String address =“”;

    GeoPoint point = new GeoPoint((int) (lat * 1E6),
            (int) (lon * 1E6));

    Geocoder geoCoder = new Geocoder(mContext, Locale.getDefault());
    try {
        List<Address> addresses = geoCoder.getFromLocation(
                point.getLatitudeE6() / 1E6, point.getLongitudeE6() / 1E6,
                1);

        if (addresses.size() > 0) {
            for (int index = 0; index < addresses.get(0)
                    .getMaxAddressLineIndex(); index++)
                address += addresses.get(0).getAddressLine(index) + " ";
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

    return address;
}

答案 2 :(得分:0)

您可以通过手机使用它。据我所知,通过该服务将占用大量带宽。

我建议您直接在手机中使用而不是通过服务使用它。