Arrays 离子4中的推进阵列

Arrays 离子4中的推进阵列,arrays,angular,google-maps,ionic4,Arrays,Angular,Google Maps,Ionic4,我有一个Ionic应用程序,我正在尝试从数据api中获取飞行路线的纬度和经度,作为Json格式。数据包含数组。我想把数组推到谷歌地图polyline中,以获取地图上的飞行路线,但运行应用程序时出错 我的完整代码: 导出类主页{ 地图:谷歌地图; 纬度:任意; 经度:任意; 建造师( 公共toastCtrl:ToastController, 私有平台:平台, 专用http:http ) { } 恩戈尼尼特(){ //由于ngOnInit()是在`deviceready`事件之前执行的, //你必须

我有一个Ionic应用程序,我正在尝试从数据api中获取飞行路线的纬度和经度,作为Json格式。数据包含数组。我想把数组推到谷歌地图
polylin
e中,以获取地图上的飞行路线,但运行应用程序时出错

我的完整代码:

导出类主页{
地图:谷歌地图;
纬度:任意;
经度:任意;
建造师(
公共toastCtrl:ToastController,
私有平台:平台,
专用http:http
) { }
恩戈尼尼特(){
//由于ngOnInit()是在`deviceready`事件之前执行的,
//你必须等待事件。
这个.platform.ready();
这个.getmarker();
}
getmarker(){
this.http.get('xxxxxxx/v1/flight.json?flightId=201',{},{})
。然后(数据=>{
this.latitude=JSON.parse(data.data).result.response.data.flight.track.latitude
this.longide=JSON.parse(data.data).result.response.data.flight.track.longide
log(这个纬度,这个经度)
this.loadMap()
})
}
loadMap(){
设HND_AIR_PORT=此纬度;
让SFO\u AIR\u PORT=此经度
让空气_端口=[
HND_航空港,
SFO_航空港
];
this.map=GoogleMaps.create('map_canvas');
让polyline:polyline=this.map.addPolylineSync({
要点:航空港,
颜色:“#AA00FF”,
宽度:10,
测地线:正确,
clickable:true//clickable=false默认值
});
polyline.on(GoogleMapsEvent.polyline_单击)。订阅((参数:any)=>{
let位置:LatLng=params[0];
让marker:marker=this.map.addMarkerSync({
职位:职位,,
标题:position.toUrlValue(),
真的吗
});
marker.showInfoWindow();
});
}
}
我得到的错误是:

ERROR Error: Uncaught (in promise): TypeError: Cannot use 'in' operator to search for 'getPosition' in undefined
TypeError: Cannot use 'in' operator to search for 'getPosition' in undefined
    at getLatLng (plugins/cordova-plugin-googlemaps/www/Common.js:544)
    at Array.map (<anonymous>)
    at Object.convertToPositionArray (plugins/cordova-plugin-googlemaps/www/Common.js:575)
    at Map.addPolyline (plugins/cordova-plugin-googlemaps/www/Map.js:1231)
    at vendor.js:76340
    at GoogleMap.push../node_modules/@ionic-native/google-maps/index.js.GoogleMap.addPolylineSync (vendor.js:76352)
    at HomePage.push../src/app/home/home.page.ts.HomePage.loadMap (home-home-module.js:126)
    at home-home-module.js:114
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (polyfills.js:2749)
    at Object.onInvoke (vendor.js:51123)
    at resolvePromise (polyfills.js:3189)
    at polyfills.js:3254
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (polyfills.js:2781)
    at Object.onInvokeTask (vendor.js:51114)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (polyfills.js:2780)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (polyfills.js:2553)
    at drainMicroTaskQueue (polyfills.js:2959)
ERROR ERROR:Uncaught(in promise):TypeError:无法使用'in'运算符在未定义的中搜索'getPosition'
TypeError:无法使用“in”运算符在未定义的中搜索“getPosition”
在getLatLng(plugins/cordova plugin谷歌地图/www/Common.js:544)
在Array.map()处
在Object.convertToPositionArray(plugins/cordova plugin googlemaps/www/Common.js:575)
在Map.addPolyline(plugins/cordova-plugin-googlemaps/www/Map.js:1231)
在vendor.js:76340
在GoogleMap.push../node_modules/@ionic native/google maps/index.js.GoogleMap.addPolylineSync(vendor.js:76352)
在HomePage.push../src/app/home/home.page.ts.HomePage.loadMap(home-home-module.js:126)
在家模块。js:114
在ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke(polyfills.js:2749)
位于Object.onInvoke(vendor.js:51123)
在resolvePromise(polyfills.js:3189)
地址:polyfills.js:3254
在ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask(polyfills.js:2781)
在Object.onInvokeTask(vendor.js:51114)
在ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask(polyfills.js:2780)
在Zone.push../node_modules/Zone.js/dist/Zone.js.Zone.runTask(polyfills.js:2553)
位于drainMicroTaskQueue(polyfills.js:2959)

有什么想法吗?

我描述了如何通过以下步骤获得答案:

步骤1:了解发生了什么 关于错误日志的类型,错误发生在此处

函数getLatLng(目标){
在target?target.getPosition()中返回“getPosition”:{
“lat”:parseFloat(target.lat,10),
“液化天然气”:parseFloat(target.lng,10)
};
}

错误表示插件代码试图检查“getPosition”中是否有未定义的内容。 这意味着变量
target
未定义

此时,我们可以得到错误的原因是
您指定的值不正确

步骤2:从日志中查找其他提示 让我们找出
代码中的bug。
检查错误日志时,您也会注意到此错误日志

at GoogleMap.push../node_modules/@ionic-native/google-maps/index.js.GoogleMap.addPolylineSync (vendor.js:76352)
似乎错误发生在下面的代码中

let polyline:polyline=this.map.addPolylineSync({
要点:航空港,
颜色:“#AA00FF”,
宽度:10,
测地线:正确,
clickable:true//clickable=false默认值
});
插件试图获取
lat
lng
,但您指定了变量
AIR\u port

let HND_AIR_PORT = this.latitude;
let SFO_AIR_PORT = this.longitude

let AIR_PORTS = [
  HND_AIR_PORT,
  SFO_AIR_PORT
];
第三步:找出你的错误 让我们检查变量
AIR\u port

let HND_AIR_PORT = this.latitude;
let SFO_AIR_PORT = this.longitude

let AIR_PORTS = [
  HND_AIR_PORT,
  SFO_AIR_PORT
];
如果您熟悉GoogleMapsAPI,您可能会注意到问题所在。 提问者为HND\U机场指定了
纬度
,为SFO\U机场指定了
经度

xxx\u AIR\u PORT
表示一个位置。 这意味着变量应该与
纬度
经度
成对

因此,至少变量的形式应如下所示:

let HND_AIR_PORT = {
  lat: ...,
  lng: ...
};
此时,我们已经找出了代码中的错误所在

第四步:在谷歌上搜索答案 好的,让我们搜索正确的答案。 关键字是
addPolylineSync
。 在谷歌上搜索,你会找到这个代码和演示

代码

演示

在演示代码中,您可以看到答案

let HND_AIR_PORT = {lat: 35.548852, lng: 139.784086};
let SFO_AIR_PORT = {lat: 37.615223, lng: -122.389979};
let HNL_AIR_PORT = {lat: 21.324513, lng: -157.925074};


let AIR_PORTS = [
  HND_AIR_PORT,
  HNL_AIR_PORT,
  SFO_AIR_PORT
];

结论 我教如何处理未知错误,而不仅仅是回答

当您遇到下一个错误时

  • 检查错误日志
  • 检查代码(如果可能)
  • 理解代码想要做什么
  • 首先搜索代码中的bug
  • 阅读文档
  • 即使按照上述步骤,你也无法解决问题,问问别人吧 顺便说一下,
    cordova插件googlemaps
    @ionic native/googlemaps
    的代码都是完全开放的。
    根本没有隐藏代码;)

    谢谢你的回答。我真的很感激