Google Places Api ordenar por distancia

Actualmente desarrolla una aplicación de Android que devuelve la ubicación más cercana a la ubicación actual de los usuarios.

Google Places API devuelve ~ 20 lugares cerca de la ubicación de los usuarios pero no los 20 más cercanos ordenados por distancia.

Al examinar la documentación de la API de Google Places, no se muestra nada que pueda considerarse incorrecto.

GetPlaces.java

 String types = "accounting|airport|amusement_park|aquarium|art_gallery|atm|bakery|bank|bar|beauty_salon|bicycle_store|book_store|bowling_alley|bus_station|cafe|campground|car_dealer|car_rental|car_repair|car_wash|casino|cemetery|church|city_hall|clothing_store|convenience_store|courthouse|dentist|department_store|doctor|electrician|electronics_store|embassy|establishment|finance|fire_station|florist|food|funeral_home|furniture_store|gas_station|general_contractor|grocery_or_supermarket|gym|hair_care|hardware_store|health|hindu_temple|home_goods_store|hospital|insurance_agency|jewelry_store|laundry|lawyer|library|liquor_store|local_government_office|locksmith|lodging|meal_delivery|meal_takeaway|mosque|movie_rental|movie_theater|moving_company|museum|night_club|painter|park|parking|pet_store|pharmacy|physiotherapist|place_of_worship|plumber|police|post_office|real_estate_agency|restaurant|roofing_contractor|rv_park|school|shoe_store|shopping_mall|spa|stadium|storage|store|subway_station|synagogue|taxi_stand|train_station|travel_agency|university|veterinary_care|zoo"; resourceURI = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location="+myLocation.latitude+","+myLocation.longitude+"&radius=500&rankBy=distance&types="+ URLEncoder.encode(types, "UTF-8")+"&sensor=true&key=GOOGLE_MAPS_KEY"; try { String url =resourceURI; //getURL(myLocation.latitude,myLocation.longitude); HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 30000); HttpConnectionParams.setSoTimeout(httpParams, 30000); DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); HttpGet httpGet = new HttpGet(url); httpGet.setHeader("Content-type", "application/json"); ResponseHandler responseHandler = new BasicResponseHandler(); String response = (String) httpClient.execute(httpGet, responseHandler); if (response != null) { mResult = new JSONObject(response); results = mResult.getJSONArray("results"); } } catch (ClientProtocolException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } catch (JSONException e) { e.printStackTrace(); return null; } return results; } 

Esto devuelve JSON válido, pero no los lugares más cercanos a la distancia pasada. Sé de hecho que hay lugares más cercanos de lo que la solicitud está regresando.

Por ejemplo, hago una solicitud en un lugar conocido de google, pero no está mostrando el lugar en el que estoy actualmente, pero otros que están más lejos.

Tal vez usted ya ha resuelto su problema, pero espero que esto puede ayudar (Enfoque en lo que está en negrita) :

Radio – Define la distancia (en metros) dentro de la cual se devuelven los resultados del lugar. El máximo permitido es de 50 000 metros de radio. Tenga en cuenta que el radio no debe incluirse si se especifica rankby = distancia (Descrita debajo en Parámetros opcionales).

Rankby – Especifica el orden en el que se muestran los resultados. Los valores posibles son:

Prominencia (predeterminado). Esta opción clasifica los resultados en función de su importancia. El ranking favorecerá lugares prominentes dentro del área especificada. La prominencia puede verse afectada por la clasificación de un lugar en el índice de Google, el número de registros de su aplicación, la popularidad mundial y otros factores.

Distancia Esta opción clasifica los resultados en orden ascendente por su distancia desde la ubicación especificada. Cuando se especifica la distancia , se requiere una o más palabras clave, nombre o tipos.

Según: https://developers.google.com/places/documentation/search?hl=es

He entendido de acuerdo con la documentación de google que no se puede enviar simultáneamente argumentos "rankby" y "radio", debe utilizar sólo uno de ellos al mismo tiempo, de esta manera obtendrá los resultados ordenados por distancia.

Prueba la solicitud haciendo esto:

 resourceURI = "https://maps.googleapis.com/maps/api/place/nearbysearch/json? location="+myLocation.latitude+","+myLocation.longitude+"&rankBy=distance &types="+ URLEncoder.encode (types, "UTF-8") + "&sensor = true& key = GOOGLE_MAPS_KEY"; 

Para ver cómo lo haces, buena suerte!

Es muy posible que los lugares que usted está pensando están más cerca que los lugares que se devuelven no son lugares verdaderos de Google.

Echa un vistazo a esta sección de preguntas frecuentes para obtener tu empresa en Google Maps: https://support.google.com/places/answer/145585?hl=es .

Una prueba para esto podría ser intentar registrar el negocio que crees que está más cerca de Google coloca https://www.google.com/local/business/add?hl=es&migratedId=04614545856067425787 y ver si te permite. Si puedes, esto significaría que no son un verdadero lugar de Google y no aparecerían en este conjunto de resultados.

  • Android Google Places API, getAutocompletePredictions devuelve el estado 'PLACES_API_ACCESS_NOT_CONFIGURED'
  • Creación de un filtro de tipo de lugar para la API de Autocompletar de lugar para Android
  • PlaceAutocomplete tiene código de estado desconocido: 9000
  • Clave de la API de Google Places para Android
  • Google coloca la API devolviendo sólo 5 resultados
  • Se rechazó la solicitud de API de Google Places para el autocompletado de Android, incluso con la clave de api correcta
  • SOLICITUD NEGADA con la API de Google Places KEY para Servidor Web utilizada en una aplicación de Android
  • El selector de lugar no se abrirá en mi teléfono
  • Cómo limitar la búsqueda de ubicación cercana según la ubicación actual mediante google maps en android?
  • Cambiar Google Place Picker Appbar Text Color
  • No se puede importar Google Places PlacePicker en el proyecto de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.