Слой Heatmap не отображается в пользовательском массиве - PullRequest
1 голос
/ 13 апреля 2019

В настоящее время я работаю над университетским проектом, который показывает тепловую карту, основанную на данных о загрязнении, собранных через Arduino.Для этого необходимо выполнить следующие действия:

  • Отправка данных из Arduino на телефон, который добавляет каждую запись в коллекцию пожарного депо.'data'
  • Второй шаг - взвешивание данных в масштабе 1-10 и возврат данных обратно в отдельный сбор, называемый 'weighttage'
  • . Третий шаг - получение данных с этогосбор и отображение его на карте Google в слое тепловой карты.Для этого я использовал JavaScript API. (Ionic native не имел библиотеки визуализации)

Проблема с третьим шагом.Первоначально, когда я ждал от другого партнера по команде взвешивания данных, я настроил начальный API карты и простой пример слоя тепловой карты с тремя предопределенными точками функционально.

Намеченный результат - это FAB, который позволяет намвыбрать разные загрязняющие вещества и отобразить разные слои тепловой картыКак только взвешивание было выполнено, я вообще не смог отобразить какие-либо отформатированные данные.

Я - любитель в угловых и ионных режимах, и мне удалось пройти только через уроки, и я совершенно ошеломлен.Буду признателен за любую помощь

В настоящее время я пытаюсь создать новый массив с местоположением и весом.Первоначальные попытки не увенчались успехом и породили много исключений, так как это был обычный массив, а другой пост, который я видел здесь, преобразовал обычный в MVCArray.Как только я использовал массив MVC, я избавился от ошибок, но тепловая карта отказалась загружать любые новые значения, вставленные в массив.до сих пор у меня есть 108 объектов в коллекции и массив MVC, но мой исходный предопределенный массив - единственные точки, которые отображаются на карте.

import { Injectable, ElementRef, ViewChild } from '@angular/core';
import { AngularFirestoreCollection, AngularFirestore } from '@angular/fire/firestore';
import { Dataline } from 'src/app/dataline';


declare var google;
@Injectable({
  providedIn: 'root'
})

export class JSService {
  @ViewChild('map') mapElement: ElementRef;
  options;
  map:any;
  collection:AngularFirestoreCollection;
  data;

  heatmapdata: [];




  constructor(public afs:AngularFirestore) {
    setTimeout(() => {
      this.collection = this.afs.collection<Dataline>('weightage');
      this.data = this.collection.snapshotChanges();
    }, 3000);

    setTimeout(() => {

  }, 3000);

  }
    // we need the data to be populated here using some magick
    // in a JSON format that looks like location: x , weight: x
    // do some magick to make it fit into a nice array and then the
    // result we will plop into the heatmap



 heatmapCO(location,element){
    let latLng= new google.maps.LatLng(location.latitude, location.longitude);

    let mapOptions = {
      center: latLng,
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      mapTypeControl: false,
      streetViewControl: false,
      fullscreenControl: false
    };
    this.map = new google.maps.Map(element.nativeElement, mapOptions);

    var heatmap = new google.maps.visualization.HeatmapLayer({
      data: this.pointArray,
      dissipating: true,
      maxIntensity: 10,
      radius: 20,
      opacity: 1.0,
      map: this.map
    });
   } 

  heatmapCO2(){

    this.data.subscribe((value)=>{
      let newlatlng = new google.maps.LatLng(value.lon,value.lat);
      let newweight = value.co;
      this.heatmapdata.push({location: newlatlng ,weight: newweight});
    });
    this.map = new google.maps.Map(this.globalelem.nativeElement, this.options);
    var heatmap = new google.maps.visualization.HeatmapLayer({
      data: this.heatmapdata,
      dissipating: true,
      maxIntensity: 10,
      radius: 15,
      opacity: 1.0,
      map: this.map
    });

  }
  heatmapNH4(){

    this.data.subscribe((value)=>{
      let newlatlng = new google.maps.LatLng(value.lon,value.lat);
      let newweight = value.co;
      this.heatmapdata.push({location: newlatlng ,weight: newweight});
    });
    this.map = new google.maps.Map(this.globalelem.nativeElement, this.options);
    var heatmap = new google.maps.visualization.HeatmapLayer({
      data: this.heatmapdata,
      dissipating: true,
      maxIntensity: 10,
      radius: 15,
      opacity: 1.0,
      map: this.map
    });
  }
  heatmapEth(){

    this.data.subscribe((value)=>{
      let newlatlng = new google.maps.LatLng(value.lon,value.lat);
      let newweight = value.co;
      this.heatmapdata.push({location: newlatlng ,weight: newweight});
    });
    this.map = new google.maps.Map(this.globalelem.nativeElement, this.options);
    var heatmap = new google.maps.visualization.HeatmapLayer({
      data: this.heatmapdata,
      dissipating: true,
      maxIntensity: 10,
      radius: 15,
      opacity: 1.0,
      map: this.map
    });
  }
  heatmapAce(){

    this.data.subscribe((value)=>{
      let newlatlng = new google.maps.LatLng(value.lon,value.lat);
      let newweight = value.co;
      this.heatmapdata.push({location: newlatlng ,weight: newweight});
    });
    this.map = new google.maps.Map(this.globalelem.nativeElement, this.options);
    var heatmap = new google.maps.visualization.HeatmapLayer({
      data: this.heatmapdata,
      dissipating: true,
      maxIntensity: 10,
      radius: 15,
      opacity: 1.0,
      map: this.map
    });

  }
  heatmapTol(){

    this.data.subscribe((value)=>{
      console.log(value);
      let newlatlng = new google.maps.LatLng(value.lon,value.lat);
      let newweight = value.co;
      this.heatmapdata.push({location: newlatlng ,weight: newweight});
    });
    this.map = new google.maps.Map(this.globalelem.nativeElement, this.options);
    var heatmap = new google.maps.visualization.HeatmapLayer({
      data: this.heatmapdata,
      dissipating: true,
      maxIntensity: 10,
      radius: 15,
      opacity: 1.0,
      map: this.map
    });
  }

init(location,element){

    let latLng= new google.maps.LatLng(location.latitude, location.longitude);

    let mapOptions = {
      center: latLng,
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      mapTypeControl: false,
      streetViewControl: false,
      fullscreenControl: false
    };

    var heatMapData = [
      {location: new google.maps.LatLng(25.307711, 55.485403), weight: 6},
      {location: new google.maps.LatLng(25.311251, 55.485886), weight: 5}      
    ]; //format of weighted heatmap data (currently showing 3 points on the road outside uni)

    console.log(heatMapData); 

    let pointArray = new google.maps.MVCArray(heatMapData);

    this.data.subscribe((value)=>{ // pulling data from firestore and inserting into an MVC array
      for(let x of value){
        pointArray.push({location: new google.maps.LatLng(Number(x.payload.doc.data().lon),Number(x.payload.doc.data().lat)), weight: x.payload.doc.data().co});
      }
      console.log(pointArray);
    });

    this.map = new google.maps.Map(element.nativeElement, mapOptions);

    var heatmap = new google.maps.visualization.HeatmapLayer({
      dissipating: true,
      maxIntensity: 10,
      radius: 15,
      opacity: 1.0,
      map: this.map
    });

    heatmap.setData(heatMapData);
    console.log("reached after mapload");  
    //  heatmap.setMap(this.map);  // This defines the heatmap we see, if dissipating is set false and radius is low, we see nothing. bump radius up and you'll start seeing the circles
  }
}

Я использую ионный 4.12.0, узел 11.12.0, угловой 7.2.2.Используемые плагины: Geolocation, angularfire, chart.js, googlemaps js api

Пожалуйста, игнорируйте синтаксические ошибки в функциях, так как они все еще находятся в процессе разработки, и я пытаюсь подготовить базовую функциональность, а затем перейти к реализации этой функциональности.внутри каждой из функций.

  • Ключевой функцией является init ()

https://github.com/FGButterLettuce/stackoverflowAPM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...