2017-01-23 1 views
0

Ich benutze Android Studio, um eine Heatmap auf Google Maps zu erstellen. Ich habe aus einer Datenbank mit den folgenden Informationen:Implementierung Heat Map auf Google Maps mit einer Kombination aus Sprache, Höhe und Energieverbrauch

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 

Gibt es eine Möglichkeit, diese Koordinaten und Größe zu nehmen und eine Dichtekarte mit Google Maps plotten?

Ich habe ein bisschen Forschung gemacht, und die Google API ermöglicht zwar die Erstellung der Heatmap, aber es erlaubt nur einen Datensatz mit Koordinaten. Wie würde ich den Energieverbrauch in bestimmten Bereichen widerspiegeln?

Dies ist der Link zu der Website, die Sie sagt, wie man eine Heatmap erstellen: https://developers.google.com/maps/documentation/android-api/utility/heatmap

ich nur einen Schub in der richtigen Richtung muß dies umsetzen zu können.

Es gibt die folgende Methode, die ich dachte, ich könnte, aber ich den Ball hielt ganz verstehen und habe gehofft, vielleicht jemand erklären könnte, wie es zu benutzen, und wenn sie möglich, dies zu verwenden, um mein spezielles Szenario zu implementieren:

Dies ist der Code von der Website der Heatmap zu implementieren, die nur zu berücksichtigen, die Koordinaten:

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; 
} 

Dies ist der Code von der Website des Datensatzes zu ändern:

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

Antwort

0

Anstelle von LatLng können Sie WeightedLatLng verwenden.

Sie Code sollte wie folgt aussehen:

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; 
}