我正在使用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();
答案 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;
}