Android靠近地点及其扩展位置数据(电话,评级,营业时间......)

时间:2018-03-17 23:59:46

标签: android google-maps url android-asynctask

我正在编写一个Android应用,可以显示您所在位置附近的披萨店 为此,我使用URL调用谷歌地图: https://maps.googleapis.com/maps/api/place/nearbysearch/json?location= {纬度,经度}&安培;类型=比萨饼&安培;传感器=真安培;关键= {} MY_KEY

我通过扩展AsyncTask并使用方法doInBackground和onPostExecute来处理数据。

从我得到的数据和解析我得到地方ID,现在我想再次打电话谷歌获取地方信息电话,评级,是开放...(你没有从附近的地方得到这些数据信息)我看到你可以使用谷歌进行URL调用:  https://maps.googleapis.com/maps/api/place/details/json?key= {MY_KEY}&安培; placeid = {PLACE_ID}

但我不想在AsyncTask中调用AsyncTask。 基本上我想调用第一个URL,而解析每个地方获取扩展信息。

我该怎么做? 我的代码是:

public class MapGetNearbyPlacesData扩展了AsyncTask {

public final static int MAP_INDEX = 0;
public final static int URL_INDEX = 1;
private String googlePlacesData;
private GoogleMap map;
private String url;

@Override
protected String doInBackground(Object... objects) {
    this.map = (GoogleMap)objects[MAP_INDEX];
    this.url = (String)objects[URL_INDEX];

    try {
        this.googlePlacesData = MapDownloadURL.readUrl(this.url);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return this.googlePlacesData;
}

@Override
protected void onPostExecute(String s) {
    List<HashMap<String, String>> nearbyPlaceList;
    nearbyPlaceList = MapDataParser.parseNearbyPlaces(s);
    showNearbyPlaces(nearbyPlaceList);
}

private void showNearbyPlaces(List<HashMap<String, String>> nearbyPlaceList) {
    for(int i = 0; i < nearbyPlaceList.size(); i++) {
        MarkerOptions markerOptions = new MarkerOptions();
        HashMap<String, String> googlePlace = nearbyPlaceList.get(i);

        String placeName = googlePlace.get(StringUtils.MAP_PALACE_NAME);
        String vicinity = googlePlace.get(StringUtils.MAP_VICINITY);
        double lat = Double.parseDouble(googlePlace.get(StringUtils.MAP_LATITUDE));
        double lng = Double.parseDouble(googlePlace.get(StringUtils.MAP_LONGITUDE));
        String placeId = googlePlace.get(StringUtils.PLACE_ID);

       //how can I get the extended place info here?


        LatLng latLng = new LatLng(lat, lng);
        markerOptions.position(latLng);
        //build all necessary information to display in info window.
        String title = new StringBuilder()
                .append(placeName).append(StringUtils.infoWindowSplitter)
                .append(vicinity).append(StringUtils.infoWindowSplitter)
                .append(placeId).toString();

        markerOptions.title(title);
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
        this.map.addMarker(markerOptions);
    }
}

}

2 个答案:

答案 0 :(得分:4)

请参阅Google地方API:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location="+lat+","+lng+"&radius=10000&type=PlaceType&key=*************************

关键读取文档: https://cloud.google.com/maps-platform/places/

答案 1 :(得分:0)

我建议您使用Google Maps API Web Services的Java客户端库来执行AsyncTask中的Places API请求。

https://github.com/googlemaps/google-maps-services-java

使用此库,您可以执行附近的搜索,获取位置并循环遍历项目并执行场所详细信息以获得最完整的场所数据。

您可以通过Gradle

在项目中添加Java客户端库

nohup ksh file.b param1 param2 &

为了演示它是如何工作的,我创建了一个简单的例子。看看MapGetNearbyPlacesData类的实现。

dependencies {
    compile 'com.google.maps:google-maps-services:(insert latest version)'
    compile 'org.slf4j:slf4j-nop:1.7.25'
}

结果是

enter image description here

您还可以在GitHub找到完整的示例项目:

https://github.com/xomena-so/so49343164

请勿忘记使用您的API密钥替换API密钥。

我希望这有帮助!