Google Places API: как получить фотографии и идентификатор места по широте и долготе?

Я хочу получить фотографии и place_id, необходимые для Google Place Подробная информация API моего текущего местоположения.

Поиск поблизости не возвращает места в моем точном местоположении. (текущая широта / долгота, возвращаемая службой определения местоположения Android).

Для поиска по радару требуется ключевое слово. Пожалуйста, предложите.


person ihsan    schedule 17.07.2014    source источник
comment
Конечно, мы можем вам помочь, но перед этим вы должны продемонстрировать свои исследования и разработки!   -  person Paresh Mayani    schedule 17.07.2014


Ответы (1)


Согласно документации Google Place Search, вам необходимо предоставить три вещи: КЛЮЧ, МЕСТОПОЛОЖЕНИЕ и РАДИУС. Я вырезал кучу ненужного кода, но вот как я сделал нечто подобное.

1) Получите свое текущее местоположение

private void initializeMapLocation() {
    LocationManager locationManager = (LocationManager) this
            .getSystemService(Context.LOCATION_SERVICE);

    Location lastLocation = locationManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);

    if (lastLocation != null) {
        setUserLocation(lastLocation);
    }
}

private void setUserLocation(Location location) {
    LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude());
    mMap.animateCamera(CameraUpdateFactory.newLatLng(currentLatLng));
}

2) Создайте свой поисковый URL. Вы можете добавить дополнительные параметры, такие как ключевое слово, если хотите, добавив их, но в данном конкретном случае это не похоже на то, что вам нужно.

private void buildAndInitiateSearchTask(String searchType) {
    Projection mProjection = mMap.getProjection();
    LatLng mProjectionCenter = mProjection.getVisibleRegion().latLngBounds
        .getCenter();

    searchURL.append("https://maps.googleapis.com/maps/api/place/nearbysearch/");
    searchURL.append("json?");
    searchURL.append("location=" + mProjectionCenter.latitude + "," + mProjectionCenter.longitude);
    searchURL.append("&radius=" + calculateProjectionRadiusInMeters(mProjection));
    searchURL.append("&key=YOUR_KEY_HERE");

    new PlaceSearchAPITask().execute(searchURL.toString());
}

private double calculateProjectionRadiusInMeters(Projection projection) {

    LatLng farLeft = projection.getVisibleRegion().farLeft;
    LatLng nearRight = projection.getVisibleRegion().nearRight;

    Location farLeftLocation = new Location("Point A");
    farLeftLocation.setLatitude(farLeft.latitude);
    farLeftLocation.setLongitude(farLeft.longitude);

    Location nearRightLocation = new Location("Point B");
    nearRightLocation.setLatitude(nearRight.latitude);
    nearRightLocation.setLongitude(nearRight.longitude);

    return farLeftLocation.distanceTo(nearRightLocation) / 2 ;
}

3) Отправьте свой запрос и отобразите результаты в виде AsyncTask.

private class PlaceSearchAPITask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... placesURL) {
        StringBuilder placesBuilder = new StringBuilder();

        for (String placeSearchURL : placesURL) {
            HttpClient placesClient = createHttpClient();
            try {
                HttpGet placesGet = new HttpGet(placeSearchURL);
                HttpResponse placesResponse = placesClient
                        .execute(placesGet);
                StatusLine placeSearchStatus = placesResponse
                        .getStatusLine();
                if (placeSearchStatus.getStatusCode() == 200) {
                    HttpEntity placesEntity = placesResponse
                            .getEntity();
                    InputStream placesContent = placesEntity
                            .getContent();
                    InputStreamReader placesInput = new InputStreamReader(
                            placesContent);
                    BufferedReader placesReader = new BufferedReader(
                            placesInput);
                    String lineIn;
                    while ((lineIn = placesReader.readLine()) != null) {
                        placesBuilder.append(lineIn);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return placesBuilder.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        try {
            JSONObject resultObject = new JSONObject(result);

            // This is my custom object to hold the pieces of the JSONResult that I want. You would need something else for your particular problem.
            mapData = new MapDataSource(resultObject.optJSONArray("results"));
        } catch (JSONException e) {
            e.printStackTrace();
        }

        if (mapData != null) {
            // TODO - This is where you would add your markers and whatnot.
        } 
    }
}
person Sheridan Gray    schedule 27.08.2014