如何区分我走过的街道和我周围的其他街道?



我以前从同一个应用程序收集了来自城市各地的一些位置,但情况是,当我从后端收到这些位置时,我只需要绘制位置在我的街道上,(我只需要查看只属于我的街道或只位于我现在行走的街道上的位置(

是否要区分街道Im walking in and the other streets round me, by get the street name more accurately or getting something likestreetId`

我在onLocationChanged方法中调用此方法

private String getStreetName(Location location) {
Geocoder geocoder;
List<Address> addresses;
String strAdd="";
geocoder = new Geocoder(this, Locale.getDefault());
try {
addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
if (!addresses.isEmpty()) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder("");
int i = 0;
do{
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append(" ");
i++;
}while (i < returnedAddress.getMaxAddressLineIndex());
strAdd = strReturnedAddress.toString();
} else {
Log.e("MyCurrentLoctionAddress", "No Address returned!");
}
} catch (Exception e) {
e.printStackTrace();
}
return strAdd;
}

问题是我从地理编码中得到的这个地址根本不准确。

我在这条街100米以内的同一条街上有这三个地址,我有三个不同的地址

*Mashyakhet Al Azhar Al Sharif, El-Gamaleya, Monsha'et Nasser, Cairo Governorate, Egypt
*Salah Salem St, Monsha'et Nasser, Cairo Governorate, Egypt 
*139 Salah Salem St, El-Gamaleya, El Gamaliya, Cairo Governorate, Egypt

由于GPS(以及其他位置确定服务(错误,您没有获得"地面真相";位置坐标。因此,IMHO,当您存储位置时,您需要将用户当前位置映射到道路,Google知道这一点(例如,在这个答案中,使用roads API的Snap to Road部分(,并不仅存储道路上的位置,还存储与当前用户位置的距离,因为您不仅需要通过坐标本身,还需要考虑周围的一些区域来检查位置坐标的等效性。然后,当你需要检查用户位置时,再次将用户路径捕捉到道路上,并在"地图"上绘制用户位置;"突然上路";路径

或者,您可以使用道路API的最近道路部分,并从最近道路API调用中选择

https://roads.googleapis.com/v1/nearestRoads?points=60.170880,24.942795|60.170879,24.942796|60.170877,24.942796&key=YOUR_API_KEY

响应:

{
"snappedPoints": [
{
"location": {
"latitude": 60.170877918672588,
"longitude": 24.942699821922421
},
"originalIndex": 0,
"placeId": "ChIJNX9BrM0LkkYRIM-cQg265e8"
},
{
"location": {
"latitude": 60.170876898776406,
"longitude": 24.942699912064771
},
"originalIndex": 1,
"placeId": "ChIJNX9BrM0LkkYRIM-cQg265e8"
},
{
"location": {
"latitude": 60.170874902634374,
"longitude": 24.942700088491474
},
"originalIndex": 2,
"placeId": "ChIJNX9BrM0LkkYRIM-cQg265e8"
}
]
}

街道,与用户当前位置的距离最小。要确定距离,您可以使用Android实用程序库地图SDK的SphericalUtil部分:

LatLng  userLocation = getUserLocation();
LatLng nearestStreet = null;
double minDist = 100000;
for (LatLng streetCoord: streetCoords) {
double dist = SphericalUtil.computeDistanceBetween(userLocation, streetCoord);
if (dist < minDist) {
nearestStreet = streetCoord;
dist = minDist;
}
}
// here nearestStreet should contains location of nearest street (but may be null).

NB!上面的代码只是为了说明:您需要使用地理编码来获取nearestStreetLatLng对象的街道名称,或者将响应解析为Place对象并从中获取PlaceID来获取街道名称等。

相关内容

  • 没有找到相关文章

最新更新