Android 如何区分我所走的街道和我周围的其他街道?
我以前从同一个应用程序中收集了来自整个城市的一些地点,但情况是,当我从后端收到这些地点时,我只需要画出这些地点在我的街道上,我只需要看到那些只属于我的街道或只位于我现在行走的街道上的地点 通过更准确地获得街道名称或类似streetId`,有没有办法区分我所走的街道和我周围的其他街道 我正在onLocationChanged方法中调用此方法Android 如何区分我所走的街道和我周围的其他街道?,android,google-maps,geolocation,google-geocoder,Android,Google Maps,Geolocation,Google Geocoder,我以前从同一个应用程序中收集了来自整个城市的一些地点,但情况是,当我从后端收到这些地点时,我只需要画出这些地点在我的街道上,我只需要看到那些只属于我的街道或只位于我现在行走的街道上的地点 通过更准确地获得街道名称或类似streetId`,有没有办法区分我所走的街道和我周围的其他街道 我正在onLocationChanged方法中调用此方法 由于GPS和其他定位服务,您无法获得地面真实位置坐标。所以,IMHO,当你存储位置时,你需要将用户当前位置映射到道路上,谷歌知道这一点,例如,不仅要使用和存储
由于GPS和其他定位服务,您无法获得地面真实位置坐标。所以,IMHO,当你存储位置时,你需要将用户当前位置映射到道路上,谷歌知道这一点,例如,不仅要使用和存储道路上的位置,还要存储与当前用户位置的距离,因为你需要检查位置坐标的等价性,不仅要通过坐标本身,还要考虑到它们周围的一些区域。然后,当需要检查用户位置时,再次将用户路径捕捉到道路,并在捕捉到的道路路径上映射用户位置 或者,您可以使用并从最近的道路选择API调用 https://roads.googleapis.com/v1/nearestRoads?points=60.170880,24.942795 | 60.170879,24.942796 | 60.170877,24.942796&key=您的| API | key 答复: 街道,与用户当前位置的最小距离。要确定距离,可以使用以下部分: 注意!上面的代码只是为了举例说明:您需要使用地理编码为最近的street Latling对象获取街道名称,或者将响应解析为Place对象并从中获取PlaceID以获取街道名称等
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;
}
*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
{
"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"
}
]
}
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).