Arrays 角度:使用http仅传递新数据数组

Arrays 角度:使用http仅传递新数据数组,arrays,angular,leaflet,polyline,Arrays,Angular,Leaflet,Polyline,我正在尝试使用传单地图API开发一个航班跟踪器。每当有飞机的任何新坐标点位置时,我在地图上显示为多段线路径,最后一个点和第一个点之间有“连接”,因为直线与飞行路径的现有原始多段线重叠,这是由于使用间隔函数检查新坐标点位置。每次调用AddPAth方法传递“坐标点”时,我只需向其传递新点。否则,当直线与现有的原始多段线重叠时,我将在最后一点和第一点之间建立“连接”。所以我的问题是,在地图上初始化数据json坐标然后只传递新数据以避免最后一点和第一点之间的“连接”的最佳方式是什么 我的代码 expor

我正在尝试使用传单地图API开发一个航班跟踪器。每当有飞机的任何新坐标点位置时,我在地图上显示为多段线路径,最后一个点和第一个点之间有“连接”,因为直线与飞行路径的现有原始多段线重叠,这是由于使用间隔函数检查新坐标点位置。每次调用
AddPAth
方法传递“坐标点”时,我只需向其传递新点。否则,当直线与现有的原始多段线重叠时,我将在最后一点和第一点之间建立“连接”。所以我的问题是,在地图上初始化数据json坐标然后只传递新数据以避免最后一点和第一点之间的“连接”的最佳方式是什么

我的代码

export class MapTrackBeforPage implements OnInit {
    map: Map;
    poly:L.Polyline


    constructor(
        private http: HTTP,
       public zone : NgZone) {

    }


    ionViewDidEnter() {
        this.getmarker().then(() => {
            this.zone.runOutsideAngular(() => {
                interval(15000).subscribe(() => {
                  ---- Reload DATA
                    this.getmarker()
                })
            })
        })

        // In setView add latLng and zoom
        this.map = new Map('Map_id', { attributionControl: false }).setView([33, 44], 6);
        this.sourceFlightPath.addTo(this.map)
        return tileLayer('https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey=', {
        }).addTo(this.map);
    }

    ---- GETTING DATA --------
    async getmarker() {
        this.http.get('xxxxxxxxxxxxxxxxx', {}, {})
            .then(data => {

                let getdata = JSON.parse(data.data)

               --------Pass Data -----
                this.AddPath(getdata)

            })
    }

------ PATH OF AIRCRAFT -----
    AddPath(path) {
        // Flight path

        for (let datas of path['trail']) {

         new L.Polyline([datas.lat,datas.lng], { color: 'red', weight: 3 }).addTo(this.map);

        }
    }
短数据json

{
  "trail": [
    {
      "lat": 28.859594,
      "lng": 44.736115
    },
    {
      "lat": 28.852707,
      "lng": 44.76506
    }
  ]
}

使用RXJSdistinct运算符,下面是一个示例:

import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';

of(1, 1, 2).pipe(
  distinct(),
)
.subscribe(x => console.log(x)); // it gives you 1, 2
如果需要,可以使用start with operatorstartWith,因此在您的情况下可以是这样的:

this.http.get('xxxxxxxxxxxxxxxxx', {}, {})
        .pipe(
           startWith(your_initial_value),
           map(data => data.data),
           distinct()
         )
        .subscribe(data => {
            this.AddPath(getdata)
        })

如果您使用的是ionic的http插件,那么您可以从promise创建一个可观察的

observable$ = from(this._http.get(this.forecastUrl, {}, {}));

您可以在这里找到更多示例

我应该在哪里使用?在
AddPath
getmarker
中,问题是我不能使用RXJS和distinct运算符,因为我使用的是http插件,该插件不接受管道和订阅,然后,catch,最后,考虑到这是一个Angular应用程序,RxJs也与之打包在一起,这种情况是不可能的。你可以使用operatornoo从承诺中创建一个observable。你可以使用RxJs,npm安装RxJs,它与Angular无关