在android上没有使用地图对象的关闭位置列表

时间:2017-01-22 18:31:08

标签: android google-maps google-places-api

我正在制作一个Android应用程序,需要检查用户是否接近感兴趣的地方,例如电影院。 (1公里内)

但是,我不需要用户查看我认为需要使用Google地方API的地图。我做了一些研究,但不知道如何在Android上实现这一点。任何提示(包括评论或相关链接将不胜感激)

4 个答案:

答案 0 :(得分:7)

查看附近的网站,

1.-使用谷歌地图中的https://maps.googleapis.com/maps/api/place/radarsearch/json?location=51.503186,-0.126446&radius=5000&types=movie+theater&key=YOUR_API_KEYlink here

2.-使用电话坐标,获取附近的电影院列表...

A

3.-比较两个坐标,并做你的魔法,也许得到两点的距离,并向用户显示距离..

  

注意:如果你想要很多特殊的地方,你需要看看   另一种方法。这就是我认为......在你的服务器中   需要通过与很多最近的地方的坐标做出请求,   (博物馆,电影院等),并保存,因为谷歌收费   当服务器多次检查时,用户发送时   coordenates你将有一个最近的地方列表,如果没有,请咨询   最佳请求列表并保存在您的服务器中并发送给用户,

     

如果是用户,你将需要使用一些计算coordenates,如range   我在数据库中发送的这个coordenates附近   信息,如果没有,请求服务器咨询最近的地方   (使用您的预定清单)

抱歉我的英文。

链接了解更多信息
Find Places Nearby in Google Maps using Google Places API–Android App
Places APIs and Related Products
how to display nearby places like atm,hospitals in android google map?

答案 1 :(得分:5)

如果我正确理解了您的问题,那么您正在寻找GeoFences。有关详细信息,请查看此处:https://developer.android.com/training/location/geofencing.html

答案 2 :(得分:3)

尝试此操作以获取地点,输入您自己的搜索查询

searchString = getIntent().getStringExtra("search_key");
GetPlacesTask getPlacesTask = new GetPlacesTask();
String url = getResources().getString(R.string.near_by_search) +
            "location="+latitude+","+longitude+"&radius=1000&type=" +
            searchString +"&keyword="+ searchString +
            "&key="+ YOUR_API_KEY;
String[] stringArray = new String[]{url};
getPlacesTask.execute(stringArray);

GetPlacesTask

private class GetPlacesTask extends AsyncTask<String, String, ArrayList<Place>>
{
    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected ArrayList<Place> doInBackground(String... strings)
    {
        try
        {
            URL url = new URL(strings[0]);
            HttpHandler httpHandler = new HttpHandler(url);
            String result = httpHandler.getURLResponse();
            ArrayList<Place> placesArrayList = new ArrayList<>();
            JSONObject mainResponse;
            JSONArray jsonArray;
            mainResponse = new JSONObject(jsonString);
            jsonArray = mainResponse.getJSONArray("results");
           if(jsonArray.length() > 0)
           {
               placesArrayList = fetch(jsonArray);
           }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return placesArrayList;
    }

    @Override
    protected void onPostExecute(ArrayList<Place> placesArrayList)
    {
        super.onPostExecute(placesArrayList);

        if(!placesArrayList.isEmpty())
        {
            //Show Places in your views
        }
    }
}

HttpHandler类

 public class HttpHandler
{
private URL url;
public HttpHandler(URL url)
{
    this.url = url;
}

public String getURLResponse()
{
    String response = "";

    try
    {
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        InputStream is = new BufferedInputStream(urlConnection.getInputStream());
        response = convertStreamIntoString(is);
        Log.d("RESPONSE", response);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }


    return response;
}

private String convertStreamIntoString(InputStream inputStream)
{
    String response = "";
    String line;
    try
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder sb = new StringBuilder();
        while ((line = reader.readLine()) != null)
        {
            sb.append(line);
        }
        response = sb.toString();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return response;
}
}

Here is the repository for the same

答案 3 :(得分:2)

您还可以在附近的地方使用Awareness Api。 您只需创建GoogleApiClient对象,如下所示 -

GoogleApiClient  mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Awareness.API)
                .addConnectionCallbacks(this)
                .build();

 mGoogleApiClient.connect();

然后在附近的地方拨打以下方法。

private void detectNearbyPlaces() {
        if (!checkLocationPermission()) {
            return;
        }

        Awareness.SnapshotApi.getPlaces(mGoogleApiClient)
                .setResultCallback(new ResultCallback<PlacesResult>() {
                    @Override
                    public void onResult(@NonNull PlacesResult placesResult) {
                        Place place;
                        if (placesResult.getPlaceLikelihoods() != null) {
                            for (PlaceLikelihood placeLikelihood : placesResult.getPlaceLikelihoods()) {
                                place = placeLikelihood.getPlace();
                                Log.e(TAG, place.getName().toString() + "\n" + place.getAddress().toString());
                                Log.e(TAG, "Rating: " + place.getRating());
                                Log.e(TAG, "Likelihood that the user is here: " + placeLikelihood.getLikelihood() * 100 + "%");
                            }
                        }
                    }
                });
    }

希望它对你有所帮助。