ionic-team / ionic-native-google-maps

Google maps plugin for Ionic Native
Other
221 stars 125 forks source link

Loading concurrent KML overlays does not work #362

Open ct-lh opened 3 years ago

ct-lh commented 3 years ago

I'm submitting a ... (check one with "x")

If you choose 'problem or bug report', please select OS: (check one with "x")

cordova information: (run $> cordova plugin list)

cordova-plugin-advanced-http 3.1.0 "Advanced HTTP plugin"
cordova-plugin-android-permissions 1.1.0 "Permissions"
cordova-plugin-app-version 0.1.12 "AppVersion"
cordova-plugin-bluetooth-serial 0.4.7 "Bluetooth Serial"
cordova-plugin-device 2.0.3 "Device"
cordova-plugin-file 6.0.2 "File"
cordova-plugin-filepath 1.5.8 "cordova-plugin-filepath"
cordova-plugin-fullscreen 1.3.0 "cordova-plugin-fullscreen"
cordova-plugin-geolocation 4.0.2 "Geolocation"
cordova-plugin-googlemaps 2.7.1 "cordova-plugin-googlemaps"
cordova-plugin-insomnia 4.3.0 "Insomnia (prevent screen sleep)"
cordova-plugin-ionic-webview 4.2.1 "cordova-plugin-ionic-webview"
cordova-plugin-network-information 2.0.2 "Network Information"
cordova-plugin-request-location-accuracy 2.3.0 "Request Location Accuracy"
cordova-plugin-screen-orientation 3.0.2 "Screen Orientation"
cordova-plugin-splashscreen 5.0.4 "Splashscreen"
cordova-plugin-statusbar 2.4.3 "StatusBar"
cordova-plugin-whitelist 1.3.4 "Whitelist"
cordova-plugin-wifiwizard2 3.1.1 "WifiWizard2"
es6-promise-plugin 4.1.0 "Promise"

If you use @ionic-native/google-maps, please tell the package.json (only @ionic-native/core and @ionic-native/google-maps are fine mostly)

"@ionic-native/core": "^5.29.0",
"@ionic-native/google-maps": "^5.5.0",

Current behavior: When you create a first KML overlay, everything is fine. However, once you create an additional KML overlay the following error is triggered:

Error: Uncaught (in promise): TypeError: Cannot redefine property: camera
TypeError: Cannot redefine property: camera
    at Function.defineProperty (<anonymous>)
    at new KmlOverlay (index.js:1863)
    at Map.<anonymous> (index.js:1598)
    at KmlLoader.<anonymous> (Map.js:1050)
    at BaseArrayClass.<anonymous> (KmlLoader.js:87)

From what I can see it seems like the problem is the following:

https://github.com/ionic-team/ionic-native-google-maps/blob/c0ff40e6fdf2bc156982899dde361352531db52d/src/%40ionic-native/plugins/google-maps/index.ts#L4918

The self variable does not seem to be defined here anywhere?

Expected behavior: Any concurrent KML overlays should be created without any problem just like the first one.

ct-lh commented 3 years ago

It seems like this is only working depending on which version of zone.js the project is using:

https://github.com/angular/angular/pull/37582

Before this, zone.js swallowed the expected error (since the property is being defined as non-configurable). With newer versions of zone.js, this error is being triggered as expected. A temporary fix for this would be to add this in your app before the map.addKmlOverlay() call:

Object.defineProperty(window.self, 'camera', {
    configurable: true,
});
Object.defineProperty(window.self, 'kmlData', {
    configurable: true,
});
gautamsinh commented 2 years ago

Hello I have same problem here KML is not visible any more, I tried above solution but not working for me