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