2016-09-26 10 views
8

все решения о расчете расстояния между двумя точками. мой вопрос: Есть ли способ рассчитать расстояние до определенной улицы?Можно ли получить расстояние между текущим местоположением и улицей, проспектом или областью?

Предположим, я хочу рассчитать расстояние от моего местоположения до определенной области или проспекта, где есть много улиц, в этом случае, как узнать ближайшую улицу ко мне, чтобы добраться туда?

здесь У меня есть только одна точка (мое местоположение), в то время как точка назначения является вариантом и зависит от моего текущего местоположения. то, что я знаю о назначении, находится на определенной улице или в районе, и как рассчитать его?

другой случай по этому вопросу, предположим, что я проехал 10 метров от определенной улицы длиной 1 км. Я должен уметь подсчитать, что мое расстояние находится в 10 метрах от начала этой улицы, после этого расстояния, когда выходите на улицу, и за каждый метр, который я просыпался на 1 км, он должен находиться на расстоянии 0 метров от моего местоположения до этой улицы, и когда я выхожу из нее с другой стороны, расстояние должно пересчитываться снова с конечной точки этой улицы не с начальной точки, поэтому, когда я уйду от нее около 5 метров, она должна рассчитать ее как 5 метров, а не 1005 метров.


Вот требование на примере на картах Google:

первые давайте посмотрим Wall Street in NY city на карте.

enter image description here

Так цель назначения Уолл-стрит. Теперь, если ваше текущее местоположение находится на кресте Джона-стрит с Уотер-стрит, моя задача - довести вас до ближайшей точки на Уолл-стрит, а путь будет равен this one (режим ходьбы).

enter image description here

однако, если вы находитесь в пересечении Брод-стрит с Beaver Street затем назначения до ближайшей точки на Уолл-стрит будет like this one (режим ходьбы):

enter image description here

это мой выпуск


Возможно ли это? Предлагают ли для этого новые API-интерфейсы?

любые решения или идеи?

+0

"расстояние" А требуется две точки по определению. Некоторые из [услуг геокодирования] (https://en.wikipedia.org/wiki/Geocoding) помогут вам получить (по крайней мере грубые) координаты для улицы, проспекта или области. «Ближайшая улица, чтобы доставить вас туда» сложнее, потому что на практике вы просите инструкции по навигации. Для расчета точного расстояния до улицы вам нужно знать ее координатные точки и получить их, например. от Mapzen как данные векторной карты. Фактический расчет затем представляет собой задачу геометрии: по возможности, перпендикулярное расстояние до линии, в противном случае - расстояние до ближайшей точки. –

+0

@MarkusKauppinen благодарит вас за ответ, точно, как вы говорите, как получить ближайшую точку, принадлежащую определенной улице из моего местоположения, используя карты Google? У меня есть две информации, координаты местоположения 1.my. 2. название улицы назначения. теперь я хочу попасть туда как кратчайший путь к ближайшей точке на этой улице, если я определю ближайшую точку, тогда я смогу туда добраться, используя ближайшую улицу, ведущую к ней, и получите другие инструкции по навигации. но как добраться до ближайшей точки на улице в качестве целевой точки назначения? это проблема здесь. –

+0

вниз голосование ... не проблема, но дайте мне повод. Я ищу решение этой проблемы, если кто-то хочет понизить голос и знает какое-то решение, продолжайте, но дайте мне решение, пожалуйста. –

ответ

0

эй, да, вы получите широту и долготу поискового места здесь. Я приведу пример того, как вы можете получить.

Вы можете использовать Google автозаполнения для поиска любой place.Then получить placeid из автозаполнения апи затем передать его детали API.

https://maps.googleapis.com/maps/api/place/autocomplete/json

https://maps.googleapis.com/maps/api/place/details/json

См передать параметры

//Google Autocomplete 
@GET(ApiConstants.GET_AUTOCOMPLETE) 
Observable<GoogleAutocompleteSearchResponse> getAutoCompleteSearch(@Query("input") String input, @Query("key") String key, @Query("components") String components); 

// Google Autocomplete places 
@GET(ApiConstants.GET_AUTOCOMPLETE_PLACE) 
Observable<GoogleAutoCompletePlacesResponse> getAutoCompletePlaces(@Query("placeid") String input, @Query("key") String key); 

Вы можете получить широту и долготу во втором одном апи.

Надеюсь, это вам поможет.

0

Сначала получите долготу, широту места назначения

public Location getCoordinatesFromAddress(Context context,String strAddress) { 

    Geocoder coder = new Geocoder(context); 
    List<Address> address; 
    Location destinationLoc = null; 

    try { 
     address = coder.getFromLocationName(strAddress, 5); 
     if (address == null) { 
      return null; 
     } 
     Address location = address.get(0); 
     destinationLoc = new Location("Destination"); 

     destinationLoc.setLatitude(location.getLatitude()); 
     destinationLoc.setLongitude(location.getLongitude()); 

    } catch (Exception ex) { 

     ex.printStackTrace(); 
    } 

    return destinationLoc; 
    } 

Как вы упомянули вы имеете широту и долготу вашего текущего местоположения. Используйте это, чтобы создать свое текущее местоположение.

Location locationA = new Location("Present location "); 

locationA.setLatitude(latA); 
locationA.setLongitude(lngA); 

Следующих после получения широты и долготы пункта назначения и источника (настоящие) мест вы можете легко вычислить расстояние между ними например

float distance = locationA.distanceTo(locationB); 

Это даст вам расстояние б/ш два гео местоположения в метрах.

0

Посмотрите на this response. Также просмотрите this API из Google.

Я предполагаю, что вы хотите выглядеть следующим образом:
- получить целевые координаты улиц [лат, длинные]
- получить места рядом с Google,
- Поиск ближайшего места.

0

В этом случае, если вы можете получить адрес как назначения, так и источника, то следующим методом вы можете получить расстояние между адресами.

За что вам нужно передать либо адрес (происхождения/назначения) или широты/долготы (отправления/назначения)

1) Здесь параметр происхождения может быть как следующий, если адрес предоставляется

origins=Bobcaygeon+ON|24+Sussex+Drive+Ottawa+ON 

2) Где, если, если задана широта/долгота, то следующий формат будет.

origins=41.43206,-81.38992 

3) Если вы в состоянии получить место ID, то это будет формат

origins=place_id:ChIJ3S-JXmauEmsRUcIaWtf4MzE 

В следующем примере используется широта/долгота, чтобы указать место назначения координаты

https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=40.6655101,-73.89188969999998&destinations=40.6905615%2C-73.9976592%7C40.6905615%2C-73.9976592%7C40.6905615%2C-73.9976592%7C40.6905615%2C-73.9976592%7C40.6905615%2C-73.9976592%7C40.6905615%2C-73.9976592%7C40.659569%2C-73.933783%7C40.729029%2C-73.851524%7C40.6860072%2C-73.6334271%7C40.598566%2C-73.7527626%7C40.659569%2C-73.933783%7C40.729029%2C-73.851524%7C40.6860072%2C-73.6334271%7C40.598566%2C-73.7527626&key=YOUR_API_KEY 

Такой же запрос для кодированной полилинии будет

https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=40.6655101,-73.89188969999998&destinations=enc:_kjwFjtsbMt%60EgnKcqLcaOzkGari%40naPxhVg%7CJjjb%40cqLcaOzkGari%40naPxhV:&key=YOUR_API_KEY 

Как пояснил другим это общий метод, чтобы найти кратчайшее расстояние с помощью API является

float distance = firstLocation.distanceTo(secondLocation); 

Для получения дополнительной информации перейдите по this link

0

Просто используйте Haversine формулу для вычисления расстояния между двумя точками, если вы знаете, широту и долгота для каждого из них.