我正在使用与REST网络服务交互的Android应用。我们在手机中有一项功能,可以在Google原生地图中选择一个位置,然后发送到服务器。
出于某种原因,我们需要在网站上获取该点的地址以便打印出来。
如果我们使用Geocoder从手机中获取Latitude和Longtitude的地址并将其发送到REST,我们需要在手机中消耗一些内存,数据和带宽。
如果我们在REST中执行此操作,因为应该对使用该应用程序的许多用户执行此操作,因此该过程可能非常耗时。 (这是我们的REST开发人员所相信的)
你可以帮我看看你的意见吗?哪个想法更好,为什么?答案 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)
您可以通过手机使用它。据我所知,通过该服务将占用大量带宽。
我建议您直接在手机中使用而不是通过服务使用它。