我写了一个Android应用程序
我从服务器获取地址列表。
如何衡量移动客户端与指定地址之间的距离?
我想我首先必须将地址转换为坐标?你会怎么建议这样做?
答案 0 :(得分:2)
您可以使用地址获取lat / lng。
从给定地址获取lat / lng的代码:
Geocoder coder = new Geocoder(this);
List<Address> address;
try {
address = coder.getFromLocationName(strAddress,5);
if (address == null) {
return null;
}
Address location = address.get(0);
lat = location.getLatitude(); // get lat
lng = location.getLongitude(); // get lng
return p1;
}
之后,您可以获取当前位置。
最后你需要使用distanceTo()方法,传递所有这些src / dest lat / lng值,这样你就可以获得2个位置之间的距离。
答案 1 :(得分:1)
首先,如果您可以控制数据库,MongoDB对基于位置的东西有一些非常好的排序算法。根据您获得的地址是相同还是不同,您还可以使用地址将lat / long插入数据库,这样您就不必每次都查找它。
话虽这么说,您可以使用Google Geocoding API将地址转换为lat和long。你可以在这里使用cURL找到一个不错的例子:http://www.techrecite.com/get-latitude-longitude-of-an-address-using-google-geocoding-api/
将它与使用java.net.Connection相结合,这里有一个很好的解释:Using java.net.URLConnection to fire and handle HTTP requests
你正在路上。
答案 2 :(得分:0)
您可以设置LocationListner并获取移动用户的当前Lat-Log,然后只使用distanceTo
类的Location
方法。
检查此链接:
1)http://developer.android.com/reference/android/location/LocationManager.html
2)http://developer.android.com/reference/android/location/LocationListener.html
3)http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/(示例)
我的服务器为您提供Lat-Long的地址,这对您有帮助。
注意在清单中添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 3 :(得分:0)
我认为更有用的方法是从Google Directions API
获取方向按照说明启用它并获取密钥。然后在浏览器中尝试这样的事情:
http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&key=API_KEY
你得到了一大堆信息。这包括coords:
"bounds" : {
"northeast" : {
"lat" : 45.5110114,
"lng" : -73.5530088
},
"southwest" : {
"lat" : 43.6533103,
"lng" : -79.3827675
}
但也包括路线长度。这是步行距离:
"legs" : [
{
"distance" : {
"text" : "542 km",
"value" : 542358
},
我们走了,我可以从这里得到鸟飞的距离(虽然这可能是你的唯一问题)但是我可以得到更有用的信息最佳路线< /强>
答案 4 :(得分:0)
希望这有帮助:
https://developers.google.com/maps/documentation/distancematrix/
请记住:
距离矩阵API必须与Google地图上的信息显示相关;例如,在请求并在地图上显示那些目的地之前,确定彼此在特定驾驶时间内的起始 - 目的地对。禁止在不显示Google地图的应用程序中使用该服务。
答案 5 :(得分:0)
第一步,必不可少的步骤是找到用户位置。为此,请查看http://developer.android.com/guide/topics/location/strategies.html
有关如何执行此操作的不同策略。
您最终会得到用户位置的Location个对象。
下一步是获取地址的坐标。为此,您需要使用Geocoder类。创建它的新实例,并使用&#34; getFromLocationName(&#34;地址&#34;,1).get(0)&#34;获取一个Location对象,该对象是&#34;地址&#34;最接近的结果。 (替换&#34;地址&#34;使用您从服务器获得的任何地址)。
您可能需要使用此方法才能获得正确的结果。
最后一步很简单,你可以使用&#34; usersLocation.distanceTo(addressLocation)&#34;,&#34; usersLocation&#34;和&#34; addressLocation&#34;分别是用户的位置对象和远程获取的地址。
这会给你一个浮点数,即以米为单位的距离。