使用langitutde,海拔高度和能耗消耗在Google地图上实施热图

时间:2017-01-23 12:01:11

标签: java android google-maps google-maps-android-api-2

我正在使用android studio在谷歌地图上创建热图。我有一个包含以下信息的数据库:

longitude   latitude    Electricity Energy Consumption 
1 -77.08527 38.7347905  4.742112594
2 -19.03592 34.8081915  4.742112594
3 -74.04591 12.8815925  5.278542493
4 -32.05547 25.9549935 12.270006486
5 -49.06596 76.0283945  4.742112594
6 -63.08492 20.1017955  4.742112594

有没有办法获取这些坐标和幅度,并使用谷歌地图绘制密度图?

我做了一些研究,谷歌api确实允许创建热图,但它只允许包含坐标的数据集。我如何反映某些地区的能源消耗?

这是指向您如何创建热图的网站链接:https://developers.google.com/maps/documentation/android-api/utility/heatmap

我只需要朝着正确的方向努力即可实现这一目标。

我认为可以使用以下方法,但我并不完全理解它,并希望有人可以解释如何使用它,如果可以使用它来实现我的特定场景:

这是网站上实现热图的代码,只考虑坐标:

   List<LatLng> list = null;

    // Get the data: latitude/longitude positions of police stations.
    try {
        list = readItems(R.raw.police_stations);
    } catch (JSONException e) {
        Toast.makeText(this, "Problem reading list of locations.", Toast.LENGTH_LONG).show();
    }

    // Create a heat map tile provider, passing it the latlngs of the police stations.
    mProvider = new HeatmapTileProvider.Builder()
        .data(list)
        .build();
    // Add a tile overlay to the map, using the heat map tile provider.
    mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
}

private ArrayList<LatLng> readItems(int resource) throws JSONException {
    ArrayList<LatLng> list = new ArrayList<LatLng>();
    InputStream inputStream = getResources().openRawResource(resource);
    String json = new Scanner(inputStream).useDelimiter("\\A").next();
    JSONArray array = new JSONArray(json);
    for (int i = 0; i < array.length(); i++) {
        JSONObject object = array.getJSONObject(i);
        double lat = object.getDouble("lat");
        double lng = object.getDouble("lng");
        list.add(new LatLng(lat, lng));
    }
    return list;
}

这是网站中用于更改数据集的代码:

ArrayList<WeightedLatLng> data = new ArrayList<WeightedLatLng>();
  mProvider.setData(data);
  mOverlay.clearTileCache();

1 个答案:

答案 0 :(得分:0)

您可以使用WeightedLatLng

代替LatLng

您的代码应如下所示:

List<WeightedLatLng> list = null;

// Get the data: latitude/longitude positions of police stations.
    try {
        list = readItems(R.raw.police_stations);
    } catch (JSONException e) {
        Toast.makeText(this, "Problem reading list of locations.", Toast.LENGTH_LONG).show();
    }

    // Create a heat map tile provider, passing it the latlngs of the police stations.
    mProvider = new HeatmapTileProvider.Builder()
        .weightedData(list)
        .build();
    // Add a tile overlay to the map, using the heat map tile provider.
    mOverlay = mMap.addTileOverlay(new   

    TileOverlayOptions().tileProvider(mProvider));
}

private List<WeightedLatLng> readItems(int resource) throws JSONException {
    List<WeightedLatLng> list = new ArrayList<WeightedLatLng>();
    InputStream inputStream = getResources().openRawResource(resource);
    String json = new Scanner(inputStream).useDelimiter("\\A").next();
    JSONArray array = new JSONArray(json);
    for (int i = 0; i < array.length(); i++) {
        JSONObject object = array.getJSONObject(i);
        double lat = object.getDouble("lat");
        double lng = object.getDouble("lng");
        double magnitude = object.getDouble("mag"
        list.add(new WeightedLatLng(lat, lng, magnitude));
    }
    return list;
}