我正在制作一个Android应用程序,需要检查用户是否接近感兴趣的地方,例如电影院。 (1公里内)
但是,我不需要用户查看我认为需要使用Google地方API的地图。我做了一些研究,但不知道如何在Android上实现这一点。任何提示(包括评论或相关链接将不胜感激)
答案 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_KEY
,link 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;
}
}
答案 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 + "%");
}
}
}
});
}
希望它对你有所帮助。