在google maps中找到最近的位置为android

时间:2012-05-27 09:08:43

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

有没有办法根据特定点(长/纬)在Google地图中找到最近的位置, 我读了一些关于Google Place API的内容,但我没有意识到如何使用它。 是否有可能找到下一个最近的一个???

3 个答案:

答案 0 :(得分:3)

使用Google Places API Web Service,您可以执行Places Search Request,其中location是用户lat,lng:

  

https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&rankby=distance&types=food&sensor=false&key=AddYourOwnKeyHere

如果您希望按时间顺序获取最接近的位置而不是指定半径中最突出的位置,请务必指定rankby=distance参数而不是radius参数。

我还在上面的请求中指定了一个types=food参数,只返回我的回复中的食物类型位置。可以找到其他受支持的类型here

要使用Google Places API Web Service,您需要按照here说明获取使用该服务的API密钥,此密钥需要与key=AddYourKeyHere下的请求一起发送参数。

如果您希望在JavaScript应用程序中使用此服务,请查看Places LibraryGoogle Maps API v3

答案 1 :(得分:2)

这是您可以实现的方式

LocationManager locationManager = (LocationManager) context
                    .getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new LocationListener() {
            @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onLocationChanged(Location location) {
            Double l1 = location.getLatitude();
            Double l2 = location.getLongitude();
            address = GetAddress(l1, l2);               
        }
    };
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);  

private String GetAddress(Double lat, Double lon) {
    Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
    String ret = "";
    List<Address> addresses = null;
    try {
        addresses = geocoder.getFromLocation(lat, lon, 1);
        if (!addresses.equals(null)) {
            Address returnedAddress = addresses.get(0);
            StringBuilder strReturnedAddress = new StringBuilder("\n");
            for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
                strReturnedAddress
                        .append(returnedAddress.getAddressLine(i)).append(
                                "\n");
            }
            ret = "Around: " + strReturnedAddress.toString();
        } else {
            ret = "No Address returned!";
        }
    } catch (IOException e) {
        e.printStackTrace();
        ret = "Location: https://maps.google.co.in/maps?hl=en&q=" + lat
                + "," + lon;
    } catch (NullPointerException e) {
        e.printStackTrace();
        ret = lat + "," + lon;
    }
    return ret;
}

并在AndroidManifest中添加这些权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

答案 2 :(得分:-1)

Google Places API

URL ::

https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AddYourOwnKeyHere

需要更改纬度,长度,半径,类型,名称和按键。

注意:: 需要注册开发者预览。