ionic-team / ionic-native-google-maps

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

VisibleRegion.toUrlValue() return error #376

Open BentakApps opened 1 year ago

BentakApps commented 1 year 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-device 2.0.2 "Device"
cordova-plugin-googlemaps 2.7.1 "cordova-plugin-googlemaps"
cordova-plugin-ionic-keyboard 2.2.0 "cordova-plugin-ionic-keyboard"
cordova-plugin-ionic-webview 5.0.0 "cordova-plugin-ionic-webview"
cordova-plugin-splashscreen 6.0.2 "Splashscreen"
cordova-plugin-statusbar 2.4.2 "StatusBar"

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.36.0",
"@ionic-native/google-maps": "^5.5.0",

Current behavior:

This code:

    const map = GoogleMaps.create('map-canvas', {
      mapType: GoogleMapsMapTypeId.ROADMAP,
      camera: {
        target: {
          lat: -15.800739,
          lng: -47.861314
        },
        zoom: 15
      }
    });
    map.on(GoogleMapsEvent.MAP_READY).subscribe(()=>{
      console.log(map.getVisibleRegion().toUrlValue());
    });

produces this error:

ERROR TypeError: this.southwest.toUrlValue is not a function
    at LatLngBounds.toUrlValue (LatLngBounds.js:36:31)
    at SafeSubscriber._next (map.service.ts:131:42)

Expected behavior: Expected to get "[lat_sw,lng_sw,lat_ne,lng_ne]" on the terminal

Inspecting where the code fails:

 LatLngBounds.prototype.toUrlValue = function (precision) {
  precision = precision || 6;
  return '[' + this.southwest.toUrlValue(precision) + ',' + this.northeast.toUrlValue(precision) + ']';
};

It seems that the function expects that this.southwest and this.northeast are of type LatLng which implements toUrlValue().

Howerver, VisibleRegion class defines both as ILatLng which does not implement toUrlValue().

Workaround: convert VisibleRegion.southwest and VisibleRegion.northeast to LatLng

    const map = GoogleMaps.create('map-canvas', {
      mapType: GoogleMapsMapTypeId.ROADMAP,
      camera: {
        target: {
          lat: -15.800739,
          lng: -47.861314
        },
        zoom: 15
      }
    });
    map.on(GoogleMapsEvent.MAP_READY).subscribe(()=>{
      const visibleRegion = map.getVisibleRegion();
      //CONVERT SOUTHWEST AND NORTHEAST TO LATLNG
      const southwest = visibleRegion.southwest;
      const northeast = visibleRegion.northeast;
      visibleRegion.southwest = new LatLng(southwest.lat,southwest.lng);
      visibleRegion.northeast = new LatLng(northeast.lat,northeast.lng);
      console.log(visibleRegion.toUrlValue());
    });

Result:

[-15.812301,-47.869897,-15.789176,-47.852731]