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