@inlog/inlog-maps 5.0.3 → 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DOCUMENTATION.md +1796 -1796
- package/_bundles/inlog-maps.js +38 -6
- package/_bundles/inlog-maps.js.map +1 -1
- package/_bundles/inlog-maps.min.js +1 -1
- package/_bundles/inlog-maps.min.js.map +1 -1
- package/lib/models/apis/google/google-polylines.d.ts +1 -0
- package/lib/models/apis/google/google-polylines.js +18 -4
- package/lib/models/apis/google/google-polylines.js.map +1 -1
- package/lib/models/apis/leaflet/leaflet-polylines.d.ts +1 -0
- package/lib/models/apis/leaflet/leaflet-polylines.js +19 -2
- package/lib/models/apis/leaflet/leaflet-polylines.js.map +1 -1
- package/lib/models/dto/event-type.d.ts +2 -1
- package/lib/models/dto/event-type.js +1 -0
- package/lib/models/dto/event-type.js.map +1 -1
- package/lib-esm/models/apis/google/google-polylines.d.ts +1 -0
- package/lib-esm/models/apis/google/google-polylines.js +18 -4
- package/lib-esm/models/apis/google/google-polylines.js.map +1 -1
- package/lib-esm/models/apis/leaflet/leaflet-polylines.d.ts +1 -0
- package/lib-esm/models/apis/leaflet/leaflet-polylines.js +19 -2
- package/lib-esm/models/apis/leaflet/leaflet-polylines.js.map +1 -1
- package/lib-esm/models/dto/event-type.d.ts +2 -1
- package/lib-esm/models/dto/event-type.js +1 -0
- package/lib-esm/models/dto/event-type.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 0775c726c0583dea30a0","webpack:///./src/models/features/events/event-return.ts","webpack:///./src/models/dto/event-type.ts","webpack:///./src/models/dto/map-type.ts","webpack:///./src/models/dto/polyline-type.ts","webpack:///./src/models/features/marker-clusterer/marker-clusterer-config.ts","webpack:///./src/models/features/polyline/polyline-options.ts","webpack:///./src/utils/maps-api-loader.service.ts","webpack:///./src/index.ts","webpack:///./~/@google/markerclustererplus/src/markerclusterer.js","webpack:///./src/map.ts","webpack:///./src/models/apis/googleMaps.ts","webpack:///./src/models/apis/google/google-circles.ts","webpack:///./src/models/apis/google/google-geojson.ts","webpack:///./src/models/apis/google/google-map.ts","webpack:///./src/models/apis/google/google-markers.ts","webpack:///./src/models/apis/google/google-overlay.ts","webpack:///./src/models/apis/google/google-polygons.ts","webpack:///./src/models/apis/google/google-polylines.ts","webpack:///./src/models/apis/google/google-popup.ts","webpack:///./src/models/apis/leaflet.ts","webpack:///./src/models/apis/leaflet/leaflet-circle.ts","webpack:///./src/models/apis/leaflet/leaflet-geojson.ts","webpack:///./src/models/apis/leaflet/leaflet-map.ts","webpack:///./src/models/apis/leaflet/leaflet-markers.ts","webpack:///./src/models/apis/leaflet/leaflet-overlay.ts","webpack:///./src/models/apis/leaflet/leaflet-polygons.ts","webpack:///./src/models/apis/leaflet/leaflet-polylines.ts","webpack:///./src/models/apis/leaflet/leaflet-popup.ts","webpack:///./src/models/features/circle/circle-alter-options.ts","webpack:///./src/models/features/circle/circle-options.ts","webpack:///./src/models/features/geojson/geojson-options.ts","webpack:///./src/models/features/marker/circle-marker-options.ts","webpack:///./src/models/features/marker/circle-marker-style.ts","webpack:///./src/models/features/marker/marker-alter-options.ts","webpack:///./src/models/features/marker/marker-icon.ts","webpack:///./src/models/features/marker/marker-options.ts","webpack:///./src/models/features/overlay/overlay-options.ts","webpack:///./src/models/features/polygons/polygon-alter-options.ts","webpack:///./src/models/features/polygons/polygon-options.ts","webpack:///./src/models/features/polyline/navigations-options.ts","webpack:///./src/models/features/popup/popup-options.ts","webpack:///./src/utils/url-builder.ts"],"names":[],"mappings":"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AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM,uBAAuB,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,yBAAyB;AACzB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,2EAA2E;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,wBAAwB,yBAAyB;AACnH;AACA,2CAA2C,gCAAgC;AAC3E,KAAK;AACL;AACA,2EAA2E;AAC3E;AACA;AACA;AACA,4BAA4B;AAC5B,4CAA4C;AAC5C,6CAA6C;AAC7C,wCAAwC;AACxC,6CAA6C;AAC7C,+CAA+C;AAC/C,+CAA+C;AAC/C,6CAA6C;AAC7C,uDAAuD;AACvD,4BAA4B;AAC5B,sCAAsC;AACtC,4CAA4C;AAC5C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,YAAY,OAAO;AACnB;AACA;AACA;AACA,8BAA8B;AAC9B,iCAAiC,sBAAsB,uBAAuB;AAC9E,2CAA2C,gCAAgC;AAC3E,wCAAwC;AACxC,uCAAuC;AACvC,qCAAqC;AACrC,mCAAmC;AACnC,gCAAgC;AAChC;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,eAAe,YAAY;AAC3B;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,SAAS,sBAAsB;AAC/B,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA,cAAc,QAAQ;AACtB;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA,cAAc,OAAO;AACrB;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA,KAAK,sBAAsB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,MAAM,uBAAuB,uBAAuB;AAClE;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,wDAAwD;AACxD;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B;AAChG;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,2BAA2B;AACtC,WAAW,uBAAuB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,mBAAmB;AACnB;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;;AAEA;AACA,aAAa,4BAA4B;AACzC;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,aAAa,oBAAoB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,YAAY,OAAO;AACnB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,yBAAyB;AACpC,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA,uBAAuB;AACvB;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA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","file":"inlog-maps.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"InlogMaps\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"InlogMaps\"] = factory();\n\telse\n\t\troot[\"InlogMaps\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 42);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0775c726c0583dea30a0","export default class EventReturn {\r\n public latlng: number[];\r\n\r\n constructor(latlng: number[]) {\r\n this.latlng = latlng;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/events/event-return.ts","export enum MapEventType {\r\n Click,\r\n ZoomChanged\r\n}\r\n\r\nexport enum MarkerEventType {\r\n Click,\r\n RightClick,\r\n AfterDrag,\r\n MouseOver,\r\n MouseOut,\r\n BeforeDrag\r\n}\r\n\r\nexport enum CircleEventType {\r\n Click,\r\n CenterChanged,\r\n RadiusChanged\r\n}\r\n\r\nexport enum PolygonEventType {\r\n SetAt,\r\n InsertAt,\r\n RemoveAt,\r\n DragPolygon,\r\n Click\r\n}\r\n\r\nexport enum PolylineEventType {\r\n SetAt,\r\n InsertAt,\r\n RemoveAt,\r\n DragPolyline,\r\n MouseOver,\r\n MouseOut\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/dto/event-type.ts","export enum MapType {\r\n Google,\r\n Leaflet\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/dto/map-type.ts","export enum PolylineType {\r\n Dashed,\r\n Dotted,\r\n Arrow\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/dto/polyline-type.ts","export default class MarkerClustererConfig {\r\n public clusterZoomOnClick: boolean;\r\n public clusterMinSize: number;\r\n public clusterMaxZoom: number;\r\n\r\n constructor(clusterZoomOnClick: boolean, clusterMinSize: number, clusterMaxZoom: number) {\r\n this.clusterZoomOnClick = clusterZoomOnClick;\r\n this.clusterMinSize = clusterMinSize;\r\n this.clusterMaxZoom = clusterMaxZoom;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker-clusterer/marker-clusterer-config.ts","import NavigationOptions from './navigations-options';\r\nimport { PolylineType } from '../../dto/polyline-type';\r\n\r\nexport default class PolylineOptions {\r\n public path: number[][];\r\n public addToMap?: boolean;\r\n public fitBounds?: boolean;\r\n public editable?: boolean;\r\n public draggable?: boolean;\r\n public color?: string;\r\n public weight: number;\r\n public object?: object;\r\n public infowindows?: string[];\r\n public style?: PolylineType;\r\n public navigateOptions?: NavigationOptions;\r\n public opacity: number;\r\n public zIndex: number;\r\n\r\n constructor(path?: number[][], addToMap?: boolean, fitBounds?: boolean,\r\n editable?: boolean, draggable?: boolean, color?: string, weight?: number,\r\n object?: object, infowindows?: string[], navigateOptions?: NavigationOptions, style?: PolylineType,\r\n opacity?: number, zIndex?: number) {\r\n\r\n this.path = path;\r\n this.addToMap = addToMap;\r\n this.fitBounds = fitBounds;\r\n this.editable = editable;\r\n this.draggable = draggable;\r\n this.color = color;\r\n this.weight = weight;\r\n this.object = object;\r\n this.infowindows = infowindows;\r\n this.navigateOptions = navigateOptions;\r\n this.style = style;\r\n this.opacity = opacity;\r\n this.zIndex = zIndex;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polyline/polyline-options.ts","import { MapType } from '../models/dto/map-type';\r\nimport { urlBuilder } from './url-builder';\r\n\r\nexport class MapsApiLoaderService {\r\n public static loadGoogleAPI(params) {\r\n const script = document.createElement('script');\r\n\r\n script.type = 'text/javascript';\r\n script.setAttribute('data-google-inlogmaps', 'true');\r\n\r\n script.src = urlBuilder({\r\n apiKey: params.apiKey,\r\n base: 'https://maps.googleapis.com/maps/api/js',\r\n callback: 'mapsAPILoadCallback',\r\n client: params.client,\r\n language: params.language,\r\n libraries: params.libraries || []\r\n });\r\n\r\n var has_script = document.querySelector('script').hasAttribute('data-google-inlogmaps');\r\n\r\n if (!has_script) document.querySelector('head').appendChild(script);\r\n }\r\n\r\n public static loadLeafletAPI(params) {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = 'https://desenvolvimentoweb.blob.core.windows.net/inlog-leaflet/leaflet.css';\r\n // link.integrity = params.cssIntegrity;\r\n // link.setAttribute('crossorigin', params.crossorigin);\r\n\r\n document.querySelector('head').appendChild(link);\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n\r\n script.src = urlBuilder({\r\n base: 'https://desenvolvimentoweb.blob.core.windows.net/inlog-leaflet/leaflet.js',\r\n callback: 'mapsAPILoadCallback',\r\n // crossorigin: params.crossorigin,\r\n // integrity: params.integrity\r\n });\r\n\r\n document.querySelector('head').appendChild(script);\r\n }\r\n\r\n private static windowRef = null;\r\n private static mapsApi = null;\r\n\r\n constructor() { /* */ }\r\n\r\n // TODO: needs refactoring\r\n public loadApi(mapType: MapType, params) {\r\n if (MapsApiLoaderService.mapsApi) {\r\n return Promise.resolve(MapsApiLoaderService.mapsApi);\r\n }\r\n\r\n MapsApiLoaderService.windowRef = window ? window : { api: null, mapsAPILoadCallback: null };\r\n\r\n const deferred = (resolve, reject) => {\r\n if (mapType === MapType.Google) {\r\n MapsApiLoaderService.loadGoogleAPI(params);\r\n } else {\r\n MapsApiLoaderService.loadLeafletAPI(params);\r\n }\r\n\r\n // Temporaria para testar Leaflet\r\n if (mapType === MapType.Leaflet) {\r\n setTimeout(() => {\r\n MapsApiLoaderService.mapsApi = MapsApiLoaderService.windowRef.L;\r\n resolve(MapsApiLoaderService.mapsApi);\r\n }, 2000);\r\n } else {\r\n MapsApiLoaderService.windowRef.mapsAPILoadCallback = () => {\r\n MapsApiLoaderService.mapsApi = MapsApiLoaderService.windowRef.google;\r\n resolve(MapsApiLoaderService.mapsApi);\r\n };\r\n }\r\n\r\n setTimeout(() => {\r\n if (!MapsApiLoaderService.windowRef.api) {\r\n reject(new Error('Loading took too long'));\r\n }\r\n }, 5000);\r\n };\r\n\r\n return new Promise(deferred);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/maps-api-loader.service.ts","'use strict';\r\n\r\nimport Map from './map';\r\nimport IMapFunctions from './models/apis/mapFunctions';\r\nimport CircleAlterOptions from './models/features/circle/circle-alter-options';\r\nimport CircleOptions from './models/features/circle/circle-options';\r\nimport EventReturn from './models/features/events/event-return';\r\nimport GeoJsonOptions from './models/features/geojson/geojson-options';\r\nimport CircleMarkerOptions from './models/features/marker/circle-marker-options';\r\nimport CircleMarkerStyle from './models/features/marker/circle-marker-style';\r\nimport MarkerAlterOptions from './models/features/marker/marker-alter-options';\r\nimport MarkerIcon from './models/features/marker/marker-icon';\r\nimport MarkerOptions from './models/features/marker/marker-options';\r\nimport OverlayOptions from './models/features/overlay/overlay-options';\r\nimport PolygonAlterOptions from './models/features/polygons/polygon-alter-options';\r\nimport PolygonOptions from './models/features/polygons/polygon-options';\r\nimport NavigationOptions from './models/features/polyline/navigations-options';\r\nimport PolylineOptions from './models/features/polyline/polyline-options';\r\nimport PopupOptions from './models/features/popup/popup-options';\r\nimport MarkerClustererConfig from './models/features/marker-clusterer/marker-clusterer-config';\r\nimport { MarkerEventType, CircleEventType, PolygonEventType, PolylineEventType, MapEventType } from './models/dto/event-type';\r\nimport { MapType } from './models/dto/map-type';\r\nimport { PolylineType } from './models/dto/polyline-type';\r\n\r\nexport { Map };\r\nexport { MarkerOptions };\r\nexport { MarkerIcon };\r\nexport { EventReturn };\r\nexport { CircleMarkerOptions };\r\nexport { CircleMarkerStyle };\r\nexport { GeoJsonOptions };\r\nexport { MarkerAlterOptions };\r\nexport { PopupOptions };\r\nexport { PolygonOptions };\r\nexport { PolygonAlterOptions };\r\nexport { CircleOptions };\r\nexport { CircleAlterOptions };\r\nexport { PolylineOptions };\r\nexport { NavigationOptions };\r\nexport { IMapFunctions };\r\nexport { OverlayOptions };\r\nexport { MapType };\r\nexport { PolylineType };\r\nexport { MapEventType };\r\nexport { MarkerEventType };\r\nexport { CircleEventType };\r\nexport { PolygonEventType };\r\nexport { PolylineEventType };\r\nexport { MarkerClustererConfig };\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.ts","/**\n * @name MarkerClustererPlus for Google Maps V3\n * @version 2.1.11\n * @author Gary Little\n * @fileoverview\n * The library creates and manages per-zoom-level clusters for large amounts of markers.\n * <p>\n * This is an enhanced V3 implementation of the V2 MarkerClusterer by Xiaoxi Wu. It is\n * based on the V3 MarkerClusterer port by Luke Mahe. MarkerClustererPlus was created\n * by Gary Little.\n * <p>\n * v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It\n * adds support for the <code>ignoreHidden</code>, <code>title</code>, <code>batchSizeIE</code>,\n * and <code>calculator</code> properties as well as support for four more events. It also allows\n * greater control over the styling of the text that appears on the cluster marker. The\n * documentation has been significantly improved and the overall code has been simplified and\n * polished. Very large numbers of markers can now be managed without causing Javascript timeout\n * errors on Internet Explorer. Note that the name of the <code>clusterclick</code> event has been\n * deprecated. The new name is <code>click</code>, so please change your application code now.\n */\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @name ClusterIconStyle\n * @class This class represents the object for values in the <code>styles</code> array passed\n * to the {@link MarkerClusterer} constructor. The element in this array that is used to\n * style the cluster icon is determined by calling the <code>calculator</code> function.\n *\n * @property {string} url The URL of the cluster icon image file. Required.\n * @property {number} height The display height (in pixels) of the cluster icon. Required.\n * @property {number} width The display width (in pixels) of the cluster icon. Required.\n * @property {Array} [anchorText] The position (in pixels) from the center of the cluster icon to\n * where the text label is to be centered and drawn. The format is <code>[yoffset, xoffset]</code>\n * where <code>yoffset</code> increases as you go down from center and <code>xoffset</code>\n * increases to the right of center. The default is <code>[0, 0]</code>.\n * @property {Array} [anchorIcon] The anchor position (in pixels) of the cluster icon. This is the\n * spot on the cluster icon that is to be aligned with the cluster position. The format is\n * <code>[yoffset, xoffset]</code> where <code>yoffset</code> increases as you go down and\n * <code>xoffset</code> increases to the right of the top-left corner of the icon. The default\n * anchor position is the center of the cluster icon.\n * @property {string} [textColor=\"black\"] The color of the label text shown on the\n * cluster icon.\n * @property {number} [textSize=11] The size (in pixels) of the label text shown on the\n * cluster icon.\n * @property {string} [textDecoration=\"none\"] The value of the CSS <code>text-decoration</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [fontWeight=\"bold\"] The value of the CSS <code>font-weight</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [fontStyle=\"normal\"] The value of the CSS <code>font-style</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [fontFamily=\"Arial,sans-serif\"] The value of the CSS <code>font-family</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [backgroundPosition=\"0 0\"] The position of the cluster icon image\n * within the image defined by <code>url</code>. The format is <code>\"xpos ypos\"</code>\n * (the same format as for the CSS <code>background-position</code> property). You must set\n * this property appropriately when the image defined by <code>url</code> represents a sprite\n * containing multiple images. Note that the position <i>must</i> be specified in px units.\n */\n/**\n * @name ClusterIconInfo\n * @class This class is an object containing general information about a cluster icon. This is\n * the object that a <code>calculator</code> function returns.\n *\n * @property {string} text The text of the label to be shown on the cluster icon.\n * @property {number} index The index plus 1 of the element in the <code>styles</code>\n * array to be used to style the cluster icon.\n * @property {string} title The tooltip to display when the mouse moves over the cluster icon.\n * If this value is <code>undefined</code> or <code>\"\"</code>, <code>title</code> is set to the\n * value of the <code>title</code> property passed to the MarkerClusterer.\n */\n/**\n * A cluster icon.\n *\n * @constructor\n * @extends google.maps.OverlayView\n * @param {Cluster} cluster The cluster with which the icon is to be associated.\n * @param {Array} [styles] An array of {@link ClusterIconStyle} defining the cluster icons\n * to use for various cluster sizes.\n * @private\n */\nfunction ClusterIcon(cluster, styles) {\n cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);\n\n this.cluster_ = cluster;\n this.className_ = cluster.getMarkerClusterer().getClusterClass();\n this.styles_ = styles;\n this.center_ = null;\n this.div_ = null;\n this.sums_ = null;\n this.visible_ = false;\n\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n}\n\n\n/**\n * Adds the icon to the DOM.\n */\nClusterIcon.prototype.onAdd = function () {\n var cClusterIcon = this;\n var cMouseDownInCluster;\n var cDraggingMapByCluster;\n var gmVersion = google.maps.version.split(\".\");\n\n gmVersion = parseInt(gmVersion[0] * 100, 10) + parseInt(gmVersion[1], 10);\n\n this.div_ = document.createElement(\"div\");\n this.div_.className = this.className_;\n if (this.visible_) {\n this.show();\n }\n\n this.getPanes().overlayMouseTarget.appendChild(this.div_);\n\n // Fix for Issue 157\n this.boundsChangedListener_ = google.maps.event.addListener(this.getMap(), \"bounds_changed\", function () {\n cDraggingMapByCluster = cMouseDownInCluster;\n });\n\n google.maps.event.addDomListener(this.div_, \"mousedown\", function () {\n cMouseDownInCluster = true;\n cDraggingMapByCluster = false;\n });\n\n// March 1, 2018: Fix for this 3.32 exp bug, https://issuetracker.google.com/issues/73571522\n// But it doesn't work with earlier releases so do a version check.\n if (gmVersion >= 332) { // Ugly version-dependent code\n google.maps.event.addDomListener(this.div_, \"touchstart\", function (e) {\n e.stopPropagation();\n });\n }\n\n google.maps.event.addDomListener(this.div_, \"click\", function (e) {\n cMouseDownInCluster = false;\n if (!cDraggingMapByCluster) {\n var theBounds;\n var mz;\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(mc, \"click\", cClusterIcon.cluster_);\n google.maps.event.trigger(mc, \"clusterclick\", cClusterIcon.cluster_); // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (mc.getZoomOnClick()) {\n // Zoom into the cluster.\n mz = mc.getMaxZoom();\n theBounds = cClusterIcon.cluster_.getBounds();\n mc.getMap().fitBounds(theBounds);\n // There is a fix for Issue 170 here:\n setTimeout(function () {\n mc.getMap().fitBounds(theBounds);\n // Don't zoom beyond the max zoom level\n if (mz !== null && (mc.getMap().getZoom() > mz)) {\n mc.getMap().setZoom(mz + 1);\n }\n }, 100);\n }\n\n // Prevent event propagation to the map:\n e.cancelBubble = true;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n }\n });\n\n google.maps.event.addDomListener(this.div_, \"mouseover\", function () {\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(mc, \"mouseover\", cClusterIcon.cluster_);\n });\n\n google.maps.event.addDomListener(this.div_, \"mouseout\", function () {\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(mc, \"mouseout\", cClusterIcon.cluster_);\n });\n};\n\n\n/**\n * Removes the icon from the DOM.\n */\nClusterIcon.prototype.onRemove = function () {\n if (this.div_ && this.div_.parentNode) {\n this.hide();\n google.maps.event.removeListener(this.boundsChangedListener_);\n google.maps.event.clearInstanceListeners(this.div_);\n this.div_.parentNode.removeChild(this.div_);\n this.div_ = null;\n }\n};\n\n\n/**\n * Draws the icon.\n */\nClusterIcon.prototype.draw = function () {\n if (this.visible_) {\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.top = pos.y + \"px\";\n this.div_.style.left = pos.x + \"px\";\n this.div_.style.zIndex = google.maps.Marker.MAX_ZINDEX + 1; // Put above all unclustered markers\n }\n};\n\n\n/**\n * Hides the icon.\n */\nClusterIcon.prototype.hide = function () {\n if (this.div_) {\n this.div_.style.display = \"none\";\n }\n this.visible_ = false;\n};\n\n\n/**\n * Positions and shows the icon.\n */\nClusterIcon.prototype.show = function () {\n if (this.div_) {\n var img = \"\";\n // NOTE: values must be specified in px units\n var bp = this.backgroundPosition_.split(\" \");\n var spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, \"\"), 10);\n var spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, \"\"), 10);\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.cssText = this.createCss(pos);\n img = \"<img src='\" + this.url_ + \"' style='position: absolute; top: \" + spriteV + \"px; left: \" + spriteH + \"px; \";\n if (this.cluster_.getMarkerClusterer().enableRetinaIcons_) {\n img += \"width: \" + this.width_ + \"px; height: \" + this.height_ + \"px;\";\n } else {\n img += \"clip: rect(\" + (-1 * spriteV) + \"px, \" + ((-1 * spriteH) + this.width_) + \"px, \" +\n ((-1 * spriteV) + this.height_) + \"px, \" + (-1 * spriteH) + \"px);\";\n }\n img += \"'>\";\n this.div_.innerHTML = img + \"<div style='\" +\n \"position: absolute;\" +\n \"top: \" + this.anchorText_[0] + \"px;\" +\n \"left: \" + this.anchorText_[1] + \"px;\" +\n \"color: \" + this.textColor_ + \";\" +\n \"font-size: \" + this.textSize_ + \"px;\" +\n \"font-family: \" + this.fontFamily_ + \";\" +\n \"font-weight: \" + this.fontWeight_ + \";\" +\n \"font-style: \" + this.fontStyle_ + \";\" +\n \"text-decoration: \" + this.textDecoration_ + \";\" +\n \"text-align: center;\" +\n \"width: \" + this.width_ + \"px;\" +\n \"line-height:\" + this.height_ + \"px;\" +\n \"'>\" + this.sums_.text + \"</div>\";\n if (typeof this.sums_.title === \"undefined\" || this.sums_.title === \"\") {\n this.div_.title = this.cluster_.getMarkerClusterer().getTitle();\n } else {\n this.div_.title = this.sums_.title;\n }\n this.div_.style.display = \"\";\n }\n this.visible_ = true;\n};\n\n\n/**\n * Sets the icon styles to the appropriate element in the styles array.\n *\n * @param {ClusterIconInfo} sums The icon label text and styles index.\n */\nClusterIcon.prototype.useStyle = function (sums) {\n this.sums_ = sums;\n var index = Math.max(0, sums.index - 1);\n index = Math.min(this.styles_.length - 1, index);\n var style = this.styles_[index];\n this.url_ = style.url;\n this.height_ = style.height;\n this.width_ = style.width;\n this.anchorText_ = style.anchorText || [0, 0];\n this.anchorIcon_ = style.anchorIcon || [parseInt(this.height_ / 2, 10), parseInt(this.width_ / 2, 10)];\n this.textColor_ = style.textColor || \"black\";\n this.textSize_ = style.textSize || 11;\n this.textDecoration_ = style.textDecoration || \"none\";\n this.fontWeight_ = style.fontWeight || \"bold\";\n this.fontStyle_ = style.fontStyle || \"normal\";\n this.fontFamily_ = style.fontFamily || \"Arial,sans-serif\";\n this.backgroundPosition_ = style.backgroundPosition || \"0 0\";\n};\n\n\n/**\n * Sets the position at which to center the icon.\n *\n * @param {google.maps.LatLng} center The latlng to set as the center.\n */\nClusterIcon.prototype.setCenter = function (center) {\n this.center_ = center;\n};\n\n\n/**\n * Creates the cssText style parameter based on the position of the icon.\n *\n * @param {google.maps.Point} pos The position of the icon.\n * @return {string} The CSS style text.\n */\nClusterIcon.prototype.createCss = function (pos) {\n var style = [];\n style.push(\"cursor: pointer;\");\n style.push(\"position: absolute; top: \" + pos.y + \"px; left: \" + pos.x + \"px;\");\n style.push(\"width: \" + this.width_ + \"px; height: \" + this.height_ + \"px;\");\n style.push(\"-webkit-user-select: none;\");\n style.push(\"-khtml-user-select: none;\");\n style.push(\"-moz-user-select: none;\");\n style.push(\"-o-user-select: none;\");\n style.push(\"user-select: none;\");\n return style.join(\"\");\n};\n\n\n/**\n * Returns the position at which to place the DIV depending on the latlng.\n *\n * @param {google.maps.LatLng} latlng The position in latlng.\n * @return {google.maps.Point} The position in pixels.\n */\nClusterIcon.prototype.getPosFromLatLng_ = function (latlng) {\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n pos.x -= this.anchorIcon_[1];\n pos.y -= this.anchorIcon_[0];\n pos.x = parseInt(pos.x, 10);\n pos.y = parseInt(pos.y, 10);\n return pos;\n};\n\n\n/**\n * Creates a single cluster that manages a group of proximate markers.\n * Used internally, do not call this constructor directly.\n * @constructor\n * @param {MarkerClusterer} mc The <code>MarkerClusterer</code> object with which this\n * cluster is associated.\n */\nfunction Cluster(mc) {\n this.markerClusterer_ = mc;\n this.map_ = mc.getMap();\n this.gridSize_ = mc.getGridSize();\n this.minClusterSize_ = mc.getMinimumClusterSize();\n this.averageCenter_ = mc.getAverageCenter();\n this.markers_ = [];\n this.center_ = null;\n this.bounds_ = null;\n this.clusterIcon_ = new ClusterIcon(this, mc.getStyles());\n}\n\n\n/**\n * Returns the number of markers managed by the cluster. You can call this from\n * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler\n * for the <code>MarkerClusterer</code> object.\n *\n * @return {number} The number of markers in the cluster.\n */\nCluster.prototype.getSize = function () {\n return this.markers_.length;\n};\n\n\n/**\n * Returns the array of markers managed by the cluster. You can call this from\n * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler\n * for the <code>MarkerClusterer</code> object.\n *\n * @return {Array} The array of markers in the cluster.\n */\nCluster.prototype.getMarkers = function () {\n return this.markers_;\n};\n\n\n/**\n * Returns the center of the cluster. You can call this from\n * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler\n * for the <code>MarkerClusterer</code> object.\n *\n * @return {google.maps.LatLng} The center of the cluster.\n */\nCluster.prototype.getCenter = function () {\n return this.center_;\n};\n\n\n/**\n * Returns the map with which the cluster is associated.\n *\n * @return {google.maps.Map} The map.\n * @ignore\n */\nCluster.prototype.getMap = function () {\n return this.map_;\n};\n\n\n/**\n * Returns the <code>MarkerClusterer</code> object with which the cluster is associated.\n *\n * @return {MarkerClusterer} The associated marker clusterer.\n * @ignore\n */\nCluster.prototype.getMarkerClusterer = function () {\n return this.markerClusterer_;\n};\n\n\n/**\n * Returns the bounds of the cluster.\n *\n * @return {google.maps.LatLngBounds} the cluster bounds.\n * @ignore\n */\nCluster.prototype.getBounds = function () {\n var i;\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n var markers = this.getMarkers();\n for (i = 0; i < markers.length; i++) {\n bounds.extend(markers[i].getPosition());\n }\n return bounds;\n};\n\n\n/**\n * Removes the cluster from the map.\n *\n * @ignore\n */\nCluster.prototype.remove = function () {\n this.clusterIcon_.setMap(null);\n this.markers_ = [];\n delete this.markers_;\n};\n\n\n/**\n * Adds a marker to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to be added.\n * @return {boolean} True if the marker was added.\n * @ignore\n */\nCluster.prototype.addMarker = function (marker) {\n var i;\n var mCount;\n var mz;\n\n if (this.isMarkerAlreadyAdded_(marker)) {\n return false;\n }\n\n if (!this.center_) {\n this.center_ = marker.getPosition();\n this.calculateBounds_();\n } else {\n if (this.averageCenter_) {\n var l = this.markers_.length + 1;\n var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;\n var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;\n this.center_ = new google.maps.LatLng(lat, lng);\n this.calculateBounds_();\n }\n }\n\n marker.isAdded = true;\n this.markers_.push(marker);\n\n mCount = this.markers_.length;\n mz = this.markerClusterer_.getMaxZoom();\n if (mz !== null && this.map_.getZoom() > mz) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map_) {\n marker.setMap(this.map_);\n }\n } else if (mCount < this.minClusterSize_) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map_) {\n marker.setMap(this.map_);\n }\n } else if (mCount === this.minClusterSize_) {\n // Hide the markers that were showing.\n for (i = 0; i < mCount; i++) {\n this.markers_[i].setMap(null);\n }\n } else {\n marker.setMap(null);\n }\n\n this.updateIcon_();\n return true;\n};\n\n\n/**\n * Determines if a marker lies within the cluster's bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker lies in the bounds.\n * @ignore\n */\nCluster.prototype.isMarkerInClusterBounds = function (marker) {\n return this.bounds_.contains(marker.getPosition());\n};\n\n\n/**\n * Calculates the extended bounds of the cluster with the grid.\n */\nCluster.prototype.calculateBounds_ = function () {\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds);\n};\n\n\n/**\n * Updates the cluster icon.\n */\nCluster.prototype.updateIcon_ = function () {\n var mCount = this.markers_.length;\n var mz = this.markerClusterer_.getMaxZoom();\n\n if (mz !== null && this.map_.getZoom() > mz) {\n this.clusterIcon_.hide();\n return;\n }\n\n if (mCount < this.minClusterSize_) {\n // Min cluster size not yet reached.\n this.clusterIcon_.hide();\n return;\n }\n\n var numStyles = this.markerClusterer_.getStyles().length;\n var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles);\n this.clusterIcon_.setCenter(this.center_);\n this.clusterIcon_.useStyle(sums);\n this.clusterIcon_.show();\n};\n\n\n/**\n * Determines if a marker has already been added to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker has already been added.\n */\nCluster.prototype.isMarkerAlreadyAdded_ = function (marker) {\n var i;\n if (this.markers_.indexOf) {\n return this.markers_.indexOf(marker) !== -1;\n } else {\n for (i = 0; i < this.markers_.length; i++) {\n if (marker === this.markers_[i]) {\n return true;\n }\n }\n }\n return false;\n};\n\n\n/**\n * @name MarkerClustererOptions\n * @class This class represents the optional parameter passed to\n * the {@link MarkerClusterer} constructor.\n * @property {number} [gridSize=60] The grid size of a cluster in pixels. The grid is a square.\n * @property {number} [maxZoom=null] The maximum zoom level at which clustering is enabled or\n * <code>null</code> if clustering is to be enabled at all zoom levels.\n * @property {boolean} [zoomOnClick=true] Whether to zoom the map when a cluster marker is\n * clicked. You may want to set this to <code>false</code> if you have installed a handler\n * for the <code>click</code> event and it deals with zooming on its own.\n * @property {boolean} [averageCenter=false] Whether the position of a cluster marker should be\n * the average position of all markers in the cluster. If set to <code>false</code>, the\n * cluster marker is positioned at the location of the first marker added to the cluster.\n * @property {number} [minimumClusterSize=2] The minimum number of markers needed in a cluster\n * before the markers are hidden and a cluster marker appears.\n * @property {boolean} [ignoreHidden=false] Whether to ignore hidden markers in clusters. You\n * may want to set this to <code>true</code> to ensure that hidden markers are not included\n * in the marker count that appears on a cluster marker (this count is the value of the\n * <code>text</code> property of the result returned by the default <code>calculator</code>).\n * If set to <code>true</code> and you change the visibility of a marker being clustered, be\n * sure to also call <code>MarkerClusterer.repaint()</code>.\n * @property {string} [title=\"\"] The tooltip to display when the mouse moves over a cluster\n * marker. (Alternatively, you can use a custom <code>calculator</code> function to specify a\n * different tooltip for each cluster marker.)\n * @property {function} [calculator=MarkerClusterer.CALCULATOR] The function used to determine\n * the text to be displayed on a cluster marker and the index indicating which style to use\n * for the cluster marker. The input parameters for the function are (1) the array of markers\n * represented by a cluster marker and (2) the number of cluster icon styles. It returns a\n * {@link ClusterIconInfo} object. The default <code>calculator</code> returns a\n * <code>text</code> property which is the number of markers in the cluster and an\n * <code>index</code> property which is one higher than the lowest integer such that\n * <code>10^i</code> exceeds the number of markers in the cluster, or the size of the styles\n * array, whichever is less. The <code>styles</code> array element used has an index of\n * <code>index</code> minus 1. For example, the default <code>calculator</code> returns a\n * <code>text</code> value of <code>\"125\"</code> and an <code>index</code> of <code>3</code>\n * for a cluster icon representing 125 markers so the element used in the <code>styles</code>\n * array is <code>2</code>. A <code>calculator</code> may also return a <code>title</code>\n * property that contains the text of the tooltip to be used for the cluster marker. If\n * <code>title</code> is not defined, the tooltip is set to the value of the <code>title</code>\n * property for the MarkerClusterer.\n * @property {string} [clusterClass=\"cluster\"] The name of the CSS class defining general styles\n * for the cluster markers. Use this class to define CSS styles that are not set up by the code\n * that processes the <code>styles</code> array.\n * @property {Array} [styles] An array of {@link ClusterIconStyle} elements defining the styles\n * of the cluster markers to be used. The element to be used to style a given cluster marker\n * is determined by the function defined by the <code>calculator</code> property.\n * The default is an array of {@link ClusterIconStyle} elements whose properties are derived\n * from the values for <code>imagePath</code>, <code>imageExtension</code>, and\n * <code>imageSizes</code>.\n * @property {boolean} [enableRetinaIcons=false] Whether to allow the use of cluster icons that\n * have sizes that are some multiple (typically double) of their actual display size. Icons such\n * as these look better when viewed on high-resolution monitors such as Apple's Retina displays.\n * Note: if this property is <code>true</code>, sprites cannot be used as cluster icons.\n * @property {number} [batchSize=MarkerClusterer.BATCH_SIZE] Set this property to the\n * number of markers to be processed in a single batch when using a browser other than\n * Internet Explorer (for Internet Explorer, use the batchSizeIE property instead).\n * @property {number} [batchSizeIE=MarkerClusterer.BATCH_SIZE_IE] When Internet Explorer is\n * being used, markers are processed in several batches with a small delay inserted between\n * each batch in an attempt to avoid Javascript timeout errors. Set this property to the\n * number of markers to be processed in a single batch; select as high a number as you can\n * without causing a timeout error in the browser. This number might need to be as low as 100\n * if 15,000 markers are being managed, for example.\n * @property {string} [imagePath=MarkerClusterer.IMAGE_PATH]\n * The full URL of the root name of the group of image files to use for cluster icons.\n * The complete file name is of the form <code>imagePath</code>n.<code>imageExtension</code>\n * where n is the image file number (1, 2, etc.).\n * @property {string} [imageExtension=MarkerClusterer.IMAGE_EXTENSION]\n * The extension name for the cluster icon image files (e.g., <code>\"png\"</code> or\n * <code>\"jpg\"</code>).\n * @property {Array} [imageSizes=MarkerClusterer.IMAGE_SIZES]\n * An array of numbers containing the widths of the group of\n * <code>imagePath</code>n.<code>imageExtension</code> image files.\n * (The images are assumed to be square.)\n */\n/**\n * Creates a MarkerClusterer object with the options specified in {@link MarkerClustererOptions}.\n * @constructor\n * @extends google.maps.OverlayView\n * @param {google.maps.Map} map The Google map to attach to.\n * @param {Array.<google.maps.Marker>} [opt_markers] The markers to be added to the cluster.\n * @param {MarkerClustererOptions} [opt_options] The optional parameters.\n */\nfunction MarkerClusterer(map, opt_markers, opt_options) {\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\n // extend function to extend MarkerClusterer with google.maps.OverlayView\n // because it might not always be available when the code is defined so we\n // look for it at the last possible moment. If it doesn't exist now then\n // there is no point going ahead :)\n this.extend(MarkerClusterer, google.maps.OverlayView);\n\n opt_markers = opt_markers || [];\n opt_options = opt_options || {};\n\n this.markers_ = [];\n this.clusters_ = [];\n this.listeners_ = [];\n this.activeMap_ = null;\n this.ready_ = false;\n\n this.gridSize_ = opt_options.gridSize || 60;\n this.minClusterSize_ = opt_options.minimumClusterSize || 2;\n this.maxZoom_ = opt_options.maxZoom || null;\n this.styles_ = opt_options.styles || [];\n this.title_ = opt_options.title || \"\";\n this.zoomOnClick_ = true;\n if (opt_options.zoomOnClick !== undefined) {\n this.zoomOnClick_ = opt_options.zoomOnClick;\n }\n this.averageCenter_ = false;\n if (opt_options.averageCenter !== undefined) {\n this.averageCenter_ = opt_options.averageCenter;\n }\n this.ignoreHidden_ = false;\n if (opt_options.ignoreHidden !== undefined) {\n this.ignoreHidden_ = opt_options.ignoreHidden;\n }\n this.enableRetinaIcons_ = false;\n if (opt_options.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons_ = opt_options.enableRetinaIcons;\n }\n this.imagePath_ = opt_options.imagePath || MarkerClusterer.IMAGE_PATH;\n this.imageExtension_ = opt_options.imageExtension || MarkerClusterer.IMAGE_EXTENSION;\n this.imageSizes_ = opt_options.imageSizes || MarkerClusterer.IMAGE_SIZES;\n this.calculator_ = opt_options.calculator || MarkerClusterer.CALCULATOR;\n this.batchSize_ = opt_options.batchSize || MarkerClusterer.BATCH_SIZE;\n this.batchSizeIE_ = opt_options.batchSizeIE || MarkerClusterer.BATCH_SIZE_IE;\n this.clusterClass_ = opt_options.clusterClass || \"cluster\";\n\n if (navigator.userAgent.toLowerCase().indexOf(\"msie\") !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize_ = this.batchSizeIE_;\n }\n\n this.setupStyles_();\n\n this.addMarkers(opt_markers, true);\n this.setMap(map); // Note: this causes onAdd to be called\n}\n\n\n/**\n * Implementation of the onAdd interface method.\n * @ignore\n */\nMarkerClusterer.prototype.onAdd = function () {\n var cMarkerClusterer = this;\n\n this.activeMap_ = this.getMap();\n this.ready_ = true;\n\n this.repaint();\n\n this.prevZoom_ = this.getMap().getZoom();\n\n // Add the map event listeners\n this.listeners_ = [\n google.maps.event.addListener(this.getMap(), \"zoom_changed\", function () {\n // Fix for bug #407\n // Determines map type and prevents illegal zoom levels\n var zoom = this.getMap().getZoom();\n var minZoom = this.getMap().minZoom || 0;\n var maxZoom = Math.min(this.getMap().maxZoom || 100,\n this.getMap().mapTypes[this.getMap().getMapTypeId()].maxZoom);\n zoom = Math.min(Math.max(zoom, minZoom), maxZoom);\n\n if (this.prevZoom_ != zoom) {\n this.prevZoom_ = zoom;\n this.resetViewport_(false);\n }\n }.bind(this)),\n google.maps.event.addListener(this.getMap(), \"idle\", function () {\n cMarkerClusterer.redraw_();\n })\n ];\n};\n\n\n/**\n * Implementation of the onRemove interface method.\n * Removes map event listeners and all cluster icons from the DOM.\n * All managed markers are also put back on the map.\n * @ignore\n */\nMarkerClusterer.prototype.onRemove = function () {\n var i;\n\n // Put all the managed markers back on the map:\n for (i = 0; i < this.markers_.length; i++) {\n if (this.markers_[i].getMap() !== this.activeMap_) {\n this.markers_[i].setMap(this.activeMap_);\n }\n }\n\n // Remove all clusters:\n for (i = 0; i < this.clusters_.length; i++) {\n this.clusters_[i].remove();\n }\n this.clusters_ = [];\n\n // Remove map event listeners:\n for (i = 0; i < this.listeners_.length; i++) {\n google.maps.event.removeListener(this.listeners_[i]);\n }\n this.listeners_ = [];\n\n this.activeMap_ = null;\n this.ready_ = false;\n};\n\n\n/**\n * Implementation of the draw interface method.\n * @ignore\n */\nMarkerClusterer.prototype.draw = function () {};\n\n\n/**\n * Sets up the styles object.\n */\nMarkerClusterer.prototype.setupStyles_ = function () {\n var i, size;\n if (this.styles_.length > 0) {\n return;\n }\n\n for (i = 0; i < this.imageSizes_.length; i++) {\n size = this.imageSizes_[i];\n this.styles_.push({\n url: this.imagePath_ + (i + 1) + \".\" + this.imageExtension_,\n height: size,\n width: size\n });\n }\n};\n\n\n/**\n * Fits the map to the bounds of the markers managed by the clusterer.\n */\nMarkerClusterer.prototype.fitMapToMarkers = function () {\n var i;\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (i = 0; i < markers.length; i++) {\n // March 3, 2018: Bug fix -- honor the ignoreHidden property\n if (markers[i].getVisible() || !this.getIgnoreHidden()) {\n bounds.extend(markers[i].getPosition());\n }\n }\n\n this.getMap().fitBounds(bounds);\n};\n\n\n/**\n * Returns the value of the <code>gridSize</code> property.\n *\n * @return {number} The grid size.\n */\nMarkerClusterer.prototype.getGridSize = function () {\n return this.gridSize_;\n};\n\n\n/**\n * Sets the value of the <code>gridSize</code> property.\n *\n * @param {number} gridSize The grid size.\n */\nMarkerClusterer.prototype.setGridSize = function (gridSize) {\n this.gridSize_ = gridSize;\n};\n\n\n/**\n * Returns the value of the <code>minimumClusterSize</code> property.\n *\n * @return {number} The minimum cluster size.\n */\nMarkerClusterer.prototype.getMinimumClusterSize = function () {\n return this.minClusterSize_;\n};\n\n/**\n * Sets the value of the <code>minimumClusterSize</code> property.\n *\n * @param {number} minimumClusterSize The minimum cluster size.\n */\nMarkerClusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {\n this.minClusterSize_ = minimumClusterSize;\n};\n\n\n/**\n * Returns the value of the <code>maxZoom</code> property.\n *\n * @return {number} The maximum zoom level.\n */\nMarkerClusterer.prototype.getMaxZoom = function () {\n return this.maxZoom_;\n};\n\n\n/**\n * Sets the value of the <code>maxZoom</code> property.\n *\n * @param {number} maxZoom The maximum zoom level.\n */\nMarkerClusterer.prototype.setMaxZoom = function (maxZoom) {\n this.maxZoom_ = maxZoom;\n};\n\n\n/**\n * Returns the value of the <code>styles</code> property.\n *\n * @return {Array} The array of styles defining the cluster markers to be used.\n */\nMarkerClusterer.prototype.getStyles = function () {\n return this.styles_;\n};\n\n\n/**\n * Sets the value of the <code>styles</code> property.\n *\n * @param {Array.<ClusterIconStyle>} styles The array of styles to use.\n */\nMarkerClusterer.prototype.setStyles = function (styles) {\n this.styles_ = styles;\n};\n\n\n/**\n * Returns the value of the <code>title</code> property.\n *\n * @return {string} The content of the title text.\n */\nMarkerClusterer.prototype.getTitle = function () {\n return this.title_;\n};\n\n\n/**\n * Sets the value of the <code>title</code> property.\n *\n * @param {string} title The value of the title property.\n */\nMarkerClusterer.prototype.setTitle = function (title) {\n this.title_ = title;\n};\n\n\n/**\n * Returns the value of the <code>zoomOnClick</code> property.\n *\n * @return {boolean} True if zoomOnClick property is set.\n */\nMarkerClusterer.prototype.getZoomOnClick = function () {\n return this.zoomOnClick_;\n};\n\n\n/**\n * Sets the value of the <code>zoomOnClick</code> property.\n *\n * @param {boolean} zoomOnClick The value of the zoomOnClick property.\n */\nMarkerClusterer.prototype.setZoomOnClick = function (zoomOnClick) {\n this.zoomOnClick_ = zoomOnClick;\n};\n\n\n/**\n * Returns the value of the <code>averageCenter</code> property.\n *\n * @return {boolean} True if averageCenter property is set.\n */\nMarkerClusterer.prototype.getAverageCenter = function () {\n return this.averageCenter_;\n};\n\n\n/**\n * Sets the value of the <code>averageCenter</code> property.\n *\n * @param {boolean} averageCenter The value of the averageCenter property.\n */\nMarkerClusterer.prototype.setAverageCenter = function (averageCenter) {\n this.averageCenter_ = averageCenter;\n};\n\n\n/**\n * Returns the value of the <code>ignoreHidden</code> property.\n *\n * @return {boolean} True if ignoreHidden property is set.\n */\nMarkerClusterer.prototype.getIgnoreHidden = function () {\n return this.ignoreHidden_;\n};\n\n\n/**\n * Sets the value of the <code>ignoreHidden</code> property.\n *\n * @param {boolean} ignoreHidden The value of the ignoreHidden property.\n */\nMarkerClusterer.prototype.setIgnoreHidden = function (ignoreHidden) {\n this.ignoreHidden_ = ignoreHidden;\n};\n\n\n/**\n * Returns the value of the <code>enableRetinaIcons</code> property.\n *\n * @return {boolean} True if enableRetinaIcons property is set.\n */\nMarkerClusterer.prototype.getEnableRetinaIcons = function () {\n return this.enableRetinaIcons_;\n};\n\n\n/**\n * Sets the value of the <code>enableRetinaIcons</code> property.\n *\n * @param {boolean} enableRetinaIcons The value of the enableRetinaIcons property.\n */\nMarkerClusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {\n this.enableRetinaIcons_ = enableRetinaIcons;\n};\n\n\n/**\n * Returns the value of the <code>imageExtension</code> property.\n *\n * @return {string} The value of the imageExtension property.\n */\nMarkerClusterer.prototype.getImageExtension = function () {\n return this.imageExtension_;\n};\n\n\n/**\n * Sets the value of the <code>imageExtension</code> property.\n *\n * @param {string} imageExtension The value of the imageExtension property.\n */\nMarkerClusterer.prototype.setImageExtension = function (imageExtension) {\n this.imageExtension_ = imageExtension;\n};\n\n\n/**\n * Returns the value of the <code>imagePath</code> property.\n *\n * @return {string} The value of the imagePath property.\n */\nMarkerClusterer.prototype.getImagePath = function () {\n return this.imagePath_;\n};\n\n\n/**\n * Sets the value of the <code>imagePath</code> property.\n *\n * @param {string} imagePath The value of the imagePath property.\n */\nMarkerClusterer.prototype.setImagePath = function (imagePath) {\n this.imagePath_ = imagePath;\n};\n\n\n/**\n * Returns the value of the <code>imageSizes</code> property.\n *\n * @return {Array} The value of the imageSizes property.\n */\nMarkerClusterer.prototype.getImageSizes = function () {\n return this.imageSizes_;\n};\n\n\n/**\n * Sets the value of the <code>imageSizes</code> property.\n *\n * @param {Array} imageSizes The value of the imageSizes property.\n */\nMarkerClusterer.prototype.setImageSizes = function (imageSizes) {\n this.imageSizes_ = imageSizes;\n};\n\n\n/**\n * Returns the value of the <code>calculator</code> property.\n *\n * @return {function} the value of the calculator property.\n */\nMarkerClusterer.prototype.getCalculator = function () {\n return this.calculator_;\n};\n\n\n/**\n * Sets the value of the <code>calculator</code> property.\n *\n * @param {function(Array.<google.maps.Marker>, number)} calculator The value\n * of the calculator property.\n */\nMarkerClusterer.prototype.setCalculator = function (calculator) {\n this.calculator_ = calculator;\n};\n\n\n/**\n * Returns the value of the <code>batchSizeIE</code> property.\n *\n * @return {number} the value of the batchSizeIE property.\n */\nMarkerClusterer.prototype.getBatchSizeIE = function () {\n return this.batchSizeIE_;\n};\n\n\n/**\n * Sets the value of the <code>batchSizeIE</code> property.\n *\n * @param {number} batchSizeIE The value of the batchSizeIE property.\n */\nMarkerClusterer.prototype.setBatchSizeIE = function (batchSizeIE) {\n this.batchSizeIE_ = batchSizeIE;\n};\n\n\n/**\n * Returns the value of the <code>clusterClass</code> property.\n *\n * @return {string} the value of the clusterClass property.\n */\nMarkerClusterer.prototype.getClusterClass = function () {\n return this.clusterClass_;\n};\n\n\n/**\n * Sets the value of the <code>clusterClass</code> property.\n *\n * @param {string} clusterClass The value of the clusterClass property.\n */\nMarkerClusterer.prototype.setClusterClass = function (clusterClass) {\n this.clusterClass_ = clusterClass;\n};\n\n\n/**\n * Returns the array of markers managed by the clusterer.\n *\n * @return {Array} The array of markers managed by the clusterer.\n */\nMarkerClusterer.prototype.getMarkers = function () {\n return this.markers_;\n};\n\n\n/**\n * Returns the number of markers managed by the clusterer.\n *\n * @return {number} The number of markers.\n */\nMarkerClusterer.prototype.getTotalMarkers = function () {\n return this.markers_.length;\n};\n\n\n/**\n * Returns the current array of clusters formed by the clusterer.\n *\n * @return {Array} The array of clusters formed by the clusterer.\n */\nMarkerClusterer.prototype.getClusters = function () {\n return this.clusters_;\n};\n\n\n/**\n * Returns the number of clusters formed by the clusterer.\n *\n * @return {number} The number of clusters formed by the clusterer.\n */\nMarkerClusterer.prototype.getTotalClusters = function () {\n return this.clusters_.length;\n};\n\n\n/**\n * Adds a marker to the clusterer. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n */\nMarkerClusterer.prototype.addMarker = function (marker, opt_nodraw) {\n this.pushMarkerTo_(marker);\n if (!opt_nodraw) {\n this.redraw_();\n }\n};\n\n\n/**\n * Adds an array of markers to the clusterer. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>.\n *\n * @param {Array.<google.maps.Marker>} markers The markers to add.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n */\nMarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) {\n var key;\n for (key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo_(markers[key]);\n }\n }\n if (!opt_nodraw) {\n this.redraw_();\n }\n};\n\n\n/**\n * Pushes a marker to the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to add.\n */\nMarkerClusterer.prototype.pushMarkerTo_ = function (marker) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n var cMarkerClusterer = this;\n google.maps.event.addListener(marker, \"dragend\", function () {\n if (cMarkerClusterer.ready_) {\n this.isAdded = false;\n cMarkerClusterer.repaint();\n }\n });\n }\n marker.isAdded = false;\n this.markers_.push(marker);\n};\n\n\n/**\n * Removes a marker from the cluster. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if the\n * marker was removed from the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to remove.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n * @return {boolean} True if the marker was removed from the clusterer.\n */\nMarkerClusterer.prototype.removeMarker = function (marker, opt_nodraw) {\n var removed = this.removeMarker_(marker);\n\n if (!opt_nodraw && removed) {\n this.repaint();\n }\n\n return removed;\n};\n\n\n/**\n * Removes an array of markers from the cluster. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if markers\n * were removed from the clusterer.\n *\n * @param {Array.<google.maps.Marker>} markers The markers to remove.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n * @return {boolean} True if markers were removed from the clusterer.\n */\nMarkerClusterer.prototype.removeMarkers = function (markers, opt_nodraw) {\n var i, r;\n var removed = false;\n\n for (i = 0; i < markers.length; i++) {\n r = this.removeMarker_(markers[i]);\n removed = removed || r;\n }\n\n if (!opt_nodraw && removed) {\n this.repaint();\n }\n\n return removed;\n};\n\n\n/**\n * Removes a marker and returns true if removed, false if not.\n *\n * @param {google.maps.Marker} marker The marker to remove\n * @return {boolean} Whether the marker was removed or not\n */\nMarkerClusterer.prototype.removeMarker_ = function (marker) {\n var i;\n var index = -1;\n if (this.markers_.indexOf) {\n index = this.markers_.indexOf(marker);\n } else {\n for (i = 0; i < this.markers_.length; i++) {\n if (marker === this.markers_[i]) {\n index = i;\n break;\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n\n marker.setMap(null);\n this.markers_.splice(index, 1); // Remove the marker from the list of managed markers\n return true;\n};\n\n\n/**\n * Removes all clusters and markers from the map and also removes all markers\n * managed by the clusterer.\n */\nMarkerClusterer.prototype.clearMarkers = function () {\n this.resetViewport_(true);\n this.markers_ = [];\n};\n\n\n/**\n * Recalculates and redraws all the marker clusters from scratch.\n * Call this after changing any properties.\n */\nMarkerClusterer.prototype.repaint = function () {\n var oldClusters = this.clusters_.slice();\n this.clusters_ = [];\n this.resetViewport_(false);\n this.redraw_();\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function () {\n var i;\n for (i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove();\n }\n }, 0);\n};\n\n\n/**\n * Returns the current bounds extended by the grid size.\n *\n * @param {google.maps.LatLngBounds} bounds The bounds to extend.\n * @return {google.maps.LatLngBounds} The extended bounds.\n * @ignore\n */\nMarkerClusterer.prototype.getExtendedBounds = function (bounds) {\n var projection = this.getProjection();\n\n // Turn the bounds into latlng.\n var tr = new google.maps.LatLng(bounds.getNorthEast().lat(),\n bounds.getNorthEast().lng());\n var bl = new google.maps.LatLng(bounds.getSouthWest().lat(),\n bounds.getSouthWest().lng());\n\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(tr);\n trPix.x += this.gridSize_;\n trPix.y -= this.gridSize_;\n\n var blPix = projection.fromLatLngToDivPixel(bl);\n blPix.x -= this.gridSize_;\n blPix.y += this.gridSize_;\n\n // Convert the pixel points back to LatLng\n var ne = projection.fromDivPixelToLatLng(trPix);\n var sw = projection.fromDivPixelToLatLng(blPix);\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(ne);\n bounds.extend(sw);\n\n return bounds;\n};\n\n\n/**\n * Redraws all the clusters.\n */\nMarkerClusterer.prototype.redraw_ = function () {\n this.createClusters_(0);\n};\n\n\n/**\n * Removes all clusters from the map. The markers are also removed from the map\n * if <code>opt_hide</code> is set to <code>true</code>.\n *\n * @param {boolean} [opt_hide] Set to <code>true</code> to also remove the markers\n * from the map.\n */\nMarkerClusterer.prototype.resetViewport_ = function (opt_hide) {\n var i, marker;\n // Remove all the clusters\n for (i = 0; i < this.clusters_.length; i++) {\n this.clusters_[i].remove();\n }\n this.clusters_ = [];\n\n // Reset the markers to not be added and to be removed from the map.\n for (i = 0; i < this.markers_.length; i++) {\n marker = this.markers_[i];\n marker.isAdded = false;\n if (opt_hide) {\n marker.setMap(null);\n }\n }\n};\n\n\n/**\n * Calculates the distance between two latlng locations in km.\n *\n * @param {google.maps.LatLng} p1 The first lat lng point.\n * @param {google.maps.LatLng} p2 The second lat lng point.\n * @return {number} The distance between the two points in km.\n * @see http://www.movable-type.co.uk/scripts/latlong.html\n*/\nMarkerClusterer.prototype.distanceBetweenPoints_ = function (p1, p2) {\n var R = 6371; // Radius of the Earth in km\n var dLat = (p2.lat() - p1.lat()) * Math.PI / 180;\n var dLon = (p2.lng() - p1.lng()) * Math.PI / 180;\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) *\n Math.sin(dLon / 2) * Math.sin(dLon / 2);\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n var d = R * c;\n return d;\n};\n\n\n/**\n * Determines if a marker is contained in a bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @param {google.maps.LatLngBounds} bounds The bounds to check against.\n * @return {boolean} True if the marker is in the bounds.\n */\nMarkerClusterer.prototype.isMarkerInBounds_ = function (marker, bounds) {\n return bounds.contains(marker.getPosition());\n};\n\n\n/**\n * Adds a marker to a cluster, or creates a new cluster.\n *\n * @param {google.maps.Marker} marker The marker to add.\n */\nMarkerClusterer.prototype.addToClosestCluster_ = function (marker) {\n var i, d, cluster, center;\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (i = 0; i < this.clusters_.length; i++) {\n cluster = this.clusters_[i];\n center = cluster.getCenter();\n if (center) {\n d = this.distanceBetweenPoints_(center, marker.getPosition());\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n } else {\n cluster = new Cluster(this);\n cluster.addMarker(marker);\n this.clusters_.push(cluster);\n }\n};\n\n\n/**\n * Creates the clusters. This is done in batches to avoid timeout errors\n * in some browsers when there is a huge number of markers.\n *\n * @param {number} iFirst The index of the first marker in the batch of\n * markers to be added to clusters.\n */\nMarkerClusterer.prototype.createClusters_ = function (iFirst) {\n var i, marker;\n var mapBounds;\n var cMarkerClusterer = this;\n if (!this.ready_) {\n return;\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the <code>MarkerClusterer</code> begins\n * clustering markers.\n * @name MarkerClusterer#clusteringbegin\n * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, \"clusteringbegin\", this);\n\n if (typeof this.timerRefStatic !== \"undefined\") {\n clearTimeout(this.timerRefStatic);\n delete this.timerRefStatic;\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n if (this.getMap().getZoom() > 3) {\n mapBounds = new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),\n this.getMap().getBounds().getNorthEast());\n } else {\n mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n }\n var bounds = this.getExtendedBounds(mapBounds);\n\n var iLast = Math.min(iFirst + this.batchSize_, this.markers_.length);\n\n for (i = iFirst; i < iLast; i++) {\n marker = this.markers_[i];\n if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {\n if (!this.ignoreHidden_ || (this.ignoreHidden_ && marker.getVisible())) {\n this.addToClosestCluster_(marker);\n }\n }\n }\n\n if (iLast < this.markers_.length) {\n this.timerRefStatic = setTimeout(function () {\n cMarkerClusterer.createClusters_(iLast);\n }, 0);\n } else {\n delete this.timerRefStatic;\n\n /**\n * This event is fired when the <code>MarkerClusterer</code> stops\n * clustering markers.\n * @name MarkerClusterer#clusteringend\n * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, \"clusteringend\", this);\n }\n};\n\n\n/**\n * Extends an object's prototype by another's.\n *\n * @param {Object} obj1 The object to be extended.\n * @param {Object} obj2 The object to extend with.\n * @return {Object} The new extended object.\n * @ignore\n */\nMarkerClusterer.prototype.extend = function (obj1, obj2) {\n return (function (object) {\n var property;\n for (property in object.prototype) {\n this.prototype[property] = object.prototype[property];\n }\n return this;\n }).apply(obj1, [obj2]);\n};\n\n\n/**\n * The default function for determining the label text and style\n * for a cluster icon.\n *\n * @param {Array.<google.maps.Marker>} markers The array of markers represented by the cluster.\n * @param {number} numStyles The number of marker styles available.\n * @return {ClusterIconInfo} The information resource for the cluster.\n * @constant\n * @ignore\n */\nMarkerClusterer.CALCULATOR = function (markers, numStyles) {\n var index = 0;\n var title = \"\";\n var count = markers.length.toString();\n\n var dv = count;\n while (dv !== 0) {\n dv = parseInt(dv / 10, 10);\n index++;\n }\n\n index = Math.min(index, numStyles);\n return {\n text: count,\n index: index,\n title: title\n };\n};\n\n\n/**\n * The number of markers to process in one batch.\n *\n * @type {number}\n * @constant\n */\nMarkerClusterer.BATCH_SIZE = 2000;\n\n\n/**\n * The number of markers to process in one batch (IE only).\n *\n * @type {number}\n * @constant\n */\nMarkerClusterer.BATCH_SIZE_IE = 500;\n\n\n/**\n * The default root name for the marker cluster images.\n *\n * @type {string}\n * @constant\n */\nMarkerClusterer.IMAGE_PATH = \"https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m\";\n\n\n/**\n * The default extension name for the marker cluster images.\n *\n * @type {string}\n * @constant\n */\nMarkerClusterer.IMAGE_EXTENSION = \"png\";\n\n\n/**\n * The default array of sizes for the marker cluster images.\n *\n * @type {Array.<number>}\n * @constant\n */\nMarkerClusterer.IMAGE_SIZES = [53, 56, 66, 78, 90];\n\nif (typeof module == 'object') {\n module.exports = MarkerClusterer;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@google/markerclustererplus/src/markerclusterer.js\n// module id = 8\n// module chunks = 0 1","import GoogleMaps from './models/apis/googleMaps';\r\nimport Leaflet from './models/apis/leaflet';\r\nimport IMapFunctions from './models/apis/mapFunctions';\r\nimport { MarkerEventType, CircleEventType, PolygonEventType, PolylineEventType, MapEventType } from './models/dto/event-type';\r\nimport { MapType } from './models/dto/map-type';\r\nimport CircleAlterOptions from './models/features/circle/circle-alter-options';\r\nimport CircleOptions from './models/features/circle/circle-options';\r\nimport GeoJsonOptions from './models/features/geojson/geojson-options';\r\nimport MarkerClustererConfig from './models/features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from './models/features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from './models/features/marker/marker-alter-options';\r\nimport MarkerOptions from './models/features/marker/marker-options';\r\nimport OverlayOptions from './models/features/overlay/overlay-options';\r\nimport PolygonAlterOptions from './models/features/polygons/polygon-alter-options';\r\nimport PolygonOptions from './models/features/polygons/polygon-options';\r\nimport PolylineOptions from './models/features/polyline/polyline-options';\r\nimport PopupOptions from './models/features/popup/popup-options';\r\n\r\nexport default class Map {\r\n private markersList = {};\r\n private polygonsList = {};\r\n private circlesList = {};\r\n private polylinesList = {};\r\n private infoWindowList = {};\r\n private overlayList = {};\r\n private map: IMapFunctions;\r\n private markerClusterer = {};\r\n\r\n constructor() { /**/ }\r\n\r\n /**\r\n * Use this to initialize map\r\n * @param {InlogMaps.MapType} mapType\r\n * @param {any} options\r\n * @param {string} elementId default: 'inlog-map' [nullable]\r\n * @returns {Promisse<any>}\r\n */\r\n public initialize(mapType: MapType, options: any, elementId: string = 'inlog-map'): Promise<any> {\r\n this.map = mapType === MapType.Google ? new GoogleMaps() : new Leaflet();\r\n return this.map.initialize(mapType, options, elementId);\r\n }\r\n\r\n /* GEOJson */\r\n /**\r\n * Use this function to add GEOJSON to the currentMap\r\n * @param {object} data Geojson\r\n * @param {InlogMaps.GeoJsonOptions} options\r\n * @param {any} eventClick is a function callback on click [nullable]\r\n */\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick?: any): void {\r\n this.map.loadGEOJson(data, options, eventClick);\r\n }\r\n\r\n /* Markers */\r\n /**\r\n * Use this function to draw markers in the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerOptions} options\r\n * @param {any} eventClick is a function callback on click [nullable]\r\n */\r\n public drawMarker(type: string, options: MarkerOptions, eventClick?: any): void {\r\n const marker = this.map.drawMarker(options, eventClick);\r\n\r\n if (!this.markersList[type]) {\r\n this.markersList[type] = [];\r\n }\r\n marker.type = 'simple';\r\n this.markersList[type].push(marker);\r\n\r\n if (options.addClusterer) {\r\n if (!this.markerClusterer[type]) {\r\n this.addMarkerClusterer(type, new MarkerClustererConfig(true, 1, 10));\r\n }\r\n\r\n this.map.addMarkerOnClusterer(marker, this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to draw circle markers in the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.CircleMarkerOptions} options\r\n * @param {any} eventClick is a function callback on click [nullable]\r\n */\r\n public drawCircleMarker(type: string, options: CircleMarkerOptions, eventClick?: any): void {\r\n const marker = this.map.drawCircleMarker(options, eventClick);\r\n\r\n if (!this.markersList[type]) {\r\n this.markersList[type] = [];\r\n }\r\n marker.type = 'circle';\r\n this.markersList[type].push(marker);\r\n }\r\n\r\n /**\r\n * Use this function to show/hide markers from a specific type\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toogle markers with the condition [nullable]\r\n */\r\n public toggleMarkers(show: boolean, type: string, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n if (markers && markers.length) {\r\n this.map.toggleMarkers(markers, show, this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /**\r\n * Remove markers from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove markers with the condition [nullable]\r\n */\r\n public removeMarkers(type: string, condition?: any): void {\r\n if (this.markersList[type] && condition) {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.toggleMarkers(markers, false, this.markerClusterer[type]);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.markersList[type] = this.markersList[type].filter((marker: any) => !condition(marker.object));\r\n } else {\r\n if (this.markersList[type]) {\r\n this.map.toggleMarkers(this.markersList[type], false, this.markerClusterer[type]);\r\n }\r\n this.markersList[type] = [];\r\n }\r\n\r\n if (this.markersList[type].length === 0) {\r\n delete this.markersList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all markers from the map and from the internal list\r\n */\r\n public removeAllMarkers(): void {\r\n for (const type in this.markersList) {\r\n if (this.markersList.hasOwnProperty(type)) {\r\n this.removeMarkers(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter marker style\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerAlterOptions} options\r\n * @param {any} condition alter markers with the condition [nullable]\r\n */\r\n public alterMarkerOptions(type: string, options: MarkerAlterOptions, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n if (markers && markers.length) {\r\n this.map.alterMarkerOptions(markers, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this functions to alterar marker position\r\n * @param {string } type\r\n * @param {number[]} position\r\n * @param {boolean} addTransition [nullable]\r\n * @param {any} condition [nullable]\r\n */\r\n public alterMarkerPosition(type: string, position: number[], addTransition?: boolean, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n if (markers && markers.length) {\r\n this.map.alterMarkerPosition(markers, position, addTransition);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to fit bounds in the markers with the especified type\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @param {boolean} onlyMarkersOnMap default true\r\n */\r\n public fitBoundsMarkers(type: string, condition?: any, onlyMarkersOnMap: boolean = true): void {\r\n let markers = this.getMarkers(type, condition);\r\n\r\n if (onlyMarkersOnMap) {\r\n markers = markers.filter((x: any) => this.map.isMarkerOnMap(x));\r\n }\r\n\r\n if (markers && markers.length) {\r\n this.map.fitBoundsPositions(markers);\r\n }\r\n }\r\n\r\n /**\r\n * Use this functions to set the center of the map on marker\r\n * @param {string} type\r\n * @param {any} condition center on marker with the condition [nullable]\r\n */\r\n public setCenterMarker(type: string, condition?: any): void {\r\n if (this.markersList[type] && condition) {\r\n const marker = this.markersList[type].find((marker: any) => condition(marker.object));\r\n\r\n // Center on the marker with the condition\r\n this.map.setCenterMarker(marker);\r\n } else {\r\n if (this.markersList[type] && this.markersList[type].length) {\r\n this.map.setCenterMarker(this.markersList[type][0]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if marker exists\r\n * @param type\r\n * @param condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public markerExists(type: string, condition?: any): boolean {\r\n const markers = this.getMarkers(type, condition);\r\n return markers && markers.length > 0;\r\n }\r\n\r\n /**\r\n * Use this function to count markers by type\r\n * @param {string} type\r\n * @param {boolean} onlyOnMap exclude hidden markers, default true\r\n * @param {any} condition\r\n * @returns {number}\r\n */\r\n public countMarkers(type: string, onlyOnMap: boolean = true, condition?: any): number {\r\n if (this.markerClusterer[type]) {\r\n return this.map.countMarkersOnCluster(this.markerClusterer[type]);\r\n }\r\n\r\n let markers = this.getMarkers(type, condition);\r\n if (onlyOnMap) {\r\n markers = markers.filter((x: any) => this.map.isMarkerOnMap(x));\r\n }\r\n\r\n return markers.length;\r\n }\r\n\r\n /**\r\n * This function add new events on marker\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addMarkerEvent(type: string, event: MarkerEventType, eventFunction: any, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n this.map.addMarkerEvent(markers, event, eventFunction);\r\n }\r\n\r\n /**\r\n * This function remove events of marker\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removeMarkerEvent(type: string, event: MarkerEventType, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n this.map.removeMarkerEvent(markers, event);\r\n }\r\n\r\n /* Marker Clusterer */\r\n /**\r\n * Use this function to add MarkerClusterer on the map\r\n * @param {string} type same type of markers\r\n * @param {InlogMaps.MarkerClusterConfig} config\r\n */\r\n public addMarkerClusterer(type: string, config: MarkerClustererConfig): void {\r\n this.markerClusterer[type] = this.map.addMarkerClusterer(config);\r\n }\r\n\r\n /**\r\n * Use this function to alter clusterer options\r\n * @param type same type of markers\r\n * @param {InlogMaps.MarkerClusterConfig} config\r\n */\r\n public alterMarkerClustererConfig(type: string, config: MarkerClustererConfig): void {\r\n if (this.markerClusterer[type]) {\r\n this.map.alterMarkerClustererConfig(this.markerClusterer[type], config);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to redraw marker clusterer\r\n * @param type same type of markers\r\n */\r\n public refreshClusterer(type: string): void {\r\n if (this.markerClusterer[type]) {\r\n this.map.refreshClusterer(this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /**\r\n * Use this to clear markers on clusterer\r\n * @param type same type of markers\r\n */\r\n public clearMarkersClusterer(type: string): void {\r\n if (this.markerClusterer[type]) {\r\n this.map.clearMarkersClusterer(this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /* Polygons */\r\n /**\r\n * Use this function to draw polygons\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonOptions} options\r\n * @param {any} eventClick [nullable]\r\n */\r\n public drawPolygon(type: string, options: PolygonOptions, eventClick?: any): void {\r\n const polygon = this.map.drawPolygon(options, eventClick);\r\n\r\n if (!this.polygonsList[type]) {\r\n this.polygonsList[type] = [];\r\n }\r\n this.polygonsList[type].push(polygon);\r\n }\r\n\r\n /**\r\n * Use this function to show/hide polygon from a especific type\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toggle polygon with the condition [nullable]\r\n */\r\n public togglePolygons(show: boolean, type: string, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n if (polygons && polygons.length) {\r\n this.map.togglePolygons(polygons, show);\r\n }\r\n }\r\n\r\n /**\r\n * Remove polygons from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove polygons with the condition [nullable]\r\n */\r\n public removePolygons(type: string, condition?: any): void {\r\n if (this.polygonsList[type] && condition) {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.togglePolygons(polygons, false);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.polygonsList[type] = this.polygonsList[type].filter((polygon: any) => !condition(polygon.object));\r\n } else {\r\n if (this.polygonsList[type]) {\r\n this.map.togglePolygons(this.polygonsList[type], false);\r\n }\r\n this.polygonsList[type] = [];\r\n }\r\n\r\n if (this.polygonsList[type].length === 0) {\r\n delete this.polygonsList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all polygons from the map and from the internal list\r\n */\r\n public removeAllPolygons(): void {\r\n for (const type in this.polygonsList) {\r\n if (this.polygonsList.hasOwnProperty(type)) {\r\n this.removePolygons(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter polygons options/style\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonAlterOptions} options\r\n * @param {any} condition alter polygon with the condition [nullable]\r\n */\r\n public alterPolygonOptions(type: string, options: PolygonAlterOptions, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n if (polygons && polygons.length) {\r\n this.map.alterPolygonOptions(polygons, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to fit bounds of a polygon\r\n * @param {string} type\r\n * @param {any} condition fit polygon bounds with the condition [nullable]\r\n */\r\n public fitBoundsPolygons(type: string, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition)\r\n .filter((polygon: any) => this.map.isPolygonOnMap(polygon));\r\n\r\n if (polygons && polygons.length) {\r\n this.map.fitBoundsPolygons(polygons);\r\n }\r\n }\r\n\r\n /**\r\n * Set center on polygon bounds\r\n * @param {string} type\r\n * @param {any} condition fit polygon bounds with the condition [nullable]\r\n */\r\n public setCenterPolygons(type: string, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition)\r\n .filter((polygon: any) => this.map.isPolygonOnMap(polygon));\r\n\r\n if (polygons && polygons.length) {\r\n this.map.setCenterPolygons(polygons);\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if polygon exists\r\n * @param type\r\n * @param condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public polygonExists(type: string, condition?: any): boolean {\r\n const polygons = this.getPolygons(type, condition);\r\n return polygons && polygons.length > 0;\r\n }\r\n\r\n /**\r\n * Use this function to get the path of some polygon\r\n * @param {string} type\r\n * @param {any} condition\r\n * @returns {number[]}\r\n */\r\n public getPolygonPath(type: string, condition?: any): number[][] {\r\n const polygon = this.getPolygons(type, condition);\r\n\r\n if (polygon && polygon.length) {\r\n return this.map.getPolygonPath(polygon[0]);\r\n }\r\n }\r\n\r\n /**\r\n * This function add new events on polygon\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addPolygonEvent(type: string, event: PolygonEventType, eventFunction: any, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n this.map.addPolygonEvent(polygons, event, eventFunction);\r\n }\r\n\r\n /**\r\n * This function remove events of polygon\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removePolygonEvent(type: string, event: PolygonEventType, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n this.map.removePolygonEvent(polygons, event);\r\n }\r\n\r\n /* Circles */\r\n /**\r\n * Use this function to draw circles on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.CircleOptions} options\r\n * @param {any} eventClick [nullable]\r\n */\r\n public drawCircle(type: string, options: CircleOptions, eventClick?: any): void {\r\n const circle = this.map.drawCircle(options, eventClick);\r\n\r\n if (!this.circlesList[type]) {\r\n this.circlesList[type] = [];\r\n }\r\n this.circlesList[type].push(circle);\r\n }\r\n\r\n /**\r\n * Use this function to show/hide circles from a especific type\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toggle circles with the condition [nullable]\r\n */\r\n public toggleCircles(show: boolean, type: string, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n this.map.toggleCircles(circles, show);\r\n }\r\n }\r\n\r\n /**\r\n * Remove circles from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove circles with the condition [nullable]\r\n */\r\n public removeCircles(type: string, condition?: any): void {\r\n if (this.circlesList[type] && condition) {\r\n const circles = this.getCircles(type, condition);\r\n\r\n // Hide circles with the condition\r\n this.map.toggleCircles(circles, false);\r\n\r\n // Keep circles that doesn't have the condition\r\n this.circlesList[type] = this.circlesList[type].filter((circle: any) => !condition(circle.object));\r\n } else {\r\n if (this.circlesList[type]) {\r\n this.map.toggleCircles(this.circlesList[type], false);\r\n }\r\n this.circlesList[type] = [];\r\n }\r\n\r\n if (this.circlesList[type].length === 0) {\r\n delete this.circlesList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all circles from the map and from the internal list\r\n */\r\n public removeAllCircles(): void {\r\n for (const type in this.circlesList) {\r\n if (this.circlesList.hasOwnProperty(type)) {\r\n this.removeCircles(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter circle options\r\n * @param {string} type\r\n * @param {InlogMaps.CircleAlterOptions} options\r\n * @param {any} condition alter circle with the condition [nullable]\r\n */\r\n public alterCircleOptions(type: string, options: CircleAlterOptions, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n this.map.alterCircleOptions(circles, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to fit bounds of a polygon\r\n * @param {string} type\r\n * @param {any} condition fit polygon bounds with the condition [nullable]\r\n */\r\n public fitBoundsCircles(type: string, condition?: any): void {\r\n const circles = this.getCircles(type, condition)\r\n .filter((circle: any) => this.map.isCircleOnMap(circle));\r\n\r\n if (circles && circles.length) {\r\n this.map.fitBoundsCircles(circles);\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if circle exists\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public circleExists(type: string, condition?: any): boolean {\r\n const circles = this.getCircles(type, condition);\r\n return circles && circles.length > 0;\r\n }\r\n\r\n /**\r\n * This function return circle center\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {number[]}\r\n */\r\n public getCircleCenter(type: string, condition?: any): number[] {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n return this.map.getCircleCenter(circles[0]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * This function return circle center\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {number}\r\n */\r\n public getCircleRadius(type: string, condition?: any): number {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n return this.map.getCircleRadius(circles[0]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * This function add new events on circle\r\n * @param {string} type\r\n * @param {InlogMaps.CircleEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addCircleEvent(type: string, event: CircleEventType, eventFunction: any, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n this.map.addCircleEvent(circles, event, eventFunction);\r\n }\r\n\r\n /**\r\n * This function remove events of circle\r\n * @param {string} type\r\n * @param {InlogMaps.CircleEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removeCircleEvent(type: string, event: CircleEventType, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n this.map.removeCircleEvent(circles, event);\r\n }\r\n\r\n /* Polylines */\r\n /**\r\n * Use this function to draw polylines on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineOptions} options\r\n * @param {any} eventClick [nullable]\r\n */\r\n public drawPolyline(type: string, options: PolylineOptions, eventClick?: any): void {\r\n const polyline = this.map.drawPolyline(options, eventClick);\r\n\r\n if (!this.polylinesList[type]) {\r\n this.polylinesList[type] = [];\r\n }\r\n this.polylinesList[type].push(polyline);\r\n }\r\n\r\n /**\r\n * Use this function to draw polylines with navigation on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineOptions} options\r\n */\r\n public drawPolylineWithNavigation(type: string, options: PolylineOptions, eventClick?: any): void {\r\n const polyline = this.map.drawPolylineWithNavigation(options, eventClick);\r\n\r\n if (!this.polylinesList[type]) {\r\n this.polylinesList[type] = [];\r\n }\r\n this.polylinesList[type].push(polyline);\r\n }\r\n\r\n /**\r\n * Use this function to toggle polylines\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toggle polyline with the condition [nullable]\r\n */\r\n public togglePolylines(show: boolean, type: string, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n this.map.togglePolylines(polyline, show);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to remove polylines\r\n * @param {string} type\r\n * @param {any} condition remove polyline with the condition [nullable]\r\n */\r\n public removePolylines(type: string, condition?: any): void {\r\n if (this.polylinesList[type] && condition) {\r\n const polylines = this.getPolylines(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.togglePolylines(polylines, false);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.polylinesList[type] = this.polylinesList[type].filter((polyline: any) => !condition(polyline.object));\r\n } else {\r\n if (this.polylinesList[type]) {\r\n this.map.togglePolylines(this.polylinesList[type], false);\r\n }\r\n this.polylinesList[type] = [];\r\n }\r\n\r\n if (this.polylinesList[type].length === 0) {\r\n delete this.polylinesList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all polylines from the map and from the internal list\r\n */\r\n public removeAllPolylines(): void {\r\n for (const type in this.polylinesList) {\r\n if (this.polylinesList.hasOwnProperty(type)) {\r\n this.removePolylines(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter polyline options\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineOptions} options\r\n * @param {any} condition alter polyline with the condition [nullable]\r\n */\r\n public alterPolylineOptions(type: string, options: PolylineOptions, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n this.map.alterPolylineOptions(polyline, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this functions to fit polylines bounds\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n */\r\n public fitBoundsPolylines(type: string, condition?: any): void {\r\n const polylines = this.getPolylines(type, condition)\r\n .filter((polyline: any) => this.map.isPolylineOnMap(polyline));\r\n\r\n if (polylines && polylines.length) {\r\n this.map.fitBoundsPolylines(polylines);\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if polyline exists\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public polylineExists(type: string, condition?: any): boolean {\r\n const polylines = this.getPolylines(type, condition);\r\n return polylines && polylines.length > 0;\r\n }\r\n\r\n /**\r\n * Use this function to add more paths to a polyline\r\n * @param {string} type\r\n * @param {number[]} position\r\n * @param {any} condition [nullable]\r\n */\r\n public addPolylinePath(type: string, position: number[], condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n this.map.addPolylinePath(polyline, position);\r\n } else {\r\n const options = new PolylineOptions();\r\n options.addToMap = true;\r\n\r\n this.drawPolyline(type, options, null);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to get the path of some polyline\r\n * @param {string} type\r\n * @param {any} condition\r\n * @returns {number[]}\r\n */\r\n public getPolylinePath(type: string, condition?: any): number[][] {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n return this.map.getPolylinePath(polyline[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to clear polyline selected from the currentMap\r\n */\r\n public removePolylineHighlight(): void {\r\n this.map.removePolylineHighlight();\r\n }\r\n\r\n /**\r\n * Use this function to add listeners on polyline\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addPolylineEvent(type: string, event: PolylineEventType, eventFunction: any, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n this.map.addPolylineEvent(polyline, event, eventFunction);\r\n }\r\n\r\n /**\r\n * Use this function to remove listeners of polyline\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removePolylineEvent(type: string, event: PolylineEventType, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n this.map.removePolylineEvent(polyline, event);\r\n }\r\n\r\n /**\r\n * Use this function to set position of polyline highlight\r\n * @param {string} type\r\n * @param {number} initialIndex\r\n * @param {any} condition [nullable]\r\n */\r\n public setIndexPolylineHighlight(type: string, initialIndex: number, condition?: any) {\r\n const polylines = this.getPolylines(type, condition);\r\n\r\n if (polylines && polylines.length) {\r\n this.map.setIndexPolylineHighlight(polylines[0], initialIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to get the object of a polyline\r\n * @param {string} type\r\n * @param {any} condition\r\n * @returns {object}\r\n */\r\n public getObjectPolyline(type: string, condition?: any): object {\r\n const polylines = this.getPolylines(type, condition);\r\n\r\n if (polylines && polylines.length) {\r\n return this.map.getObjectPolyline(polylines[0]);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to get the object of the polyline highligth\r\n * @returns {object}\r\n */\r\n public getObjectPolylineHighlight(): any {\r\n return this.map.getObjectPolylineHighlight();\r\n }\r\n\r\n /**\r\n * Use this function to add events on polyline highligtht / selected polyline\r\n * @param {InlogMaps.PolylineEventType} event\r\n * @param {any} eventFunction\r\n */\r\n public addPolylineHighlightEvent(event: PolylineEventType, eventFunction: any) {\r\n this.map.addPolylineHighlightEvent(event, eventFunction);\r\n }\r\n\r\n /**\r\n * Use this function to get initial and final index of the polyline highlight\r\n * @returns {number[]} returns an array with initial index and final index\r\n */\r\n public getPolylineHighlightIndex(): number[] {\r\n return this.map.getPolylineHighlightIndex();\r\n }\r\n\r\n /* Info Windows */\r\n /**\r\n * Use this function to draw popups on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.PopupOptions} options\r\n */\r\n public drawPopup(type: string, options: PopupOptions): void {\r\n let marker: any = null;\r\n if (options.marker) {\r\n const markers = this.getMarkers(options.marker, options.conditionMarker);\r\n marker = markers[0];\r\n }\r\n\r\n let popup: any;\r\n if (this.infoWindowList[type]) {\r\n popup = this.map.alterPopup(this.infoWindowList[type], options, marker);\r\n } else {\r\n popup = this.map.drawPopup(options, marker);\r\n }\r\n\r\n this.infoWindowList[type] = popup;\r\n }\r\n\r\n /**\r\n * Use this function to alter popups\r\n * @param {string} type\r\n * @param {InlogMaps.PopupOptions} options\r\n */\r\n public alterPopup(type: string, options: PopupOptions): void {\r\n const popups = this.infoWindowList[type];\r\n\r\n let markers: any;\r\n if (options.marker) {\r\n markers = this.getMarkers(options.marker, options.conditionMarker);\r\n }\r\n\r\n if (popups) {\r\n this.map.alterPopupContent(popups, options, markers ? markers[0] : null);\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} type\r\n * @returns {object}\r\n */\r\n public getObjectOpenPopup(type: string): object {\r\n return this.infoWindowList[type] ? this.infoWindowList[type].object : null;\r\n }\r\n\r\n /**\r\n * Use this function to close popup by type\r\n * @param {string} type\r\n */\r\n public closePopup(type: string): void {\r\n if (this.infoWindowList[type]) {\r\n this.map.closePopup(this.infoWindowList[type])\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to close all popups\r\n * @param {string} type\r\n */\r\n public closeAllPopups(): void {\r\n for (const type in this.infoWindowList) {\r\n if (this.infoWindowList.hasOwnProperty(type)) {\r\n this.closePopup(type);\r\n }\r\n }\r\n }\r\n\r\n /* Map */\r\n /**\r\n * Resize de map based on html size\r\n */\r\n public resizeMap(): void {\r\n this.map.resizeMap();\r\n }\r\n\r\n /**\r\n * Use this function to add event clicks on the currentMap\r\n * @param {InlogMaps.MapEventType} eventType\r\n * @param eventFunction function callback\r\n */\r\n public addEventMap(eventType: MapEventType, eventFunction: any): void {\r\n this.map.addEventMap(eventType, eventFunction);\r\n }\r\n\r\n /**\r\n * Use this function to remove event clicks from the currentMap\r\n * @param {InlogMaps.MapEventType} eventType\r\n */\r\n public removeEventMap(eventType: MapEventType): void {\r\n this.map.removeEventMap(eventType);\r\n }\r\n\r\n /**\r\n * Returns the current zoom level of the map view\r\n * @returns {number}\r\n */\r\n public getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n /**\r\n * Set the current zoom level of the map view\r\n * @param {number} zoom\r\n */\r\n public setZoom(zoom: number): void {\r\n this.map.setZoom(zoom);\r\n }\r\n\r\n /**\r\n * Returns the center position of the map\r\n * @returns {number[]}\r\n */\r\n public getCenter(): number[] {\r\n return this.map.getCenter();\r\n }\r\n\r\n /**\r\n * Set the position center of the map\r\n * @param {number[]} position\r\n */\r\n public setCenter(position: number[]): void {\r\n this.map.setCenter(position);\r\n }\r\n\r\n /**\r\n * Returns the coordinates from pixels\r\n * @param {number} offsetx\r\n * @param {number} offsety\r\n * @returns {number[]}\r\n */\r\n public pixelsToLatLng(offsetx: number, offsety: number): number[] {\r\n return this.map.pixelsToLatLng(offsetx, offsety);\r\n }\r\n\r\n /**\r\n * Use this functions to fit bounds on elements with same type and condition\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n */\r\n public fitBoundsElements(type: string, condition?: any): void {\r\n const markers = this.getMarkers(type, condition)\r\n .filter((marker: any) => this.map.isMarkerOnMap(marker));\r\n\r\n const circles = this.getCircles(type, condition)\r\n .filter((circle: any) => this.map.isCircleOnMap(circle));\r\n\r\n const polygons = this.getPolygons(type, condition)\r\n .filter((polygon: any) => this.map.isPolygonOnMap(polygon));\r\n\r\n const polylines = this.getPolylines(type, condition)\r\n .filter((polyline: any) => this.map.isPolylineOnMap(polyline));\r\n\r\n this.map.fitBoundsElements(markers, circles, polygons, polylines);\r\n }\r\n\r\n /* Overlay */\r\n /**\r\n * Use this function to dray overlays on the current map\r\n * @param {string} type\r\n * @param {InlogMaps.OverlayOptions} options\r\n */\r\n public drawOverlay(type: string, options: OverlayOptions): void {\r\n let overlay = null;\r\n\r\n if (options.polygon) {\r\n const polygons = this.getPolygons(options.polygon, options.conditionPolygon);\r\n\r\n if (polygons && polygons.length) {\r\n overlay = this.map.drawOverlay(options, polygons);\r\n }\r\n } else {\r\n overlay = this.map.drawOverlay(options);\r\n }\r\n\r\n if (overlay != null) {\r\n if (!this.overlayList[type]) {\r\n this.overlayList[type] = [];\r\n }\r\n this.overlayList[type].push(overlay);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to show or hide overlay\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n */\r\n public toggleOverlay(show: boolean, type: string, condition?: any): void {\r\n const overlays = this.getOverlays(type, condition);\r\n\r\n if (overlays && overlays.length) {\r\n this.map.toggleOverlay(overlays, show);\r\n }\r\n }\r\n\r\n /**\r\n * Remove overlays from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove overlays with the condition [nullable]\r\n */\r\n public removeOverlays(type: string, condition?: any): void {\r\n if (this.overlayList[type] && condition) {\r\n const overlays = this.getOverlays(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.toggleOverlay(overlays, false);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.overlayList[type] = this.overlayList[type].filter((overlay: any) => !condition(overlay.object));\r\n } else {\r\n if (this.overlayList[type]) {\r\n this.map.toggleOverlay(this.overlayList[type], false);\r\n }\r\n this.overlayList[type] = [];\r\n }\r\n\r\n if (this.overlayList[type].length === 0) {\r\n delete this.overlayList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all overlays from the map and from the internal list\r\n */\r\n public removeAllOverlays(): void {\r\n for (const type in this.overlayList) {\r\n if (this.overlayList.hasOwnProperty(type)) {\r\n this.removeOverlays(type);\r\n }\r\n }\r\n }\r\n\r\n /* Private Methods */\r\n private getMarkers(type: string, condition: any): any[] {\r\n const markers = this.markersList[type];\r\n\r\n if (markers && markers.length) {\r\n return condition ? markers.filter((marker: any) => condition(marker.object)) : markers;\r\n } else return [];\r\n }\r\n\r\n private getPolygons(type: string, condition: any): any[] {\r\n const polygons = this.polygonsList[type];\r\n\r\n if (polygons && polygons.length) {\r\n return condition ? polygons.filter((polygon: any) => condition(polygon.object)) : polygons;\r\n } else return [];\r\n }\r\n\r\n private getCircles(type: string, condition: any): any[] {\r\n const circles = this.circlesList[type];\r\n\r\n if (circles && circles.length) {\r\n return condition ? circles.filter((circle: any) => condition(circle.object)) : circles;\r\n } else return [];\r\n }\r\n\r\n private getPolylines(type: string, condition: any): any[] {\r\n const polylines = this.polylinesList[type];\r\n\r\n if (polylines && polylines.length) {\r\n return condition ? polylines.filter((polyline: any) => condition(polyline.object)) : polylines;\r\n } else return [];\r\n }\r\n\r\n private getOverlays(type: string, condition: any): any[] {\r\n const overlays = this.overlayList[type];\r\n\r\n if (overlays && overlays.length) {\r\n return condition ? overlays.filter((overlay: any) => condition(overlay.object)) : overlays;\r\n } else return [];\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/map.ts","import { MapsApiLoaderService } from '../../utils/maps-api-loader.service';\r\nimport { CircleEventType, MapEventType, MarkerEventType, PolygonEventType, PolylineEventType } from '../dto/event-type';\r\nimport { MapType } from '../dto/map-type';\r\nimport CircleAlterOptions from '../features/circle/circle-alter-options';\r\nimport CircleOptions from '../features/circle/circle-options';\r\nimport GeoJsonOptions from '../features/geojson/geojson-options';\r\nimport MarkerClustererConfig from '../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../features/marker/marker-options';\r\nimport OverlayOptions from '../features/overlay/overlay-options';\r\nimport PolygonAlterOptions from '../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../features/polygons/polygon-options';\r\nimport PolylineOptions from '../features/polyline/polyline-options';\r\nimport PopupOptions from '../features/popup/popup-options';\r\nimport GoogleCircles from './google/google-circles';\r\nimport GoogleGeoJson from './google/google-geojson';\r\nimport GoogleMap from './google/google-map';\r\nimport GoogleMarkers from './google/google-markers';\r\nimport GoogleOverlays from './google/google-overlay';\r\nimport GooglePolygons from './google/google-polygons';\r\nimport GooglePolylines from './google/google-polylines';\r\nimport GooglePopups from './google/google-popup';\r\nimport IMapFunctions from './mapFunctions';\r\n\r\nexport default class GoogleMaps implements IMapFunctions {\r\n private googleMarkers: GoogleMarkers;\r\n private googlePolygons: GooglePolygons;\r\n private googleCircles: GoogleCircles;\r\n private googlePolylines: GooglePolylines;\r\n private googlePopups: GooglePopups;\r\n private googleMap: GoogleMap;\r\n private googleOverlays: GoogleOverlays;\r\n private googleGeoJson: GoogleGeoJson;\r\n\r\n private mapsApiLoader: MapsApiLoaderService = new MapsApiLoaderService();\r\n\r\n constructor() { /* */ }\r\n\r\n public async initialize(mapType: MapType, params: any, elementId: string): Promise<any> {\r\n try {\r\n const api = await this.mapsApiLoader.loadApi(mapType, params);\r\n const google = api;\r\n const options: any = {\r\n center: new google.maps.LatLng(-14, -54),\r\n fullscreenControl: false,\r\n keyboardShortcuts: false,\r\n mapTypeControl: true,\r\n minZoom: 4,\r\n rotateControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n zoom: 4,\r\n zoomControl: true\r\n };\r\n\r\n if (params.gestureHandling) {\r\n options.gestureHandling = 'cooperative';\r\n } else {\r\n options.gestureHandling = 'greedy';\r\n }\r\n\r\n if (params.options) {\r\n for (const key in params.options) {\r\n if (params.options.hasOwnProperty(key)) {\r\n options[key] = params.options[key];\r\n }\r\n }\r\n }\r\n\r\n const imageMapTypes = [];\r\n if (params.mapTiles) {\r\n const ids = [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE];\r\n\r\n params.mapTiles.forEach((tile: any) => {\r\n ids.push(tile.name);\r\n\r\n const mapTypeOptions = {\r\n getTileUrl: (coord: any, zoom: any) =>\r\n `https://tile.openstreetmap.org/${zoom}/${coord.x}/${coord.y}.png`,\r\n isPng: true,\r\n maxZoom: 19,\r\n minZoom: 0,\r\n name: 'OpenStreetMap',\r\n tileSize: new google.maps.Size(256, 256),\r\n };\r\n\r\n for (const key in tile) {\r\n if (tile.hasOwnProperty(key)) {\r\n mapTypeOptions[key] = tile[key];\r\n }\r\n }\r\n\r\n const imageMapType = new google.maps.ImageMapType(mapTypeOptions);\r\n imageMapTypes.push({ id: tile.name, tile: imageMapType });\r\n });\r\n\r\n options.mapTypeControlOptions = {\r\n mapTypeIds: ids,\r\n style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR\r\n };\r\n }\r\n\r\n const map = new google.maps.Map(document.getElementById(elementId), options);\r\n this.googleMarkers = new GoogleMarkers(map, google);\r\n this.googlePolygons = new GooglePolygons(map, google);\r\n this.googleCircles = new GoogleCircles(map, google);\r\n this.googlePopups = new GooglePopups(map, google);\r\n this.googlePolylines = new GooglePolylines(map, google, this.googlePopups);\r\n this.googleMap = new GoogleMap(map, google);\r\n this.googleOverlays = new GoogleOverlays(map, google, this.googlePolygons);\r\n this.googleGeoJson = new GoogleGeoJson(map, google);\r\n\r\n if (imageMapTypes && imageMapTypes.length) {\r\n imageMapTypes.forEach((image: any) => {\r\n map.mapTypes.set(image.id, image.tile);\r\n });\r\n }\r\n\r\n if (params.showTraffic) {\r\n const trafficLayer = new google.maps.TrafficLayer();\r\n trafficLayer.setMap(map);\r\n }\r\n\r\n return this;\r\n } catch (err) {\r\n return err;\r\n }\r\n }\r\n\r\n /* GEOJson */\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any) {\r\n this.googleGeoJson.loadGEOJson(data, options, eventClick);\r\n }\r\n\r\n /* Markers */\r\n public drawMarker(options: MarkerOptions, eventClick: any): any {\r\n return this.googleMarkers.drawMarker(options, eventClick);\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any): any {\r\n return this.googleMarkers.drawCircleMarker(options, eventClick);\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any): void {\r\n this.googleMarkers.toggleMarkers(markers, show, markerClusterer);\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions): void {\r\n this.googleMarkers.alterMarkerOptions(markers, options);\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean): void {\r\n this.googleMarkers.alterMarkerPosition(markers, position, addTransition);\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]): void {\r\n this.googleMarkers.fitBoundsPositions(markers);\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return this.googleMarkers.isMarkerOnMap(marker);\r\n }\r\n\r\n public setCenterMarker(marker: any): void {\r\n this.googleMarkers.setCenterMarker(marker);\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any): void {\r\n this.googleMarkers.addMarkerEvent(markers, eventType, eventFunction);\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n this.googleMarkers.removeMarkerEvent(markers, event);\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n return this.googleMarkers.addMarkerClusterer(config);\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n this.googleMarkers.alterMarkerClustererConfig(markerClusterer, config);\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n this.googleMarkers.refreshClusterer(markerClusterer);\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n this.googleMarkers.addMarkerOnClusterer(marker, markerClusterer);\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n this.googleMarkers.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n this.googleMarkers.clearMarkersClusterer(markerClusterer);\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return this.googleMarkers.countMarkersOnCluster(markerClusterer);\r\n }\r\n\r\n /* Polygons */\r\n public drawPolygon(options: PolygonOptions, eventClick: any): any {\r\n return this.googlePolygons.drawPolygon(options, eventClick);\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean): void {\r\n this.googlePolygons.togglePolygons(polygons, show);\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions): void {\r\n this.googlePolygons.alterPolygonOptions(polygons, options);\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.googlePolygons.fitBoundsPolygons(polygons);\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.googlePolygons.setCenterPolygons(polygons);\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return this.googlePolygons.isPolygonOnMap(polygon);\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return this.googlePolygons.getPolygonPath(polygon);\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n return this.googlePolygons.addPolygonEvent(polygons, eventType, eventFunction);\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n this.googlePolygons.removePolygonEvent(polygons, event);\r\n }\r\n\r\n /* Circles */\r\n public drawCircle(options: CircleOptions, eventClick: any): any {\r\n return this.googleCircles.drawCircle(options, eventClick);\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean): void {\r\n this.googleCircles.toggleCircles(circles, show);\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions): void {\r\n this.googleCircles.alterCircleOptions(circles, options);\r\n }\r\n\r\n public fitBoundsCircles(circles: any): void {\r\n this.googleCircles.fitBoundsCircles(circles);\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return this.googleCircles.isCircleOnMap(circle);\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n return this.googleCircles.getCircleCenter(circle);\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return this.googleCircles.getCircleRadius(circle);\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n this.googleCircles.addCircleEvent(circles, eventType, eventFunction);\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n this.googleCircles.removeCircleEvent(circles, event);\r\n }\r\n\r\n /* Polylines */\r\n public drawPolyline(options: PolylineOptions, eventClick: any): any {\r\n return this.googlePolylines.drawPolyline(options, eventClick);\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any): any {\r\n return this.googlePolylines.drawPolylineWithNavigation(options, eventClick);\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean): void {\r\n this.googlePolylines.togglePolylines(polylines, show);\r\n }\r\n\r\n public alterPolylineOptions(polylines: any, options: PolylineOptions): void {\r\n this.googlePolylines.alterPolylineOptions(polylines, options);\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any): void {\r\n this.googlePolylines.fitBoundsPolylines(polylines);\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return this.googlePolylines.isPolylineOnMap(polyline);\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]): void {\r\n this.googlePolylines.addPolylinePath(polylines, position);\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return this.googlePolylines.getPolylinePath(polyline);\r\n }\r\n\r\n public removePolylineHighlight(): void {\r\n this.googlePolylines.removePolylineHighlight();\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any): void {\r\n this.googlePolylines.addPolylineEvent(polylines, eventType, eventFunction);\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType): void {\r\n this.googlePolylines.removePolylineEvent(polylines, event);\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number): void {\r\n this.googlePolylines.setIndexPolylineHighlight(polyline, index);\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return this.googlePolylines.getObjectPolyline(polyline);\r\n }\r\n\r\n public getObjectPolylineHighlight(): object {\r\n return this.googlePolylines.getObjectPolylineHighlight();\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any): void {\r\n this.googlePolylines.addPolylineHighlightEvent(eventType, eventFunction);\r\n }\r\n\r\n public getPolylineHighlightIndex(): number[] {\r\n return this.googlePolylines.getPolylineHighlightIndex();\r\n }\r\n\r\n /* Info Windows */\r\n public drawPopup(options: PopupOptions, marker?: any): any {\r\n return this.googlePopups.drawPopup(options, marker);\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any): any {\r\n return this.googlePopups.alterPopup(popup, options, marker);\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any): void {\r\n this.googlePopups.alterPopupContent(popup, options, marker);\r\n }\r\n\r\n public closePopup(popup: any): void {\r\n this.googlePopups.closePopup(popup);\r\n }\r\n\r\n /* Map */\r\n public resizeMap(): void {\r\n this.googleMap.resizeMap();\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any): void {\r\n this.googleMap.addEventMap(eventType, eventFunction);\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType): void {\r\n this.googleMap.removeEventMap(eventType);\r\n }\r\n\r\n public getZoom(): number {\r\n return this.googleMap.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number): void {\r\n this.googleMap.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n return this.googleMap.getCenter();\r\n }\r\n\r\n public setCenter(position: number[]): void {\r\n this.googleMap.setCenter(position);\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number): number[] {\r\n return this.googleMap.pixelsToLatLng(offsetx, offsety);\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any): void {\r\n this.googleMap.fitBoundsElements(markers, circles, polygons, polylines);\r\n }\r\n\r\n /* Overlay */\r\n public drawOverlay(options: OverlayOptions, polygons: any) {\r\n return this.googleOverlays.drawOverlay(options, polygons);\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean): void {\r\n this.googleOverlays.toggleOverlay(overlays, show);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/googleMaps.ts","import { CircleEventType } from '../../dto/event-type';\r\nimport CircleAlterOptions from '../../features/circle/circle-alter-options';\r\nimport CircleOptions from '../../features/circle/circle-options';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class GoogleCircles {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawCircle(options: CircleOptions, eventClick: any) {\r\n const self = this;\r\n const latlng = {\r\n lat: options.center[0],\r\n lng: options.center[1]\r\n };\r\n const newOptions = {\r\n center: latlng,\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n fillColor: options.fillColor,\r\n fillOpacity: options.fillOpacity,\r\n object: options.object,\r\n radius: options.radius,\r\n strokeColor: options.color,\r\n strokeOpacity: options.opacity,\r\n strokeWeight: options.weight,\r\n suppressUndo: true\r\n };\r\n\r\n const circle = new this.google.maps.Circle(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(circle, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n circle.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(circle.getBounds());\r\n }\r\n\r\n return circle;\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean) {\r\n const self = this;\r\n circles.forEach((circle) => circle.setMap(show ? self.map : null));\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions) {\r\n circles.forEach((circle) => {\r\n const latlng = options.center && options.center.length > 0 ?\r\n { lat: options.center[0], lng: options.center[1] } : circle.getCenter();\r\n\r\n const newOptions = {\r\n center: latlng,\r\n fillColor: options.fillColor ? options.fillColor : circle.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : circle.fillOpacity,\r\n radius: options.radius ? options.radius : circle.radius,\r\n strokeColor: options.color ? options.color : circle.strokeColor,\r\n strokeOpacity: options.opacity ? options.opacity : circle.strokeOpacity,\r\n strokeWeight: options.weight ? options.weight : circle.strokeWeight,\r\n editable: options.editable !== null && options.editable !== undefined ?\r\n options.editable : circle.editable,\r\n draggable: options.draggable !== null && options.draggable !== undefined ?\r\n options.draggable : circle.draggable\r\n };\r\n\r\n circle.setOptions(newOptions);\r\n });\r\n }\r\n\r\n public fitBoundsCircles(circles: any): void {\r\n this.map.fitBounds(this.getCirclesBounds(circles));\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return !!circle.map;\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n const center = circle.getCenter();\r\n\r\n return [center.lat(), center.lng()];\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return circle.getRadius();\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n circles.forEach((circle: any) => {\r\n switch (eventType) {\r\n case CircleEventType.Click:\r\n this.google.maps.event.addListener(circle, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, circle.object);\r\n });\r\n break;\r\n case CircleEventType.CenterChanged:\r\n this.google.maps.event.addListener(circle, 'center_changed', () => {\r\n const param = new EventReturn([circle.getCenter().lat(), circle.getCenter().lng()]);\r\n eventFunction(param, circle.object);\r\n });\r\n case CircleEventType.RadiusChanged:\r\n this.google.maps.event.addListener(circle, 'radius_changed', (event: any) => {\r\n const param = new EventReturn([circle.getCenter().lat(), circle.getCenter().lng()]);\r\n eventFunction(param, circle.object, circle.getRadius());\r\n });\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n circles.forEach((circle: any) => {\r\n switch (event) {\r\n case CircleEventType.Click:\r\n this.google.maps.event.clearListeners(circle, 'click');\r\n case CircleEventType.CenterChanged:\r\n this.google.maps.event.clearListeners(circle, 'center_changed');\r\n case CircleEventType.RadiusChanged:\r\n this.google.maps.event.clearListeners(circle, 'radius_changed');\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n private getCirclesBounds(circles: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n circles.forEach((circulo: any) => bounds.union(circulo.getBounds()));\r\n return bounds;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-circles.ts","import EventReturn from '../../features/events/event-return';\r\nimport GeoJsonOptions from '../../features/geojson/geojson-options';\r\n\r\nexport default class GoogleGeoJson {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any) {\r\n const self = this;\r\n const objects = self.parseGeoJson(data, options);\r\n\r\n objects.forEach((elem) => {\r\n if (eventClick) {\r\n elem.addListener('click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param);\r\n });\r\n }\r\n elem.setMap(self.map);\r\n });\r\n }\r\n\r\n private parseGeoJson(data: any, options: GeoJsonOptions) {\r\n const self = this;\r\n const parsedFeatures = [];\r\n\r\n if (Array.isArray(data.features)) {\r\n for (const feature of data.features) {\r\n parsedFeatures.push(self.parseGeoJsonToObject(feature, options));\r\n }\r\n } else {\r\n parsedFeatures.push(self.parseGeoJsonToObject(data, options));\r\n }\r\n\r\n return parsedFeatures;\r\n }\r\n\r\n private parseGeoJsonToObject(data: any, objectOptions: any) {\r\n const geometry = data.geometry;\r\n\r\n if (data.properties) {\r\n Object.assign(objectOptions, data.properties);\r\n }\r\n\r\n switch (geometry.type) {\r\n case 'Point':\r\n objectOptions.position = {\r\n lat: geometry.coordinates[1],\r\n lng: geometry.coordinates[0]\r\n };\r\n return new this.google.maps.Marker(objectOptions);\r\n case 'Polygon':\r\n objectOptions.paths = [];\r\n geometry.coordinates.forEach((polygon) =>\r\n objectOptions.paths.push(polygon.map((elem) => ({\r\n lat: elem[1],\r\n lng: elem[0]\r\n })))\r\n );\r\n return new this.google.maps.Polygon(objectOptions);\r\n case 'LineString':\r\n objectOptions.path = geometry.coordinates.map((elem) => ({\r\n lat: elem[1],\r\n lng: elem[0]\r\n }));\r\n return new this.google.maps.Polyline(objectOptions);\r\n default:\r\n throw new Error('Forma de objeto desconhecida.');\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-geojson.ts","import { MapEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class GoogleMap {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public resizeMap(): void {\r\n google.maps.event.trigger(this.map, 'resize');\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any) {\r\n const self = this;\r\n\r\n switch (eventType) {\r\n case MapEventType.Click:\r\n this.google.maps.event.addListener(self.map, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param);\r\n });\r\n break;\r\n case MapEventType.ZoomChanged:\r\n self.map.addListener('zoom_changed', () => {\r\n const param = new EventReturn([self.map.getCenter().lat(), self.map.getCenter().lng()]);\r\n eventFunction(param);\r\n });\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType) {\r\n const self = this;\r\n switch (eventType) {\r\n case MapEventType.Click:\r\n this.google.maps.event.clearListeners(self.map, 'click');\r\n break;\r\n case MapEventType.ZoomChanged:\r\n this.google.maps.event.clearListeners(self.map, 'zoom_changed');\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number) {\r\n return this.map.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n const center = this.map.getCenter();\r\n return [center.lat(), center.lng()];\r\n }\r\n\r\n public setCenter(position: number[]) {\r\n this.map.setCenter(new google.maps.LatLng(position[0], position[1]));\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number) {\r\n const scale = Math.pow(2, this.map.getZoom());\r\n const worldCoordinateCenter = this.map.getProjection().fromLatLngToPoint(this.map.getCenter());\r\n const pixelOffset = new google.maps.Point(offsetx / scale || 0, offsety / scale || 0);\r\n\r\n const worldCoordinateNewCenter = new google.maps.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n\r\n const latlng = this.map.getProjection().fromPointToLatLng(worldCoordinateNewCenter);\r\n return [latlng.lat(), latlng.lng()];\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any) {\r\n const bounds = new google.maps.LatLngBounds();\r\n\r\n if (markers && markers.length) {\r\n markers.forEach((marker: any) => bounds.extend(marker.getPosition()));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n if (circles && circles.length) {\r\n circles.forEach((circle: any) => bounds.union(circle.getBounds()));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n if (polygons && polygons.length) {\r\n polygons.forEach((polygon: any) => polygon.getPaths()\r\n .forEach((path: any) => path.getArray()\r\n .forEach((ponto: any) => bounds.extend(ponto))));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n if (polylines && polylines.length) {\r\n polylines.forEach((polyline: any) => polyline.getPath()\r\n .forEach((path: any) => bounds.extend(new google.maps.LatLng(path.lat(), path.lng()))));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-map.ts","import { MarkerEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport MarkerClustererConfig from '../../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../../features/marker/marker-options';\r\n\r\nconst MarkerClusterer = require('@google/markerclustererplus');\r\n\r\nexport default class GoogleMarkers {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawMarker(options: MarkerOptions, eventClick: any) {\r\n const newOptions = {\r\n draggable: options.draggable,\r\n icon: null,\r\n object: options.object,\r\n position: {\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n }\r\n };\r\n\r\n if (options.icon) {\r\n newOptions.icon = {\r\n url: options.icon.url\r\n };\r\n\r\n if (options.icon.size) {\r\n newOptions.icon.size = new this.google.maps.Size(options.icon.size[0], options.icon.size[1]);\r\n }\r\n }\r\n const marker = new this.google.maps.Marker(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(marker, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n marker.setMap(this.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n bounds.extend(marker.getPosition());\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n return marker;\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n icon: {\r\n fillColor: options.style.fillColor,\r\n fillOpacity: options.style.fillOpacity,\r\n path: this.google.maps.SymbolPath.CIRCLE,\r\n scale: options.style.radius,\r\n strokeColor: options.style.color,\r\n strokeWeight: options.style.weight\r\n },\r\n object: options.object,\r\n position: {\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n }\r\n };\r\n\r\n const marker = new this.google.maps.Marker(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(marker, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n marker.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n bounds.extend(marker.getPosition());\r\n self.map.fitBounds(bounds);\r\n }\r\n\r\n return marker;\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any) {\r\n const self = this;\r\n markers.forEach((marker) => {\r\n marker.setMap(show ? self.map : null);\r\n\r\n if (markerClusterer) {\r\n if (show) {\r\n self.addMarkerOnClusterer(marker, markerClusterer);\r\n } else {\r\n self.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions) {\r\n let icon = null;\r\n let position = null;\r\n\r\n if (options.latlng) {\r\n position = {\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n };\r\n }\r\n\r\n if (options.icon) {\r\n icon = options.icon;\r\n\r\n if (options.icon.size) {\r\n icon.size = new this.google.maps.Size(options.icon.size[0], options.icon.size[1]);\r\n }\r\n }\r\n\r\n markers.forEach((marker) => {\r\n if (options.style) {\r\n icon = {\r\n fillColor: options.style.fillColor ? options.style.fillColor : marker.icon.fillColor,\r\n fillOpacity: options.style.fillOpacity ? options.style.fillOpacity : marker.icon.fillOpacity,\r\n path: this.google.maps.SymbolPath.CIRCLE,\r\n scale: options.style.radius ? options.style.radius : marker.icon.scale,\r\n strokeColor: options.style.color ? options.style.color : marker.icon.strokeColor,\r\n strokeWeight: options.style.weight ? options.style.weight : marker.icon.strokeWeight\r\n };\r\n }\r\n\r\n let newOptions = null;\r\n if (position && icon) {\r\n newOptions = { icon, position };\r\n } else if (position) {\r\n newOptions = { position };\r\n } else {\r\n newOptions = { icon };\r\n }\r\n\r\n marker.setOptions(newOptions);\r\n });\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean) {\r\n const newPosition = {\r\n lat: position[0],\r\n lng: position[1]\r\n };\r\n\r\n markers.forEach((marker) => {\r\n if (addTransition) {\r\n this.moveTransitionMarker(newPosition, marker);\r\n } else {\r\n marker.setPosition(newPosition);\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n markers.map((marker) => marker.position).forEach((position) => bounds.extend(position));\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return !!marker.map;\r\n }\r\n\r\n public setCenterMarker(marker: any) {\r\n this.map.setCenter(marker.getPosition());\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any) {\r\n markers.forEach((marker: any) => {\r\n switch (eventType) {\r\n case MarkerEventType.Click:\r\n this.google.maps.event.addListener(marker, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.RightClick:\r\n this.google.maps.event.addListener(marker, 'rightclick', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n this.google.maps.event.addListener(marker, 'dragend', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOver:\r\n this.google.maps.event.addListener(marker, 'mouseover', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOut:\r\n this.google.maps.event.addListener(marker, 'mouseout', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n this.google.maps.event.addListener(marker, 'dragstart', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n markers.forEach((marker: any) => {\r\n switch (event) {\r\n case MarkerEventType.Click:\r\n this.google.maps.event.clearListeners(marker, 'click');\r\n break;\r\n case MarkerEventType.RightClick:\r\n this.google.maps.event.clearListeners(marker, 'rightclick');\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n this.google.maps.event.clearListeners(marker, 'dragend');\r\n break;\r\n case MarkerEventType.MouseOver:\r\n this.google.maps.event.clearListeners(marker, 'mouseover');\r\n break;\r\n case MarkerEventType.MouseOut:\r\n this.google.maps.event.clearListeners(marker, 'mouseout');\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n this.google.maps.event.clearListeners(marker, \"dragstart\");\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n return new MarkerClusterer(this.map, [], {\r\n maxZoom: config.clusterMaxZoom,\r\n minimumClusterSize: config.clusterMinSize,\r\n zoomOnClick: config.clusterZoomOnClick\r\n });\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n markerClusterer.setZoomOnClick(config.clusterZoomOnClick);\r\n markerClusterer.setMinimumClusterSize(config.clusterMinSize);\r\n markerClusterer.setMaxZoom(config.clusterMaxZoom);\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n markerClusterer.repaint();\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n if (markerClusterer.getMarkers().indexOf(marker) === -1) {\r\n markerClusterer.addMarker(marker, true);\r\n }\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n markerClusterer.removeMarker(marker);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n markerClusterer.clearMarkers();\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return markerClusterer.getMarkers().length;\r\n }\r\n\r\n private moveTransitionMarker(position: any, marker: any) {\r\n const numDeltas = 5;\r\n const reference = {\r\n deltaLat: (position.lat - marker.getPosition().lat()) / numDeltas,\r\n deltaLng: (position.lng - marker.getPosition().lng()) / numDeltas,\r\n i: 0,\r\n position: [marker.getPosition().lat(), marker.getPosition().lng()],\r\n lastPosition: position\r\n };\r\n\r\n this.moveMarker(marker, reference, numDeltas);\r\n }\r\n\r\n private moveMarker(marker: any, reference: any, numDeltas: number) {\r\n reference.position[0] += reference.deltaLat;\r\n reference.position[1] += reference.deltaLng;\r\n marker.setPosition(new google.maps.LatLng(reference.position[0], reference.position[1]));\r\n if (reference.i < numDeltas) {\r\n reference.i++;\r\n setTimeout(() => this.moveMarker(marker, reference, numDeltas), 20);\r\n } else if (reference.i === numDeltas) {\r\n setTimeout(() => marker.setPosition(reference.lastPosition), 20);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-markers.ts","import EventReturn from '../../features/events/event-return';\r\nimport OverlayOptions from '../../features/overlay/overlay-options';\r\nimport GooglePolygons from './google-polygons';\r\n\r\nexport default class GoogleOverlays {\r\n private map = null;\r\n private google = null;\r\n private googlePolygons: GooglePolygons;\r\n private OverlayGoogle = null;\r\n\r\n constructor(map: any, google: any, googlePolygons: GooglePolygons) {\r\n this.map = map;\r\n this.google = google;\r\n this.googlePolygons = googlePolygons;\r\n\r\n OverlayGoogle.prototype = new this.google.maps.OverlayView();\r\n\r\n function OverlayGoogle(bounds: any, div: any, draggable: boolean, obj: any, afterDrag: any) {\r\n this.bounds_ = bounds;\r\n this.div_ = div;\r\n this.draggable = draggable;\r\n this.afterDragHandler = afterDrag;\r\n this.object = obj;\r\n this.setMap(map);\r\n }\r\n\r\n OverlayGoogle.prototype.onAdd = function () {\r\n const that = this;\r\n const panes = this.getPanes();\r\n panes.overlayLayer.appendChild(this.div_);\r\n panes.overlayMouseTarget.appendChild(this.div_);\r\n\r\n google.maps.event.addDomListener(this.div_, 'click', function () {\r\n google.maps.event.trigger(this.div_, 'click');\r\n });\r\n\r\n if (this.draggable) {\r\n google.maps.event.addDomListener(this.get('map').getDiv(), 'mouseleave', function () {\r\n google.maps.event.trigger(this.div_, 'mouseup');\r\n });\r\n\r\n google.maps.event.addDomListener(this.div_, 'mousedown', function (e) {\r\n this.style.cursor = 'move';\r\n that.map.set('draggable', false);\r\n that.set('origin', e);\r\n\r\n that.moveHandler = google.maps.event.addDomListener(that.get('map').getDiv(),\r\n 'mousemove', function (e) {\r\n const origin = that.get('origin');\r\n const left = origin.clientX - e.clientX;\r\n const top = origin.clientY - e.clientY;\r\n const pos = that.getProjection().fromLatLngToDivPixel(that.bounds_.getCenter());\r\n const latLng = that.getProjection()\r\n .fromDivPixelToLatLng(new google.maps.Point(pos.x - left, pos.y - top));\r\n\r\n that.set('origin', e);\r\n that.bounds_ = new google.maps.LatLngBounds();\r\n that.bounds_.extend(latLng);\r\n that.draw();\r\n });\r\n });\r\n\r\n google.maps.event.addDomListener(this.div_, 'mouseup', function () {\r\n that.map.set('draggable', true);\r\n this.style.cursor = 'default';\r\n google.maps.event.removeListener(that.moveHandler);\r\n\r\n if (that.afterDragHandler) {\r\n const latLng = that.bounds_.getCenter();\r\n const param = new EventReturn([latLng.lat(), latLng.lng()]);\r\n that.afterDragHandler(param, that.object);\r\n }\r\n });\r\n }\r\n };\r\n\r\n OverlayGoogle.prototype.draw = function () {\r\n const overlayProjection = this.getProjection();\r\n const center = overlayProjection.fromLatLngToDivPixel(this.bounds_.getCenter());\r\n\r\n const div = this.div_;\r\n div.style.left = center.x + 'px';\r\n div.style.top = center.y + 'px';\r\n };\r\n\r\n OverlayGoogle.prototype.onRemove = function () {\r\n this.div_.parentNode.removeChild(this.div_);\r\n };\r\n\r\n this.OverlayGoogle = OverlayGoogle;\r\n }\r\n\r\n public drawOverlay(options: OverlayOptions, polygons: any) {\r\n let bounds = null;\r\n\r\n if (polygons && polygons.length > 0) {\r\n bounds = this.googlePolygons.getPolygonsBounds(polygons);\r\n } else {\r\n bounds = new this.google.maps.LatLngBounds();\r\n bounds.extend(new this.google.maps.LatLng(options.position[0], options.position[1]));\r\n }\r\n\r\n const overlay = new this.OverlayGoogle(bounds, options.divElement,\r\n options.draggable, options.object, options.afterEventDragHandler);\r\n\r\n if (options.addToMap) {\r\n overlay.setMap(this.map);\r\n }\r\n\r\n overlay.object = options.object;\r\n return overlay;\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean) {\r\n const self = this;\r\n overlays.forEach((overlay) => overlay.setMap(show ? self.map : null));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-overlay.ts","import { PolygonEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport PolygonAlterOptions from '../../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../../features/polygons/polygon-options';\r\n\r\nexport default class GooglePolygons {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawPolygon(options: PolygonOptions, eventClick: any) {\r\n const self = this;\r\n let paths = this.getPathRecursiveArray(options.path);\r\n paths = this.getPathPolylineArray(paths);\r\n\r\n const newOptions = {\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n fillColor: options.fillColor,\r\n fillOpacity: options.fillOpacity,\r\n object: options.object,\r\n paths,\r\n strokeColor: options.color,\r\n strokeOpacity: options.opacity,\r\n strokeWeight: options.weight,\r\n suppressUndo: true,\r\n zIndex: options.zIndex\r\n };\r\n\r\n const polygon = new this.google.maps.Polygon(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(polygon, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polygon.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(self.getPolygonBounds(polygon));\r\n }\r\n\r\n return polygon;\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean) {\r\n const self = this;\r\n polygons.forEach((polygon) => polygon.setMap(show ? self.map : null));\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions) {\r\n let newOptions = {};\r\n\r\n polygons.forEach((polygon) => {\r\n newOptions = {\r\n editable: options.editable !== null && options.editable !== undefined ?\r\n options.editable : polygon.editable,\r\n fillColor: options.fillColor ? options.fillColor : polygon.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : polygon.fillOpacity,\r\n strokeColor: options.color ? options.color : polygon.strokeColor,\r\n strokeOpacity: options.opacity ? options.opacity : polygon.strokeOpacity,\r\n strokeWeight: options.weight ? options.weight : polygon.strokeWeight,\r\n draggable: options.draggable !== null && options.draggable !== undefined ?\r\n options.draggable : polygon.draggable\r\n };\r\n\r\n if (options.path) {\r\n const paths = [];\r\n options.path.forEach((path) => paths.push({ lat: path[0], lng: path[1] }));\r\n polygon.setPath(paths);\r\n }\r\n\r\n polygon.setOptions(newOptions);\r\n\r\n if (options.object) {\r\n polygon.object = options.object;\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.map.fitBounds(this.getPolygonsBounds(polygons));\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.map.setCenter(this.getPolygonsBounds(polygons).getCenter());\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return !!polygon.map;\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()])));\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n polygons.forEach((polygon: any) => {\r\n switch (eventType) {\r\n case PolygonEventType.SetAt:\r\n this.addPolygonEventMove(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.InsertAt:\r\n this.addPolygonEventInsertAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n this.addPolygonEventRemoveAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n this.addPolygonEventDragPolygon(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.Click:\r\n this.addPolygonEventClick(polygon, eventFunction);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n polygons.forEach((polygon: any) => {\r\n switch (event) {\r\n case PolygonEventType.SetAt:\r\n this.google.maps.event.clearListeners(polygon.getPaths(), 'set_at');\r\n break;\r\n case PolygonEventType.InsertAt:\r\n this.google.maps.event.clearListeners(polygon.getPaths(), 'insert_at');\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n this.google.maps.event.clearListeners(polygon.getPaths(), 'remove_at');\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n this.google.maps.event.clearListeners(polygon, 'dragstart');\r\n this.google.maps.event.clearListeners(polygon, 'dragend');\r\n break;\r\n case PolygonEventType.Click:\r\n this.google.maps.event.clearListeners(polygon, 'click');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public getPolygonsBounds(polygons: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n polygons.forEach((polygon: any) => {\r\n const paths = polygon.getPaths().getArray();\r\n paths.forEach((path: any) => path.getArray().forEach((x: any) => bounds.extend(x)));\r\n });\r\n\r\n return bounds;\r\n }\r\n\r\n private getPolygonBounds(polygon: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n const paths = polygon.getPaths().getArray();\r\n\r\n paths.forEach((path: any) => path.getArray().forEach((x: any) => bounds.extend(x)));\r\n return bounds;\r\n }\r\n\r\n private addPolygonEventMove(polygon, eventFunction) {\r\n const polygonPathIdx = polygon.getPaths().getLength();\r\n\r\n for (let index = 0; index < polygonPathIdx; index++) {\r\n this.addPolygonEventMoveAllPaths(polygon, polygon.getPaths().getAt(index), eventFunction);\r\n }\r\n }\r\n\r\n private addPolygonEventMoveAllPaths(polygon, innerPolygon, eventFunction) {\r\n this.google.maps.event.addListener(innerPolygon, 'set_at', (newEvent: any, lastEvent: any) => {\r\n if (polygon.dragging)\r\n return;\r\n\r\n const path = innerPolygon.getAt(newEvent);\r\n const newPosition = new EventReturn([path.lat(), path.lng()]);\r\n const lastPosition = new EventReturn([lastEvent.lat(), lastEvent.lng()]);\r\n\r\n eventFunction(newPosition, lastPosition, polygon.object, newEvent, polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))));\r\n });\r\n }\r\n\r\n private addPolygonEventInsertAt(polygon, eventFunction) {\r\n const polygonPathIdx = polygon.getPaths().getLength();\r\n\r\n for (let index = 0; index < polygonPathIdx; index++) {\r\n this.addPolygonEventInsertAtAllPaths(polygon, polygon.getPaths().getAt(index), eventFunction);\r\n }\r\n }\r\n\r\n private addPolygonEventInsertAtAllPaths(polygon, innerPolygon, eventFunction) {\r\n this.google.maps.event.addListener(innerPolygon, 'insert_at', (event: any) => {\r\n const newPath = innerPolygon.getAt(event);\r\n const newPoint = new EventReturn([newPath.lat(), newPath.lng()]);\r\n\r\n const previousPath = innerPolygon.getAt(event - 1);\r\n const previousPoint = previousPath ? new EventReturn([previousPath.lat(), previousPath.lng()]) : null;\r\n eventFunction(newPoint, previousPoint, polygon.object, event, polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))));\r\n });\r\n }\r\n\r\n private addPolygonEventRemoveAt(polygon, eventFunction) {\r\n const polygonPathIdx = polygon.getPaths().getLength();\r\n\r\n for (let index = 0; index < polygonPathIdx; index++) {\r\n this.addPolygonEventRemoveAtAllPaths(polygon, polygon.getPaths().getAt(index), eventFunction)\r\n }\r\n }\r\n\r\n private addPolygonEventRemoveAtAllPaths(polygon, innerPolygon, eventFunction) {\r\n this.google.maps.event.addListener(innerPolygon, 'remove_at', (event: any) => {\r\n const param = new EventReturn([innerPolygon.getAt(event).lat(), innerPolygon.getAt(event).lng()]);\r\n eventFunction(param, polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))), polygon.object);\r\n });\r\n }\r\n\r\n private addPolygonEventDragPolygon(polygon, eventFunction) {\r\n this.google.maps.event.addListener(polygon, 'dragstart', (event: any) => {\r\n polygon.dragging = true;\r\n });\r\n\r\n this.google.maps.event.addListener(polygon, 'dragend', (event: any) => {\r\n polygon.dragging = false;\r\n eventFunction(polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))), polygon.object);\r\n });\r\n }\r\n\r\n private addPolygonEventClick(polygon, eventFunction) {\r\n this.google.maps.event.addListener(polygon, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, polygon.object);\r\n });\r\n }\r\n\r\n private getPathRecursiveArray(path: any) {\r\n if (Array.isArray(path) && typeof path[0] !== 'number') {\r\n return path.map(x => this.getPathRecursiveArray(x));\r\n }\r\n else return { lat: path[0], lng: path[1] }\r\n }\r\n\r\n private getPathPolylineArray(path: any) {\r\n if (typeof path[0].lat === 'number') {\r\n return path;\r\n }\r\n else if (typeof path[0][0].lat !== 'number') {\r\n path = path[0];\r\n return this.getPathPolylineArray(path);\r\n } else return path;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-polygons.ts","import { PolylineEventType } from '../../dto/event-type';\r\nimport { PolylineType } from '../../dto/polyline-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport NavigationOptions from '../../features/polyline/navigations-options';\r\nimport PolylineOptions from '../../features/polyline/polyline-options';\r\nimport GooglePopups from './google-popup';\r\n\r\nexport default class GooglePolylines {\r\n private map = null;\r\n private google = null;\r\n private googlePopups: GooglePopups;\r\n\r\n private selectedPolyline = null;\r\n private selectedPath = null;\r\n private navigateInfoWindow = null;\r\n private directionForward = false;\r\n private multiSelectionForward = false;\r\n private multiSelection = false;\r\n private navigateByPoint: boolean;\r\n private navigationOptions: NavigationOptions;\r\n\r\n constructor(map: any, google: any, googlePopups: GooglePopups) {\r\n this.map = map;\r\n this.google = google;\r\n this.googlePopups = googlePopups;\r\n }\r\n\r\n public drawPolyline(options: PolylineOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n icons: null,\r\n infowindows: options.infowindows,\r\n object: options.object,\r\n path: null,\r\n strokeColor: options.color,\r\n strokeOpacity: options.opacity || 1,\r\n strokeWeight: options.weight,\r\n suppressUndo: true,\r\n zIndex: options.zIndex\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.strokeOpacity = 0;\r\n newOptions.icons = [{\r\n icon: {\r\n path: 'M 0,-1 0,1',\r\n scale: 2,\r\n strokeOpacity: 1,\r\n strokeWeight: options.weight\r\n },\r\n offset: '0',\r\n repeat: '10px'\r\n }];\r\n break;\r\n case PolylineType.Arrow:\r\n newOptions.icons = [{\r\n icon: {\r\n path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\r\n scaledSize: new google.maps.Size(20, 20),\r\n size: new google.maps.Size(20, 20)\r\n },\r\n offset: '100%',\r\n repeat: '100px'\r\n },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '0%' },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '100%' }];\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n newOptions.path = options.path ? options.path.map((x) => {\r\n return {\r\n lat: x[0],\r\n lng: x[1]\r\n };\r\n }) : [];\r\n\r\n const polyline = new this.google.maps.Polyline(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(polyline, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, polyline.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polyline.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(self.getPolylineBounds(polyline));\r\n }\r\n\r\n return polyline;\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any) {\r\n const polyline = this.drawPolyline(options, null);\r\n\r\n polyline.navigationHandlerClick = eventClick;\r\n this.navigationOptions = options.navigateOptions;\r\n this.navigateByPoint = this.navigationOptions ? this.navigationOptions.navigateByPoint : true;\r\n this.addNavigation(polyline);\r\n\r\n return polyline;\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean) {\r\n polylines.forEach((polyline: any) => {\r\n const self = this;\r\n polyline.setMap(show ? self.map : null);\r\n });\r\n }\r\n\r\n public alterPolylineOptions(polylines, options: PolylineOptions) {\r\n polylines.forEach((polyline: any) => {\r\n const newOptions: any = {\r\n draggable: options.draggable ? options.draggable : polyline.draggable,\r\n editable: options.editable ? options.editable : polyline.editable,\r\n infowindows: options.infowindows ? options.infowindows : polyline.infowindows,\r\n object: options.object ? options.object : polyline.object,\r\n strokeColor: options.color ? options.color : polyline.strokeColor,\r\n strokeOpacity: options.opacity ? options.opacity : polyline.strokeOpacity,\r\n strokeWeight: options.weight ? options.weight : polyline.strokeWeight,\r\n zIndex: options.zIndex ? options.zIndex : polyline.zIndex\r\n };\r\n\r\n if (options.path) {\r\n polyline.setPath(options.path.map((x) => new google.maps.LatLng(x[0], x[1])));\r\n }\r\n\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.strokeOpacity = 0;\r\n newOptions.icons = [{\r\n icon: {\r\n path: 'M 0,-1 0,1',\r\n scale: 2,\r\n strokeOpacity: 1\r\n },\r\n offset: '0',\r\n repeat: '10px'\r\n }];\r\n break;\r\n case PolylineType.Arrow:\r\n newOptions.icons = [{\r\n icon: {\r\n path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\r\n scaledSize: new google.maps.Size(20, 20),\r\n size: new google.maps.Size(20, 20)\r\n },\r\n offset: '90%',\r\n repeat: '20%'\r\n },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '0%' },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '100%' }];\r\n break;\r\n default:\r\n newOptions.icons = null;\r\n break;\r\n }\r\n\r\n polyline.setOptions(newOptions);\r\n });\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any) {\r\n const self = this;\r\n self.map.fitBounds(self.getPolylinesBounds(polylines));\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return !!polyline.map;\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]) {\r\n polylines.forEach((polyline: any) => {\r\n const path = polyline.getPath();\r\n\r\n path.push(new this.google.maps.LatLng(position[0], position[1]));\r\n polyline.setPath(path);\r\n });\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return polyline.getPath().getArray().map((x: any) => [x.lat(), x.lng()]);\r\n }\r\n\r\n public removePolylineHighlight() {\r\n this.google.maps.event.clearListeners(document, 'keyup');\r\n this.google.maps.event.clearListeners(document, 'keydown');\r\n if (this.selectedPath) {\r\n this.selectedPath.setMap(null);\r\n this.selectedPath = null;\r\n }\r\n if (this.navigateInfoWindow) {\r\n this.navigateInfoWindow.close();\r\n }\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any) {\r\n polylines.forEach((polyline: any) => {\r\n switch (eventType) {\r\n case PolylineEventType.SetAt:\r\n this.addPolylineEventMove(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.InsertAt:\r\n this.addPolylineEventInsertAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n this.addPolylineEventRemoveAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n this.addPolylineEventDragPolyline(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOver:\r\n this.addPolylineEventMouseOver(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOut:\r\n this.addPolylineEventMouseOut(polyline, eventFunction);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType) {\r\n polylines.forEach((polyline: any) => this.google.maps.event.clearListeners(polyline, 'click'));\r\n\r\n polylines.forEach((polyline: any) => {\r\n switch (event) {\r\n case PolylineEventType.SetAt:\r\n this.google.maps.event.clearListeners(polyline.getPath(), 'set_at');\r\n break;\r\n case PolylineEventType.InsertAt:\r\n this.google.maps.event.clearListeners(polyline.getPath(), 'insert_at');\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n this.google.maps.event.clearListeners(polyline.getPath(), 'remove_at');\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n this.google.maps.event.clearListeners(polyline, 'dragstart');\r\n this.google.maps.event.clearListeners(polyline, 'dragend');\r\n break;\r\n case PolylineEventType.MouseOver:\r\n this.google.maps.event.clearListeners(polyline, 'mouseover');\r\n break;\r\n case PolylineEventType.MouseOut:\r\n this.google.maps.event.clearListeners(polyline, 'mouseout');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number) {\r\n this.directionForward = false;\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n this.google.maps.event.clearListeners(document, 'keydown');\r\n this.google.maps.event.addDomListener(document, 'keydown', this.onKeyUp.bind(this));\r\n } else {\r\n this.google.maps.event.clearListeners(document, 'keyup');\r\n this.google.maps.event.addDomListener(document, 'keyup', this.onKeyUp.bind(this));\r\n }\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return polyline.object;\r\n }\r\n\r\n public getObjectPolylineHighlight() {\r\n if (this.selectedPath) {\r\n return this.selectedPath.object;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any) {\r\n if (this.selectedPath) {\r\n this.addPolylineEvent([this.selectedPath], eventType, eventFunction);\r\n }\r\n }\r\n\r\n public getPolylineHighlightIndex() {\r\n if (this.selectedPath) {\r\n return [this.selectedPath.initialIdx, this.selectedPath.finalIdx];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /* Private methods */\r\n private addNavigation(polyline: any) {\r\n const self = this;\r\n\r\n this.google.maps.event.clearListeners(polyline, 'click');\r\n this.google.maps.event.addListener(polyline, 'click', self.onClickPolyline.bind(self, polyline));\r\n }\r\n\r\n private onClickPolyline(polyline: any, event: any) {\r\n const index = this.checkIdx(polyline, event.latLng);\r\n\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n this.google.maps.event.clearListeners(document, 'keydown');\r\n this.google.maps.event.addDomListener(document, 'keydown', this.onKeyUp.bind(this));\r\n } else {\r\n this.google.maps.event.clearListeners(document, 'keyup');\r\n this.google.maps.event.addDomListener(document, 'keyup', this.onKeyUp.bind(this));\r\n }\r\n\r\n if (polyline.navigationHandlerClick) {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n polyline.navigationHandlerClick(param, polyline.object);\r\n }\r\n }\r\n\r\n private onKeyUp(event: any) {\r\n const self = this;\r\n\r\n if (self.selectedPath) {\r\n switch (event.which ? event.which : event.keyCode) {\r\n case 38: case 39:\r\n // up arrow or right arrow\r\n self.moveForwards(event.shiftKey);\r\n break;\r\n case 37: case 40:\r\n // left arrow or down arrow\r\n self.moveBackwards(event.shiftKey);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private moveForwards(multiSelection: boolean) {\r\n const self = this;\r\n const polyline = self.selectedPolyline;\r\n\r\n if ((!self.navigateByPoint || self.directionForward) &&\r\n polyline.finalIdx < polyline.getPath().getArray().length - 1) {\r\n self.navigateForward(multiSelection, polyline);\r\n }\r\n self.directionForward = true;\r\n self.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateForward(multiSelection: boolean, polyline: any) {\r\n const self = this;\r\n if (!multiSelection) {\r\n polyline.finalIdx++;\r\n polyline.initialIdx = self.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n self.multiSelection = false;\r\n } else {\r\n self.multiSelection = true;\r\n if (self.multiSelectionForward) {\r\n polyline.finalIdx++;\r\n }\r\n self.multiSelectionForward = true;\r\n }\r\n }\r\n\r\n private moveBackwards(multiSelection: boolean) {\r\n const self = this;\r\n const polyline = self.selectedPolyline;\r\n\r\n if ((!self.navigateByPoint || !self.directionForward) && polyline.initialIdx > 0) {\r\n self.navigateBackward(multiSelection, polyline);\r\n }\r\n self.directionForward = false;\r\n self.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateBackward(multiSelection: boolean, polyline) {\r\n const self = this;\r\n if (!multiSelection) {\r\n polyline.initialIdx--;\r\n polyline.finalIdx = !self.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n self.multiSelection = false;\r\n } else {\r\n self.multiSelection = true;\r\n if (!self.multiSelectionForward) {\r\n polyline.initialIdx--;\r\n }\r\n self.multiSelectionForward = false;\r\n }\r\n }\r\n\r\n private moveSelectedPath(polyline: any, options: NavigationOptions) {\r\n const pathSelected = polyline.getPath().getArray().slice(polyline.initialIdx, polyline.finalIdx + 1);\r\n\r\n if (this.selectedPath) {\r\n this.selectedPath.setPath(pathSelected);\r\n this.selectedPath.object = polyline.object;\r\n this.updateSelectedPathListeners();\r\n } else {\r\n const newOptions: any = {\r\n editable: options.editable,\r\n keyboardShortcuts: false,\r\n map: this.map,\r\n object: polyline.object,\r\n path: pathSelected,\r\n strokeColor: options && options.color || '#FF0000',\r\n strokeOpacity: options && options.opacity || 1,\r\n strokeWeight: options && options.weight || 10,\r\n zIndex: 9999\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.strokeOpacity = 0;\r\n newOptions.icons = [{\r\n icon: {\r\n path: 'M 0,-1 0,1',\r\n scale: 2,\r\n strokeOpacity: 1\r\n },\r\n offset: '0',\r\n repeat: '10px'\r\n }];\r\n break;\r\n case PolylineType.Arrow:\r\n newOptions.icons = [{\r\n icon: {\r\n anchor: new google.maps.Point(0, 2),\r\n fillColor: '#000',\r\n fillOpacity: 0.7,\r\n path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\r\n scale: 4,\r\n strokeColor: '#000',\r\n strokeWeight: 5,\r\n },\r\n offset: '100%'\r\n }];\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.selectedPath = new this.google.maps.Polyline(newOptions);\r\n }\r\n\r\n this.selectedPath.initialIdx = polyline.initialIdx;\r\n this.selectedPath.finalIdx = polyline.finalIdx;\r\n\r\n this.drawPopupNavigation(polyline);\r\n }\r\n\r\n private addPolylineEventMove(polyline: any, eventFunction: any) {\r\n polyline.moveListener = (newEvent: any, lastEvent: any) => {\r\n if (polyline.dragging)\r\n return;\r\n\r\n const path = polyline.getPath().getAt(newEvent);\r\n const newPosition = new EventReturn([path.lat(), path.lng()]);\r\n const lastPosition = new EventReturn([lastEvent.lat(), lastEvent.lng()]);\r\n\r\n eventFunction(newPosition, lastPosition, polyline.object, newEvent, polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()])));\r\n };\r\n this.google.maps.event.addListener(polyline.getPath(), 'set_at', polyline.moveListener);\r\n }\r\n\r\n private addPolylineEventInsertAt(polyline: any, eventFunction: any) {\r\n polyline.insertAtListener = (event: any) => {\r\n const path = polyline.getPath();\r\n const newPath = path.getAt(event);\r\n const newPoint = new EventReturn([newPath.lat(), newPath.lng()]);\r\n\r\n const previousPath = path.getAt(event - 1);\r\n const previousPoint = previousPath ? new EventReturn([previousPath.lat(), previousPath.lng()]) : null;\r\n eventFunction(newPoint, previousPoint, polyline.object, event, polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()])));\r\n };\r\n this.google.maps.event.addListener(polyline.getPath(), 'insert_at', polyline.insertAtListener);\r\n }\r\n\r\n private addPolylineEventRemoveAt(polyline: any, eventFunction: any) {\r\n polyline.removeAtListener = (event: any) => {\r\n const param = new EventReturn([polyline.getPath().getAt(event).lat(), polyline.getPath().getAt(event).lng()]);\r\n eventFunction(param, polyline.object, polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()])));\r\n };\r\n this.google.maps.event.addListener(polyline.getPath(), 'remove_at', polyline.removeAtListener);\r\n }\r\n\r\n private addPolylineEventMouseOver(polyline: any, eventFunction: any) {\r\n polyline.overPolylineListener = () => {\r\n polyline.dragging = false;\r\n const param = polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()]));\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'mouseover', polyline.overPolylineListener);\r\n }\r\n\r\n private addPolylineEventMouseOut(polyline: any, eventFunction: any) {\r\n polyline.outPolylineListener = () => {\r\n polyline.dragging = false;\r\n const param = polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()]));\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'mouseout', polyline.outPolylineListener);\r\n }\r\n\r\n private addPolylineEventDragPolyline(polyline: any, eventFunction: any) {\r\n polyline.dragPolylineListener = () => {\r\n polyline.dragging = false;\r\n const param = polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()]));\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'dragend', polyline.dragPolylineListener);\r\n this.google.maps.event.addListener(polyline, 'dragstart', () => polyline.dragging = true);\r\n }\r\n\r\n private updateSelectedPathListeners() {\r\n if (this.selectedPath.moveListener) {\r\n this.google.maps.event.clearListeners(this.selectedPath.getPath(), 'set_at');\r\n this.google.maps.event.addListener(this.selectedPath.getPath(), 'set_at', this.selectedPath.moveListener);\r\n }\r\n\r\n if (this.selectedPath.insertAtListener) {\r\n this.google.maps.event.clearListeners(this.selectedPath.getPath(), 'insert_at');\r\n this.google.maps.event.addListener(this.selectedPath.getPath(), 'insert_at',\r\n this.selectedPath.insertAtListener);\r\n }\r\n\r\n if (this.selectedPath.removeAtListener) {\r\n this.google.maps.event.clearListeners(this.selectedPath.getPath(), 'remove_at');\r\n this.google.maps.event.addListener(this.selectedPath.getPath(), 'remove_at',\r\n this.selectedPath.removeAtListener);\r\n }\r\n }\r\n\r\n private drawPopupNavigation(polyline: any) {\r\n const self = this;\r\n let idx = self.directionForward ? polyline.finalIdx : polyline.initialIdx;\r\n if (!self.navigateByPoint) {\r\n idx = polyline.finalIdx > polyline.initialIdx ? polyline.finalIdx : polyline.initialIdx;\r\n }\r\n\r\n const infowindow = polyline.infowindows ? polyline.infowindows[idx] : null;\r\n\r\n if (infowindow) {\r\n const point = polyline.getPath().getArray()[idx];\r\n\r\n if (self.navigateInfoWindow) {\r\n this.googlePopups.alterPopup(self.navigateInfoWindow, {\r\n content: infowindow,\r\n latlng: [point.lat(), point.lng()]\r\n });\r\n } else {\r\n self.navigateInfoWindow = this.googlePopups.drawPopup({\r\n content: infowindow,\r\n latlng: [point.lat(), point.lng()]\r\n });\r\n }\r\n }\r\n }\r\n\r\n private checkIdx(polyline: any, point: any) {\r\n const self = this;\r\n const path = polyline.getPath();\r\n let distance = 0;\r\n let minDistance = Number.MAX_VALUE;\r\n let returnValue = -1;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n distance = self.distanceToLine(path.getAt(i), path.getAt(i + 1), point);\r\n\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n returnValue = i;\r\n }\r\n }\r\n return returnValue;\r\n }\r\n\r\n private distanceToLine(pt1: any, pt2: any, pt: any) {\r\n const self = this;\r\n const deltaX = pt2.lng() - pt1.lng();\r\n const deltaY = pt2.lat() - pt1.lat();\r\n let incIntersect = (pt.lng() - pt1.lng()) * deltaX;\r\n const deltaSum = (deltaX * deltaX) + (deltaY * deltaY);\r\n\r\n incIntersect += (pt.lat() - pt1.lat()) * deltaY;\r\n if (deltaSum > 0) {\r\n incIntersect /= deltaSum;\r\n } else {\r\n incIntersect = -1;\r\n }\r\n\r\n // The intersection occurs outside the line segment, 'before' pt1.\r\n if (incIntersect < 0) {\r\n return self.kmTo(pt, pt1);\r\n } else if (incIntersect > 1) {\r\n return self.kmTo(pt, pt2);\r\n }\r\n\r\n // Intersection point calculation.\r\n const intersect = new this.google.maps\r\n .LatLng(pt1.lat() + incIntersect * deltaY, pt1.lng() + incIntersect * deltaX);\r\n\r\n return self.kmTo(pt, intersect);\r\n }\r\n\r\n private kmTo(pt1: any, pt2: any) {\r\n const e = Math;\r\n const ra = e.PI / 180;\r\n const b = pt1.lat() * ra;\r\n const c = pt2.lat() * ra;\r\n const d = b - c;\r\n const g = pt1.lng() * ra - pt2.lng() * ra;\r\n const f = 2 * e.asin(e.sqrt(e.pow(e.sin(d / 2), 2) + e.cos(b) * e.cos(c) * e.pow(e.sin(g / 2), 2)));\r\n\r\n return f * 6378.137 * 1000;\r\n }\r\n\r\n private getPolylinesBounds(polylines: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n polylines.forEach((polyline: any) => {\r\n const paths = polyline.getPath().getArray();\r\n paths.forEach((path: any) => bounds.extend(path));\r\n });\r\n\r\n return bounds;\r\n }\r\n\r\n private getPolylineBounds(polyline: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n const paths = polyline.getPath().getArray();\r\n\r\n paths.forEach((path) => bounds.extend(path));\r\n return bounds;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-polylines.ts","import PopupOptions from '../../features/popup/popup-options';\r\n\r\nexport default class GooglePopups {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawPopup(options: PopupOptions, marker?: any) {\r\n const self = this;\r\n const infowindow = new this.google.maps.InfoWindow({\r\n content: options.content\r\n });\r\n\r\n if (options.latlng) {\r\n infowindow.setPosition({\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n });\r\n }\r\n\r\n infowindow.open(self.map, marker || null);\r\n\r\n if (options.object) {\r\n infowindow.object = options.object;\r\n }\r\n return infowindow;\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any) {\r\n const self = this;\r\n self.alterPopupContent(popup, options, marker);\r\n\r\n if (!popup.getMap()) {\r\n popup.open(self.map, marker || null);\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n\r\n return popup;\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any) {\r\n if (options.content) {\r\n popup.setContent(options.content);\r\n }\r\n\r\n if (options.latlng) {\r\n popup.setPosition({\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n });\r\n } else if (marker) {\r\n popup.setPosition(marker.getPosition());\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n }\r\n\r\n public closePopup(popup: any) {\r\n popup.close();\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-popup.ts","import { OverlayOptions } from '../..';\r\nimport { MapsApiLoaderService } from '../../utils/maps-api-loader.service';\r\nimport { CircleEventType, MapEventType, MarkerEventType, PolygonEventType, PolylineEventType } from '../dto/event-type';\r\nimport { MapType } from '../dto/map-type';\r\nimport CircleAlterOptions from '../features/circle/circle-alter-options';\r\nimport CircleOptions from '../features/circle/circle-options';\r\nimport GeoJsonOptions from '../features/geojson/geojson-options';\r\nimport MarkerClustererConfig from '../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../features/marker/marker-options';\r\nimport PolygonAlterOptions from '../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../features/polygons/polygon-options';\r\nimport PolylineOptions from '../features/polyline/polyline-options';\r\nimport PopupOptions from '../features/popup/popup-options';\r\nimport LeafletCircles from './leaflet/leaflet-circle';\r\nimport LeafletGeoJson from './leaflet/leaflet-geojson';\r\nimport LeafletMap from './leaflet/leaflet-map';\r\nimport LeafletMarkers from './leaflet/leaflet-markers';\r\nimport LeafletOverlays from './leaflet/leaflet-overlay';\r\nimport LeafletPolygons from './leaflet/leaflet-polygons';\r\nimport LeafletPolylines from './leaflet/leaflet-polylines';\r\nimport LeafletPopups from './leaflet/leaflet-popup';\r\nimport IMapFunctions from './mapFunctions';\r\n\r\nexport default class Leaflet implements IMapFunctions {\r\n private leafletMarkers: LeafletMarkers;\r\n private leafletPolygons: LeafletPolygons;\r\n private leafletCircles: LeafletCircles;\r\n private leafletPolylines: LeafletPolylines;\r\n private leafletPopups: LeafletPopups;\r\n private leafletMap: LeafletMap;\r\n private leafletOverlays: LeafletOverlays;\r\n private leafletGeoJson: LeafletGeoJson;\r\n\r\n private mapsApiLoader: MapsApiLoaderService = new MapsApiLoaderService();\r\n\r\n constructor() { /* */ }\r\n\r\n public async initialize(mapType: MapType, params: any, elementId: string): Promise<any> {\r\n try {\r\n const api = await this.mapsApiLoader.loadApi(mapType, params);\r\n const leaflet = api;\r\n this.loadDependencies(params);\r\n await this.mapTimeout(1000);\r\n\r\n const mapOptions: any = {\r\n center: new leaflet.LatLng(-14, -54),\r\n editable: true,\r\n keyboard: false,\r\n maxZoom: params.wikimedia ? 18 : 19,\r\n minZoom: 4,\r\n zoom: 4,\r\n zoomControl: false\r\n };\r\n\r\n if (params.gestureHandling) {\r\n mapOptions.gestureHandling = true;\r\n }\r\n\r\n await this.mapTimeout(200);\r\n const osm = new leaflet.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', mapOptions);\r\n const wikimedia = new leaflet.tileLayer('https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png', {\r\n attribution: '<a href=\"https://wikimediafoundation.org/wiki/Maps_Terms_of_Use\">Wikimedia</a>'\r\n });\r\n\r\n const satelliteURL = 'https://server.arcgisonline.com/ArcGIS/rest/services/' +\r\n 'World_Imagery/MapServer/tile/{z}/{y}/{x}';\r\n const satellite = L.tileLayer(satelliteURL, {\r\n attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye,' +\r\n ' Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',\r\n maxZoom: 18\r\n });\r\n mapOptions.layers = [params.wikimedia ? wikimedia : osm];\r\n\r\n const map = new leaflet.Map(elementId, mapOptions);\r\n const baseLayers = {\r\n Map: params.wikimedia ? wikimedia : osm,\r\n Satellite: satellite\r\n };\r\n\r\n if (params.mapTiles && params.mapTiles.length) {\r\n params.mapTiles.forEach((tile: any) => {\r\n const layer = new leaflet.tileLayer(tile.url, tile.options);\r\n baseLayers[tile.name] = layer;\r\n });\r\n }\r\n\r\n leaflet.control.layers(baseLayers, null, { position: 'topleft' }).addTo(map);\r\n leaflet.control.zoom({ position: 'bottomright' }).addTo(map);\r\n\r\n this.leafletMarkers = new LeafletMarkers(map, leaflet);\r\n this.leafletPolygons = new LeafletPolygons(map, leaflet);\r\n this.leafletCircles = new LeafletCircles(map, leaflet);\r\n this.leafletPopups = new LeafletPopups(map, leaflet);\r\n this.leafletPolylines = new LeafletPolylines(map, leaflet, this.leafletPopups);\r\n this.leafletMap = new LeafletMap(map, leaflet);\r\n this.leafletOverlays = new LeafletOverlays(map, leaflet, this.leafletPolygons);\r\n this.leafletGeoJson = new LeafletGeoJson(map, leaflet);\r\n return this;\r\n } catch (err) {\r\n console.error(err);\r\n return err;\r\n }\r\n }\r\n\r\n /* GEOJson */\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any): void {\r\n this.leafletGeoJson.loadGEOJson(data, options, eventClick);\r\n }\r\n\r\n /* Markers */\r\n public drawMarker(options: MarkerOptions, eventClick: any): any {\r\n return this.leafletMarkers.drawMarker(options, eventClick);\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any): any {\r\n return this.leafletMarkers.drawCircleMarker(options, eventClick);\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any): void {\r\n this.leafletMarkers.toggleMarkers(markers, show, markerClusterer);\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions): void {\r\n this.leafletMarkers.alterMarkerOptions(markers, options);\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean): void {\r\n this.leafletMarkers.alterMarkerPosition(markers, position, addTransition);\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]): void {\r\n this.leafletMarkers.fitBoundsPositions(markers);\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return this.leafletMarkers.isMarkerOnMap(marker);\r\n }\r\n\r\n public setCenterMarker(marker: any): void {\r\n this.leafletMarkers.setCenterMarker(marker);\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any): void {\r\n this.leafletMarkers.addMarkerEvent(markers, eventType, eventFunction);\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n this.leafletMarkers.removeMarkerEvent(markers, event);\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n return this.leafletMarkers.addMarkerClusterer(config);\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n this.leafletMarkers.alterMarkerClustererConfig(markerClusterer, config);\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n this.leafletMarkers.refreshClusterer(markerClusterer);\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n this.leafletMarkers.addMarkerOnClusterer(marker, markerClusterer);\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n this.leafletMarkers.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n this.leafletMarkers.clearMarkersClusterer(markerClusterer);\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return this.leafletMarkers.countMarkersOnCluster(markerClusterer);\r\n }\r\n\r\n /* Polygons */\r\n public drawPolygon(options: PolygonOptions, eventClick: any): any {\r\n return this.leafletPolygons.drawPolygon(options, eventClick);\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean): void {\r\n this.leafletPolygons.togglePolygons(polygons, show);\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions): void {\r\n this.leafletPolygons.alterPolygonOptions(polygons, options);\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.leafletPolygons.fitBoundsPolygons(polygons);\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.leafletPolygons.setCenterPolygons(polygons);\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return this.leafletPolygons.isPolygonOnMap(polygon);\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return this.leafletPolygons.getPolygonPath(polygon);\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n this.leafletPolygons.addPolygonEvent(polygons, eventType, eventFunction);\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n this.leafletPolygons.removePolygonEvent(polygons, event);\r\n }\r\n\r\n /* Circles */\r\n public drawCircle(options: CircleOptions, eventClick: any): any {\r\n return this.leafletCircles.drawCircle(options, eventClick);\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean): void {\r\n this.leafletCircles.toggleCircles(circles, show);\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions): void {\r\n this.leafletCircles.alterCircleOptions(circles, options);\r\n }\r\n\r\n public fitBoundsCircles(circles: any) {\r\n this.leafletCircles.fitBoundsCircles(circles);\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return this.leafletCircles.isCircleOnMap(circle);\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n return this.leafletCircles.getCircleCenter(circle);\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return this.leafletCircles.getCircleRadius(circle);\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n this.leafletCircles.addCircleEvent(circles, eventType, eventFunction);\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n this.leafletCircles.removeCircleEvent(circles, event);\r\n }\r\n\r\n /* Polylines */\r\n public drawPolyline(options: PolylineOptions, eventClick: any): any {\r\n return this.leafletPolylines.drawPolyline(options, eventClick);\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any): any {\r\n return this.leafletPolylines.drawPolylineWithNavigation(options, eventClick);\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean): void {\r\n this.leafletPolylines.togglePolylines(polylines, show);\r\n }\r\n\r\n public alterPolylineOptions(polylines: any, options: PolylineOptions): void {\r\n this.leafletPolylines.alterPolylineOptions(polylines, options);\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any): void {\r\n this.leafletPolylines.fitBoundsPolylines(polylines);\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return this.leafletPolylines.isPolylineOnMap(polyline);\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]): void {\r\n this.leafletPolylines.addPolylinePath(polylines, position);\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return this.leafletPolylines.getPolylinePath(polyline);\r\n }\r\n\r\n public removePolylineHighlight(): void {\r\n this.leafletPolylines.removePolylineHighlight();\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any): void {\r\n this.leafletPolylines.addPolylineEvent(polylines, eventType, eventFunction);\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType): void {\r\n this.leafletPolylines.removePolylineEvent(polylines, event);\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number): void {\r\n this.leafletPolylines.setIndexPolylineHighlight(polyline, index);\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return this.leafletPolylines.getObjectPolyline(polyline);\r\n }\r\n public getObjectPolylineHighlight(): object {\r\n return this.leafletPolylines.getObjectPolylineHighlight();\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any): void {\r\n this.leafletPolylines.addPolylineHighlightEvent(eventType, eventFunction);\r\n }\r\n\r\n public getPolylineHighlightIndex(): number[] {\r\n return this.leafletPolylines.getPolylineHighlightIndex();\r\n }\r\n\r\n /* Popups */\r\n public drawPopup(options: PopupOptions, marker?: any): any {\r\n return this.leafletPopups.drawPopup(options, marker);\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any): any {\r\n return this.leafletPopups.alterPopup(popup, options, marker);\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any): any {\r\n this.leafletPopups.alterPopupContent(popup, options, marker);\r\n }\r\n\r\n public closePopup(popup: any): any {\r\n this.leafletPopups.closePopup(popup);\r\n }\r\n\r\n /* Map */\r\n public resizeMap(): void {\r\n this.leafletMap.resizeMap();\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any): void {\r\n this.leafletMap.addEventMap(eventType, eventFunction);\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType): void {\r\n this.leafletMap.removeEventMap(eventType);\r\n }\r\n\r\n public getZoom(): number {\r\n return this.leafletMap.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number): void {\r\n this.leafletMap.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n return this.leafletMap.getCenter();\r\n }\r\n\r\n public setCenter(position: number[]): void {\r\n this.leafletMap.setCenter(position);\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number): number[] {\r\n return this.leafletMap.pixelsToLatLng(offsetx, offsety);\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any): void {\r\n this.leafletMap.fitBoundsElements(markers, circles, polygons, polylines);\r\n }\r\n\r\n /* Overlay */\r\n public drawOverlay(options: OverlayOptions, polygons: any): any {\r\n return this.leafletOverlays.drawOverlay(options, polygons);\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean): void {\r\n this.leafletOverlays.toggleOverlay(overlays, show);\r\n }\r\n\r\n /* Private Methods */\r\n private mapTimeout(ms: number) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n }\r\n\r\n private loadDependencies(params: any) {\r\n const styles = params.cssDependencies;\r\n if (styles && styles.length > 0) {\r\n styles.forEach((path: any) => {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = path;\r\n document.querySelector('head').appendChild(link);\r\n });\r\n }\r\n\r\n const scripts = params.scriptsDependencies;\r\n if (scripts && scripts.length > 0) {\r\n scripts.forEach((path: any) => {\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = path;\r\n document.querySelector('head').appendChild(script);\r\n });\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet.ts","import { CircleEventType } from '../../dto/event-type';\r\nimport CircleAlterOptions from '../../features/circle/circle-alter-options';\r\nimport CircleOptions from '../../features/circle/circle-options';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class LeafletCircles {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public drawCircle(options: CircleOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n color: options.color,\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n fillColor: options.fillColor,\r\n fillOpacity: options.fillOpacity,\r\n opacity: options.opacity,\r\n radius: options.radius,\r\n weight: options.weight\r\n };\r\n const circle = new this.leaflet.Circle(options.center, newOptions);\r\n\r\n if (eventClick) {\r\n circle.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n circle.addTo(self.map);\r\n\r\n if (options.editable) {\r\n circle.enableEdit();\r\n }\r\n }\r\n\r\n if (options.object) {\r\n circle.object = options.object;\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(circle.getBounds());\r\n }\r\n\r\n return circle;\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean) {\r\n const self = this;\r\n circles.forEach((circle) => show ? self.map.addLayer(circle) : self.map.removeLayer(circle));\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions) {\r\n circles.forEach((circle) => {\r\n const style = {\r\n color: options.color ? options.color : circle.options.color,\r\n draggable: options.draggable ? options.draggable : circle.options.draggable,\r\n editable: options.editable ? options.editable : circle.options.editable,\r\n fillColor: options.fillColor ? options.fillColor : circle.options.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : circle.options.fillOpacity,\r\n opacity: options.opacity ? options.opacity : circle.options.opacity,\r\n weight: options.weight ? options.weight : circle.options.weight\r\n };\r\n\r\n circle.setStyle(style);\r\n\r\n if (options.radius) {\r\n circle.setRadius(options.radius);\r\n }\r\n\r\n if (options.center) {\r\n circle.setLatLng(options.center);\r\n }\r\n\r\n if (options.editable !== null && options.editable !== undefined) {\r\n if (options.editable) {\r\n circle.enableEdit();\r\n } else {\r\n circle.disableEdit();\r\n }\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsCircles(circles: any) {\r\n this.map.fitBounds(this.getBoundsCircles(circles));\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return this.map.hasLayer(circle);\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n const center = circle.getLatLng();\r\n\r\n return [center.lat, center.lng];\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return circle.getRadius();\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n circles.forEach((circle: any) => {\r\n switch (eventType) {\r\n case CircleEventType.Click:\r\n circle.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, circle.object);\r\n });\r\n case CircleEventType.CenterChanged:\r\n circle.on('dragend', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n eventFunction(param, circle.object);\r\n });\r\n case CircleEventType.RadiusChanged:\r\n circle.on('editable:vertex:dragend', (event: any) => {\r\n const param = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n eventFunction(param, circle.object, circle.getRadius());\r\n });\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n circles.forEach((circle: any) => {\r\n switch (event) {\r\n case CircleEventType.Click:\r\n circle.off('click');\r\n case CircleEventType.CenterChanged:\r\n circle.off('dragend');\r\n case CircleEventType.RadiusChanged:\r\n circle.off('editable:vertex:dragend');\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n private getBoundsCircles(circles: any) {\r\n const group = new this.leaflet.FeatureGroup(circles);\r\n return group.getBounds();\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-circle.ts","import EventReturn from '../../features/events/event-return';\r\nimport GeoJsonOptions from '../../features/geojson/geojson-options';\r\n\r\nexport default class LeafletGeoJson {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any) {\r\n const self = this;\r\n const objects = self.parseGeoJson(data, options);\r\n\r\n objects.forEach((elem) => self.map.addLayer(elem));\r\n\r\n if (self.map.options) {\r\n if (self.map.options.editable) {\r\n objects.forEach((obj) => {\r\n if (obj.enableEdit) {\r\n obj.enableEdit();\r\n }\r\n\r\n if (eventClick) {\r\n obj.on('click', (event) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private parseGeoJson(data: any, options: GeoJsonOptions) {\r\n const self = this;\r\n const parsedFeatures = [];\r\n\r\n if (Array.isArray(data.features)) {\r\n for (const feature of data.features) {\r\n parsedFeatures.push(self.parseGeoJsonToObject(feature, options));\r\n }\r\n } else {\r\n parsedFeatures.push(self.parseGeoJsonToObject(data, options));\r\n }\r\n\r\n return parsedFeatures;\r\n }\r\n\r\n private parseGeoJsonToObject(data: any, objectOptions: any) {\r\n const geometry = data.geometry;\r\n let parsedCoordinates = [];\r\n\r\n if (data.properties) {\r\n Object.assign(objectOptions, data.properties);\r\n }\r\n\r\n switch (geometry.type) {\r\n case 'Point':\r\n parsedCoordinates = geometry.coordinates.reverse();\r\n return new this.leaflet.Marker(parsedCoordinates, objectOptions);\r\n case 'Polygon':\r\n geometry.coordinates\r\n .forEach((polygon) => parsedCoordinates.push(polygon.map((elem) => elem.reverse())));\r\n return new this.leaflet.Polygon(parsedCoordinates, objectOptions);\r\n case 'LineString':\r\n parsedCoordinates = geometry.coordinates.map((elem) => elem.reverse());\r\n return new this.leaflet.Polyline(parsedCoordinates, objectOptions);\r\n default:\r\n throw new Error('Unknown object shape.');\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-geojson.ts","import { MapEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class LeafletMap {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public resizeMap(): void {\r\n this.map.invalidateSize();\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any) {\r\n const self = this;\r\n\r\n switch (eventType) {\r\n case MapEventType.Click:\r\n self.map.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param);\r\n });\r\n break;\r\n case MapEventType.ZoomChanged:\r\n self.map.on('zoomend', (event: any) => {\r\n const param = new EventReturn([event.target.getCenter().lat, event.target.getCenter().lng]);\r\n eventFunction(param);\r\n });\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType) {\r\n const self = this;\r\n switch (eventType) {\r\n case MapEventType.Click: self.map.off('click'); break;\r\n case MapEventType.ZoomChanged: self.map.off('zoomend');\r\n default: break;\r\n }\r\n }\r\n\r\n public getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number) {\r\n this.map.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n const center = this.map.getCenter();\r\n return [center.lat, center.lng];\r\n }\r\n\r\n public setCenter(position: number[]) {\r\n this.map.panTo(position);\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number) {\r\n const scale = Math.pow(2, this.map.getZoom());\r\n const worldCoordinateCenter = this.leaflet.CRS.Simple.project(this.map.getCenter())\r\n const pixelOffset = new this.leaflet.Point(offsetx / scale || 0, offsety / scale || 0);\r\n\r\n const worldCoordinateNewCenter = new this.leaflet.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n\r\n const latlng = this.leaflet.CRS.Simple.unproject(worldCoordinateNewCenter);\r\n return [latlng.lat, latlng.lng];\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any): void {\r\n const group = [];\r\n\r\n if (markers && markers.length) {\r\n markers.forEach((marker: any) => group.push(marker));\r\n }\r\n\r\n if (circles && circles.length) {\r\n circles.forEach((circle: any) => group.push(circle));\r\n }\r\n\r\n if (polygons && polygons.length) {\r\n polygons.forEach((polygon: any) => group.push(polygon));\r\n }\r\n\r\n if (polylines && polylines.length) {\r\n polylines.forEach((polyline: any) => group.push(polyline));\r\n }\r\n\r\n if (group && group.length) {\r\n const bounds = this.leaflet.featureGroup(group).getBounds();\r\n this.map.fitBounds(bounds);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-map.ts","import { MarkerEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport MarkerClustererConfig from '../../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../../features/marker/marker-options';\r\n\r\nexport default class LeafletMarkers {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n /* Markers */\r\n public drawMarker(options: MarkerOptions, eventClick: any) {\r\n const newOptions: any = {\r\n draggable: options.draggable\r\n };\r\n\r\n if (options.icon) {\r\n newOptions.icon = new this.leaflet.Icon({\r\n iconUrl: options.icon.url\r\n });\r\n\r\n const size = options.icon.size;\r\n if (size) {\r\n newOptions.icon.options.iconSize = size;\r\n newOptions.icon.options.iconAnchor = [size[0] / 2, size[1]];\r\n newOptions.icon.options.popupAnchor = [0, -size[1]];\r\n }\r\n }\r\n\r\n const marker = new this.leaflet.Marker(options.latlng, newOptions);\r\n\r\n if (options.object) {\r\n marker.object = options.object;\r\n }\r\n\r\n if (eventClick) {\r\n marker.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap && !options.addClusterer) {\r\n marker.addTo(this.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const group = new this.leaflet.FeatureGroup([marker]);\r\n this.map.fitBounds(group.getBounds());\r\n }\r\n\r\n return marker;\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any) {\r\n const self = this;\r\n const marker = new this.leaflet.circleMarker(options.latlng, options.style);\r\n\r\n if (eventClick) {\r\n marker.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n marker.addTo(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const group = new this.leaflet.FeatureGroup([marker]);\r\n self.map.fitBounds(group.getBounds());\r\n }\r\n\r\n marker.object = options.object;\r\n return marker;\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any) {\r\n const self = this;\r\n markers.forEach((marker) => {\r\n if (markerClusterer) {\r\n if (show) {\r\n self.addMarkerOnClusterer(marker, markerClusterer);\r\n } else {\r\n self.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n } else {\r\n if (show) {\r\n self.map.addLayer(marker);\r\n } else {\r\n self.map.removeLayer(marker);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions) {\r\n markers.forEach((marker) => {\r\n if (marker.type === 'circle' && options.style) {\r\n const style = {\r\n fillColor: options.style.fillColor ? options.style.fillColor : marker.options.fillColor,\r\n fillOpacity: options.style.fillOpacity ? options.style.fillOpacity : marker.options.fillOpacity,\r\n radius: options.style.radius ? options.style.radius : marker.options.radius,\r\n strokeColor: options.style.color ? options.style.color : marker.options.strokeColor,\r\n strokeWeight: options.style.weight ? options.style.weight : marker.options.strokeWeight\r\n };\r\n\r\n marker.setStyle(style);\r\n }\r\n\r\n if (options.icon) {\r\n const icon = new this.leaflet.icon({ iconUrl: options.icon.url });\r\n const size = options.icon.size;\r\n\r\n if (size) {\r\n icon.options.iconSize = size;\r\n icon.options.iconAnchor = [size[0] / 2, size[1]];\r\n }\r\n\r\n marker.setIcon(icon);\r\n }\r\n\r\n if (options.latlng) {\r\n marker.setLatLng(options.latlng);\r\n }\r\n });\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean) {\r\n markers.forEach((marker) => {\r\n if (addTransition) {\r\n this.moveTransitionMarker(position, marker);\r\n } else {\r\n marker.setLatLng(position);\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]) {\r\n const group = new this.leaflet.featureGroup(markers);\r\n this.map.fitBounds(group.getBounds());\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return this.map.hasLayer(marker);\r\n }\r\n\r\n public setCenterMarker(marker: any) {\r\n this.map.panTo(marker.getLatLng());\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any) {\r\n markers.forEach((marker: any) => {\r\n switch (eventType) {\r\n case MarkerEventType.Click:\r\n marker.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.RightClick:\r\n marker.on('contextmenu', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n marker.on('dragend', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOver:\r\n marker.on('mouseover', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOut:\r\n marker.on('mouseout', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n marker.on('dragstart', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n markers.forEach((marker: any) => {\r\n switch (event) {\r\n case MarkerEventType.Click:\r\n marker.off('click');\r\n break;\r\n case MarkerEventType.RightClick:\r\n marker.off('contextmenu');\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n marker.off('dragend');\r\n break;\r\n case MarkerEventType.MouseOver:\r\n marker.off('mouseover');\r\n break;\r\n case MarkerEventType.MouseOut:\r\n marker.off('mouseout');\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n marker.off('dragstart');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n const layer = this.leaflet.markerClusterGroup({\r\n maxClusterRadius: 50,\r\n showCoverageOnHover: false,\r\n zoomToBoundsOnClick: config.clusterZoomOnClick\r\n });\r\n\r\n this.map.addLayer(layer);\r\n return layer;\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n markerClusterer.options.zoomToBoundsOnClick = config.clusterZoomOnClick;\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n markerClusterer.refreshClusters();\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n markerClusterer.addLayer(marker);\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n markerClusterer.removeLayer(marker);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n markerClusterer.clearLayers();\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return markerClusterer.getLayers().length;\r\n }\r\n\r\n private moveTransitionMarker(position: any, marker: any) {\r\n const numDeltas = 5;\r\n const reference = {\r\n deltaLat: (position[0] - marker.getLatLng().lat) / numDeltas,\r\n deltaLng: (position[1] - marker.getLatLng().lng) / numDeltas,\r\n i: 0,\r\n position: [marker.getLatLng().lat, marker.getLatLng().lng],\r\n lastPosition: position\r\n };\r\n\r\n this.moveMarker(marker, reference, numDeltas);\r\n }\r\n\r\n private moveMarker(marker: any, reference: any, numDeltas: number) {\r\n reference.position[0] += reference.deltaLat;\r\n reference.position[1] += reference.deltaLng;\r\n marker.setLatLng(reference.position);\r\n if (reference.i < numDeltas) {\r\n reference.i++;\r\n setTimeout(() => this.moveMarker(marker, reference, numDeltas), 20);\r\n } else if (reference.i === numDeltas) {\r\n setTimeout(() => marker.setLatLng(reference.lastPosition), 20);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-markers.ts","import EventReturn from '../../features/events/event-return';\r\nimport OverlayOptions from '../../features/overlay/overlay-options';\r\nimport LeafletPolygons from './leaflet-polygons';\r\n\r\nexport default class LeafletOverlay {\r\n private map = null;\r\n private leaflet = null;\r\n private leafletPolygons: LeafletPolygons;\r\n\r\n constructor(map: any, leaflet: any, leafletPolygons: LeafletPolygons) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n this.leafletPolygons = leafletPolygons;\r\n }\r\n\r\n public drawOverlay(options: OverlayOptions, polygons: any) {\r\n const html: string = options.divElement.outerHTML;\r\n const myIcon = new this.leaflet.DivIcon({ html });\r\n\r\n const position = polygons && polygons.length > 0 ?\r\n this.leafletPolygons.getBoundsPolygons(polygons).getCenter() : options.position;\r\n\r\n const overlay = new this.leaflet.Marker(position, { icon: myIcon, draggable: options.draggable });\r\n\r\n if (options.addToMap) {\r\n overlay.addTo(this.map);\r\n }\r\n\r\n overlay.object = options.object;\r\n\r\n if (options.draggable && options.afterEventDragHandler) {\r\n overlay.on('dragend', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n options.afterEventDragHandler(param, options.object);\r\n });\r\n }\r\n\r\n return overlay;\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean) {\r\n const self = this;\r\n overlays.forEach((overlay) => show ? self.map.addLayer(overlay) : self.map.removeLayer(overlay));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-overlay.ts","import { PolygonEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport PolygonAlterOptions from '../../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../../features/polygons/polygon-options';\r\n\r\nexport default class LeafletPolygons {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public drawPolygon(options: PolygonOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n color: options.color || '#000',\r\n draggable: options.draggable,\r\n fillColor: options.fillColor || '#fff',\r\n fillOpacity: options.fillOpacity || 1,\r\n opacity: options.opacity || 1,\r\n weight: options.weight || 2\r\n };\r\n const polygon = new this.leaflet.Polygon(options.path, newOptions);\r\n\r\n if (eventClick) {\r\n polygon.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polygon.addTo(self.map);\r\n\r\n if (options.editable) {\r\n polygon.enableEdit();\r\n }\r\n }\r\n\r\n if (options.object) {\r\n polygon.object = options.object;\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(polygon.getBounds());\r\n }\r\n\r\n return polygon;\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean) {\r\n const self = this;\r\n polygons.forEach((polygon) => show ? self.map.addLayer(polygon) : self.map.removeLayer(polygon));\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions) {\r\n polygons.forEach((polygon) => {\r\n const style = {\r\n color: options.color ? options.color : polygon.options.color,\r\n draggable: options.draggable ? options.draggable : polygon.options.draggable,\r\n fillColor: options.fillColor ? options.fillColor : polygon.options.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : polygon.options.fillOpacity,\r\n opacity: options.opacity ? options.opacity : polygon.options.opacity,\r\n weight: options.weight ? options.weight : polygon.options.weight\r\n };\r\n\r\n if (options.path) {\r\n polygon.setLatLngs(options.path);\r\n }\r\n\r\n polygon.setStyle(style);\r\n\r\n if (options.editable !== null && options.editable !== undefined) {\r\n polygon.disableEdit();\r\n\r\n if (options.editable) {\r\n polygon.enableEdit();\r\n }\r\n }\r\n\r\n if (options.object) {\r\n polygon.object = options.object;\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.map.fitBounds(this.getBoundsPolygons(polygons));\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.map.panTo(this.getBoundsPolygons(polygons).getCenter());\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return this.map.hasLayer(polygon);\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return polygon.getLatLngs()[0].map((x: any) => [x.lat, x.lng]);\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n const self = this;\r\n polygons.forEach((polygon: any) => {\r\n switch (eventType) {\r\n case PolygonEventType.SetAt:\r\n this.addPolygonEventMove(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.InsertAt:\r\n this.addPolygonEventInsertAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n this.addPolygonEventRemoveAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n this.addPolygonEventDragPolygon(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.Click:\r\n this.addPolygonEventClick(polygon, eventFunction, self);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n polygons.forEach((polygon: any) => {\r\n switch (event) {\r\n case PolygonEventType.SetAt:\r\n polygon.off('editable:vertex:dragstart');\r\n break;\r\n case PolygonEventType.InsertAt:\r\n polygon.off('editable:vertex:new');\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n polygon.off('editable:vertex:clicked');\r\n polygon.off('editable:vertex:deleted');\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n polygon.off('dragend');\r\n break;\r\n case PolygonEventType.Click:\r\n polygon.off('click');\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public getBoundsPolygons(polygons) {\r\n const group = new this.leaflet.FeatureGroup(polygons);\r\n return group.getBounds();\r\n }\r\n\r\n private addPolygonEventMove(polygon: any, eventFunction: any) {\r\n polygon.on('editable:vertex:dragstart', (eventStart: any) => {\r\n const lastPosition = new EventReturn([eventStart.vertex.latlng.lat, eventStart.vertex.latlng.lng]);\r\n\r\n polygon.on('editable:vertex:dragend', (eventEnd: any) => {\r\n const newPosition = new EventReturn([eventEnd.vertex.latlng.lat, eventEnd.vertex.latlng.lng]);\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(newPosition, lastPosition, eventEnd.target.object, eventEnd.vertex.getIndex(), path[0]);\r\n polygon.off('editable:vertex:dragend');\r\n });\r\n });\r\n }\r\n\r\n private addPolygonEventInsertAt(polygon: any, eventFunction: any) {\r\n polygon.on('editable:vertex:new', (eventNew: any) => {\r\n const latlngs = eventNew.vertex.latlngs;\r\n const previous = latlngs[latlngs.findIndex((x: any) => x === eventNew.vertex.latlng) - 1];\r\n\r\n if (previous) {\r\n const previousPoint = new EventReturn([previous.lat, previous.lng]);\r\n\r\n polygon.on('editable:vertex:dragend', (event: any) => {\r\n const newPoint = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(newPoint, previousPoint, event.target.object, event.vertex.getIndex(), path[0]);\r\n polygon.off('editable:vertex:dragend');\r\n });\r\n }\r\n });\r\n }\r\n\r\n private addPolygonEventRemoveAt(polygon: any, eventFunction: any) {\r\n polygon.on('editable:vertex:deleted', (event: any) => {\r\n const param = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(param, path[0], event.target.object);\r\n });\r\n }\r\n\r\n private addPolygonEventDragPolygon(polygon: any, eventFunction: any) {\r\n polygon.on('dragend', (event: any) => {\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(path[0], event.target.object);\r\n });\r\n }\r\n\r\n private addPolygonEventClick(polygon: any, eventFunction: any, self: any) {\r\n polygon.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-polygons.ts","import { Polyline } from 'leaflet';\r\nimport { PolylineEventType } from '../../dto/event-type';\r\nimport { PolylineType } from '../../dto/polyline-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport NavigationOptions from '../../features/polyline/navigations-options';\r\nimport PolylineOptions from '../../features/polyline/polyline-options';\r\nimport LeafletPopup from './leaflet-popup';\r\n\r\nexport default class LeafletPolylines {\r\n private map = null;\r\n private leaflet = null;\r\n private leafletPopup: LeafletPopup;\r\n\r\n private selectedPolyline = null;\r\n private selectedPath = null;\r\n private navigateInfoWindow = null;\r\n private directionForward = false;\r\n private multiSelectionForward = false;\r\n private multiSelection = false;\r\n private navigateByPoint: boolean;\r\n private navigationOptions: NavigationOptions;\r\n\r\n constructor(map: any, leaflet: any, leafletPopup: LeafletPopup) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n this.leafletPopup = leafletPopup;\r\n }\r\n\r\n public drawPolyline(options: PolylineOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n color: options.color || '#000000',\r\n dashArray: null,\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n infowindows: options.infowindows,\r\n opacity: options.opacity || 1,\r\n weight: options.weight || 3,\r\n zIndex: options.zIndex\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.opacity = .7;\r\n newOptions.dashArray = '20,15';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const polyline = new this.leaflet.Polyline(options.path || [], newOptions);\r\n polyline.on('editable:vertex:rawclick', (e) => e.cancel());\r\n\r\n if (eventClick) {\r\n polyline.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n\r\n polyline.on('editable:vertex:rawclick', (event) => {\r\n event.cancel()\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n\r\n }\r\n\r\n if (options.style && options.style === PolylineType.Arrow) {\r\n const pathOptions = { fillOpacity: 1, weight: 0, color: polyline.options.color };\r\n\r\n polyline.decorator = self.leaflet.polylineDecorator(polyline, {\r\n patterns: [{\r\n offset: '20%',\r\n repeat: '90px',\r\n symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions })\r\n },\r\n { offset: '0%', symbol: self.leaflet.Symbol.arrowHead({ pathOptions, pixelSize: 20 }) },\r\n { offset: '100%', symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) }]\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polyline.addTo(self.map);\r\n if (polyline.decorator) { polyline.decorator.addTo(self.map); }\r\n if (options.editable) { polyline.enableEdit(); }\r\n }\r\n\r\n if (options.object) {\r\n polyline.object = options.object;\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(polyline.getBounds());\r\n }\r\n\r\n return polyline;\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any) {\r\n const polyline = this.drawPolyline(options, null);\r\n\r\n polyline.navigationHandlerClick = eventClick;\r\n this.navigationOptions = options.navigateOptions;\r\n this.navigateByPoint = this.navigationOptions ? this.navigationOptions.navigateByPoint : true;\r\n this.addNavigation(polyline);\r\n return polyline;\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean) {\r\n const self = this;\r\n polylines.forEach((polyline: any) => {\r\n if (show) {\r\n self.map.addLayer(polyline);\r\n if (polyline.options.editable) {\r\n polyline.enableEdit();\r\n }\r\n if (polyline.decorator) { self.map.addLayer(polyline.decorator); }\r\n } else {\r\n self.map.removeLayer(polyline);\r\n if (polyline.options.editable) {\r\n polyline.disableEdit();\r\n }\r\n if (polyline.decorator) { self.map.removeLayer(polyline.decorator); }\r\n }\r\n });\r\n }\r\n\r\n public alterPolylineOptions(polylines: any, options: PolylineOptions) {\r\n const self = this;\r\n\r\n polylines.forEach((polyline: any) => {\r\n const style: any = {\r\n color: options.color ? options.color : polyline.options.color,\r\n draggable: options.draggable ? options.draggable : polyline.options.draggable,\r\n opacity: options.opacity ? options.opacity : polyline.options.opacity,\r\n weight: options.weight ? options.weight : polyline.options.weight,\r\n zIndex: options.zIndex ? options.zIndex : polyline.options.zIndex\r\n };\r\n\r\n if (options.path) {\r\n polyline.setLatLngs(options.path);\r\n }\r\n\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n style.dashArray = '20,15';\r\n break;\r\n case PolylineType.Arrow:\r\n const pathOptions = { fillOpacity: 1, weight: 0, color: style.color };\r\n\r\n if (polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n }\r\n\r\n polyline.decorator = self.leaflet.polylineDecorator(polyline, {\r\n patterns: [{\r\n offset: '20%',\r\n repeat: '90px',\r\n symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions })\r\n },\r\n { offset: '0%', symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) },\r\n { offset: '100%', symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) }]\r\n });\r\n\r\n if (self.map.hasLayer(polyline)) {\r\n polyline.decorator.addTo(self.map);\r\n }\r\n break;\r\n default:\r\n if (polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n polyline.decorator = null;\r\n }\r\n break;\r\n }\r\n\r\n polyline.setStyle(style);\r\n\r\n if (options.object) {\r\n polyline.object = options.object;\r\n }\r\n\r\n if (options.editable) {\r\n polyline.disableEdit();\r\n polyline.enableEdit();\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any) {\r\n const self = this;\r\n self.map.fitBounds(self.getBoundsPolylines(polylines));\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return this.map.hasLayer(polyline);\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]) {\r\n polylines.forEach((polyline: any) => {\r\n const path = polyline.getLatLngs();\r\n\r\n path.push(new this.leaflet.LatLng(position[0], position[1]));\r\n polyline.setLatLngs(path);\r\n\r\n if (polyline.editEnabled && polyline.editEnabled()) {\r\n polyline.disableEdit();\r\n polyline.enableEdit();\r\n }\r\n });\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return polyline.getLatLngs().map((x: any) => [x.lat, x.lng]);\r\n }\r\n\r\n public removePolylineHighlight() {\r\n const self = this;\r\n\r\n if (self.selectedPath) {\r\n if (this.selectedPath.decorator) {\r\n this.map.removeLayer(this.selectedPath.decorator);\r\n }\r\n\r\n this.map.removeLayer(self.selectedPath);\r\n self.selectedPath = null;\r\n }\r\n\r\n if (self.navigateInfoWindow) {\r\n self.navigateInfoWindow.remove();\r\n }\r\n\r\n document.onkeyup = null;\r\n document.onkeydown = null;\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any) {\r\n polylines.forEach((polyline: any) => {\r\n switch (eventType) {\r\n case PolylineEventType.SetAt:\r\n this.addPolylineEventMove(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.InsertAt:\r\n this.addPolylineEventInsertAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n this.addPolylineEventRemoveAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOver:\r\n this.addPolylineEventMouseOver(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOut:\r\n this.addPolylineEventMouseOut(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n this.addPolylineEventDragPolyline(polyline, eventFunction);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType) {\r\n polylines.forEach((polyline: any) => {\r\n switch (event) {\r\n case PolylineEventType.SetAt:\r\n polyline.off('editable:vertex:dragstart');\r\n break;\r\n case PolylineEventType.InsertAt:\r\n polyline.off('editable:vertex:new');\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n polyline.off('editable:vertex:deleted');\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n polyline.off('dragend');\r\n break;\r\n case PolylineEventType.MouseOver:\r\n polyline.off('mouseover');\r\n break;\r\n case PolylineEventType.MouseOut:\r\n polyline.off('mouseout');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number) {\r\n this.directionForward = false;\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n document.onkeydown = this.onKeyUp.bind(this);\r\n } else {\r\n document.onkeyup = this.onKeyUp.bind(this);\r\n }\r\n\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return polyline.object;\r\n }\r\n\r\n public getObjectPolylineHighlight(): object {\r\n if (this.selectedPath) {\r\n return this.selectedPath.object;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any) {\r\n if (this.selectedPolyline) {\r\n this.addPolylineEvent([this.selectedPath], eventType, eventFunction);\r\n }\r\n }\r\n\r\n public getPolylineHighlightIndex() {\r\n if (this.selectedPath) {\r\n return [this.selectedPath.initialIdx, this.selectedPath.finalIdx];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /* Private methods */\r\n private addNavigation(polyline: any) {\r\n polyline.clearAllEventListeners();\r\n polyline.on('click', this.onClickPolyline.bind(this, polyline));\r\n }\r\n\r\n private onClickPolyline(polyline: any, event: any) {\r\n const index = this.checkIdx(polyline, event.latlng);\r\n\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n document.onkeydown = this.onKeyUp.bind(this);\r\n } else {\r\n document.onkeyup = this.onKeyUp.bind(this);\r\n }\r\n\r\n if (polyline.navigationHandlerClick) {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n polyline.navigationHandlerClick(param, event.target.object);\r\n }\r\n }\r\n\r\n private onKeyUp(event: any) {\r\n const self = this;\r\n\r\n if (self.selectedPath) {\r\n if (event.ctrlKey) {\r\n console.warn('Deprecated: CTRL is not needed in navigation anymore');\r\n }\r\n\r\n switch (event.which ? event.which : event.keyCode) {\r\n case 38: case 39:\r\n // up arrow or right arrow\r\n self.moveFowards(event.shiftKey);\r\n break;\r\n case 37: case 40:\r\n // left arrow or down arrow\r\n self.moveBackwards(event.shiftKey);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private moveFowards(multiselection: boolean) {\r\n const polyline = this.selectedPolyline;\r\n\r\n if ((!this.navigateByPoint || this.directionForward) && polyline.finalIdx < polyline.getLatLngs().length - 1) {\r\n this.navigateFoward(multiselection, polyline);\r\n }\r\n this.directionForward = true;\r\n this.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateFoward(multiSelection: boolean, polyline: any) {\r\n if (!multiSelection) {\r\n polyline.finalIdx++;\r\n polyline.initialIdx = this.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n this.multiSelection = false;\r\n } else {\r\n this.multiSelection = true;\r\n if (this.multiSelectionForward) {\r\n polyline.finalIdx++;\r\n }\r\n this.multiSelectionForward = true;\r\n }\r\n }\r\n\r\n private moveBackwards(multiSelection: boolean) {\r\n const polyline = this.selectedPolyline;\r\n\r\n if ((!this.navigateByPoint || !this.directionForward) && polyline.initialIdx > 0) {\r\n this.navigateBackward(multiSelection, polyline);\r\n }\r\n this.directionForward = false;\r\n this.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateBackward(multiSelection: boolean, polyline: any) {\r\n const self = this;\r\n if (!multiSelection) {\r\n polyline.initialIdx--;\r\n polyline.finalIdx = !self.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n self.multiSelection = false;\r\n } else {\r\n self.multiSelection = true;\r\n if (!self.multiSelectionForward) {\r\n polyline.initialIdx--;\r\n }\r\n self.multiSelectionForward = false;\r\n }\r\n }\r\n\r\n private moveSelectedPath(polyline: any, options: NavigationOptions) {\r\n const self = this;\r\n const pathSelected = polyline.getLatLngs().map((x: any) => [x.lat, x.lng])\r\n .slice(polyline.initialIdx, polyline.finalIdx + 1);\r\n\r\n if (self.selectedPath) {\r\n self.selectedPath.setLatLngs(pathSelected);\r\n this.selectedPath.object = polyline.object;\r\n } else {\r\n this.addNewSelectedPath(pathSelected, options, polyline.object);\r\n this.selectedPath.addTo(this.map);\r\n }\r\n\r\n if (this.selectedPath.decorator) {\r\n this.map.removeLayer(this.selectedPath.decorator);\r\n this.setArrowSelectedPath();\r\n }\r\n\r\n if ((options && options.editable) ||\r\n (this.selectedPath.editEnabled && this.selectedPath.editEnabled())) {\r\n this.selectedPath.disableEdit();\r\n this.selectedPath.enableEdit();\r\n }\r\n\r\n this.selectedPath.initialIdx = polyline.initialIdx;\r\n this.selectedPath.finalIdx = polyline.finalIdx;\r\n\r\n let idx = self.directionForward ? polyline.finalIdx : polyline.initialIdx;\r\n if (!this.navigateByPoint) {\r\n idx = polyline.finalIdx > polyline.initialIdx ? polyline.finalIdx : polyline.initialIdx;\r\n }\r\n\r\n const infowindow = polyline.options.infowindows ? polyline.options.infowindows[idx] : null;\r\n if (infowindow) {\r\n const point = polyline.getLatLngs()[idx];\r\n\r\n if (self.navigateInfoWindow) {\r\n self.leafletPopup.alterPopup(self.navigateInfoWindow, {\r\n content: infowindow,\r\n latlng: [point.lat, point.lng]\r\n });\r\n } else {\r\n self.navigateInfoWindow = self.leafletPopup.drawPopup({\r\n content: infowindow,\r\n latlng: [point.lat, point.lng]\r\n });\r\n }\r\n }\r\n }\r\n\r\n private setArrowSelectedPath() {\r\n const pathOptions = { fillOpacity: 1, weight: 0, color: this.selectedPath.options.color };\r\n this.selectedPath.decorator = this.leaflet.polylineDecorator(this.selectedPath, {\r\n patterns: [{ offset: '100%', symbol: this.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) }]\r\n });\r\n\r\n this.selectedPath.decorator.addTo(this.map);\r\n }\r\n\r\n private addNewSelectedPath(pathSelected, options, object) {\r\n const newOptions: any = {\r\n color: options && options.color || '#FF0000',\r\n draggable: false,\r\n editable: options.editable,\r\n opacity: options && options.opacity || 1,\r\n weight: options && options.weight || 10,\r\n zIndex: 9999\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.opacity = .7;\r\n newOptions.dashArray = '20,15';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.selectedPath = new this.leaflet.Polyline(pathSelected, newOptions);\r\n this.selectedPath.on('editable:vertex:rawclick', (e: any) => e.cancel());\r\n\r\n if (options.style && options.style === PolylineType.Arrow) {\r\n this.setArrowSelectedPath();\r\n }\r\n\r\n this.selectedPath.object = object;\r\n this.selectedPath.highlight = true;\r\n }\r\n\r\n private checkIdx(polyline: any, point: any) {\r\n const self = this;\r\n const path = polyline.getLatLngs();\r\n let distance = 0;\r\n let minDistance = Number.MAX_VALUE;\r\n let returnValue = -1;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n distance = self.distanceToLine(path[i], path[i + 1], point);\r\n\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n returnValue = i;\r\n }\r\n }\r\n return returnValue;\r\n }\r\n\r\n private distanceToLine(pt1: any, pt2: any, pt: any) {\r\n const self = this;\r\n const deltaX = pt2.lng - pt1.lng;\r\n const deltaY = pt2.lat - pt1.lat;\r\n let incIntersect = (pt.lng - pt1.lng) * deltaX;\r\n const deltaSum = (deltaX * deltaX) + (deltaY * deltaY);\r\n\r\n incIntersect += (pt.lat - pt1.lat) * deltaY;\r\n if (deltaSum > 0) {\r\n incIntersect /= deltaSum;\r\n } else {\r\n incIntersect = -1;\r\n }\r\n\r\n // The intersection occurs outside the line segment, 'before' pt1.\r\n if (incIntersect < 0) {\r\n return self.kmTo(pt, pt1);\r\n } else if (incIntersect > 1) {\r\n return self.kmTo(pt, pt2);\r\n }\r\n\r\n // Intersection point calculation.\r\n const intersect = new this.leaflet.LatLng(pt1.lat + incIntersect * deltaY, pt1.lng + incIntersect * deltaX);\r\n\r\n return self.kmTo(pt, intersect);\r\n }\r\n\r\n private kmTo(pt1: any, pt2: any) {\r\n const e = Math;\r\n const ra = e.PI / 180;\r\n const b = pt1.lat * ra;\r\n const c = pt2.lat * ra;\r\n const d = b - c;\r\n const g = pt1.lng * ra - pt2.lng * ra;\r\n const f = 2 * e.asin(e.sqrt(e.pow(e.sin(d / 2), 2) + e.cos(b) * e.cos(c) * e.pow(e.sin(g / 2), 2)));\r\n\r\n return f * 6378.137 * 1000;\r\n }\r\n\r\n private getBoundsPolylines(polylines: any) {\r\n const group = new this.leaflet.FeatureGroup(polylines);\r\n return group.getBounds();\r\n }\r\n\r\n private addPolylineEventMove(polyline: any, eventFunction: any) {\r\n const self = this;\r\n polyline.on('editable:vertex:dragstart', (eventStart: any) => {\r\n const lastPosition = new EventReturn([eventStart.vertex.latlng.lat, eventStart.vertex.latlng.lng]);\r\n\r\n polyline.on('editable:vertex:dragend', (eventEnd: any) => {\r\n if (polyline.highlight && polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n self.setArrowSelectedPath();\r\n }\r\n\r\n const newPosition = new EventReturn([eventEnd.vertex.latlng.lat, eventEnd.vertex.latlng.lng]);\r\n eventFunction(newPosition, lastPosition, eventEnd.target.object, eventEnd.vertex.getIndex(), polyline.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng])));\r\n polyline.off('editable:vertex:dragend');\r\n });\r\n });\r\n }\r\n\r\n private addPolylineEventInsertAt(polyline: any, eventFunction: any) {\r\n const self = this;\r\n polyline.on('editable:vertex:new', (eventNew: any) => {\r\n const latlngs = eventNew.vertex.latlngs;\r\n const previous = latlngs[latlngs.findIndex((x: any) => x === eventNew.vertex.latlng) - 1];\r\n const previousPoint = new EventReturn([previous.lat, previous.lng]);\r\n\r\n polyline.on('editable:vertex:dragend', (event: any) => {\r\n if (polyline.highlight && polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n self.setArrowSelectedPath();\r\n }\r\n\r\n const newPoint = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n eventFunction(newPoint, previousPoint, event.target.object, event.vertex.getIndex(), polyline.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng])));\r\n polyline.off('editable:vertex:dragend');\r\n });\r\n });\r\n }\r\n\r\n private addPolylineEventRemoveAt(polyline: any, eventFunction: any) {\r\n polyline.on('editable:vertex:deleted', (event: any) => {\r\n const param = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n eventFunction(param, event.target.object, polyline.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng])));\r\n });\r\n }\r\n\r\n private addPolylineEventMouseOver(polyline: any, eventFunction: any) {\r\n polyline.on('mouseover', (event: any) => {\r\n const param = event.target.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng]));\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n\r\n private addPolylineEventMouseOut(polyline: any, eventFunction: any) {\r\n polyline.on('mouseout', (event: any) => {\r\n const param = event.target.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng]));\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n\r\n private addPolylineEventDragPolyline(polyline: any, eventFunction: any) {\r\n polyline.on('dragend', (event: any) => {\r\n const param = event.target.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng]));\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-polylines.ts","import PopupOptions from '../../features/popup/popup-options';\r\n\r\nexport default class LeafletPopup {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public drawPopup(options: PopupOptions, marker?: any) {\r\n const self = this;\r\n let popup = null;\r\n\r\n if (!marker) {\r\n popup = new this.leaflet.Popup();\r\n popup.setLatLng(options.latlng);\r\n popup.setContent(options.content);\r\n popup.openOn(self.map);\r\n\r\n } else {\r\n popup = self.drawPopupOnMarker(marker, options);\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n return popup;\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any) {\r\n const self = this;\r\n\r\n if (marker && !marker.getPopup()) {\r\n popup = self.drawPopup(options, marker);\r\n } else {\r\n self.alterPopupContent(popup, options, marker);\r\n\r\n if (!popup.isOpen()) {\r\n if (!marker) {\r\n popup.openOn(self.map);\r\n } else if (options.notCalledByMap) {\r\n marker.openPopup();\r\n }\r\n }\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n\r\n return popup;\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any) {\r\n if (marker) {\r\n popup = marker._popup;\r\n }\r\n\r\n if (popup) {\r\n if (options.content) {\r\n popup.setContent(options.content);\r\n }\r\n\r\n if (options.latlng) {\r\n popup.setLatLng(options.latlng);\r\n }\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n }\r\n\r\n public closePopup(popup: any) {\r\n popup.remove();\r\n }\r\n\r\n private drawPopupOnMarker(marker: any, options: PopupOptions) {\r\n marker.bindPopup(options.content);\r\n const popup = marker.getPopup();\r\n\r\n marker.openPopup();\r\n return popup;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-popup.ts","export default class CircleAlterOptions {\r\n public center: number[];\r\n public radius: number;\r\n public weight: number;\r\n public fillOpacity?: number;\r\n public fillColor?: string;\r\n public color?: string;\r\n public opacity?: number;\r\n public editable?: boolean;\r\n public draggable?: boolean;\r\n\r\n constructor(center: number[], radius: number, weight: number, fillOpacity?: number,\r\n fillColor?: string, color?: string, opacity?: number) {\r\n\r\n this.center = center;\r\n this.radius = radius;\r\n this.weight = weight;\r\n this.fillOpacity = fillOpacity;\r\n this.fillColor = fillColor;\r\n this.color = color;\r\n this.opacity = opacity;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/circle/circle-alter-options.ts","export default class CircleOptions {\r\n public center: number[];\r\n public radius: number;\r\n public weight: number;\r\n public addToMap?: boolean;\r\n public fillOpacity?: number;\r\n public fillColor?: string;\r\n public color?: string;\r\n public opacity?: number;\r\n public draggable?: boolean;\r\n public editable?: boolean;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n\r\n constructor(center: number[], radius: number, weight: number, addToMap?: boolean, fillOpacity?: number,\r\n fillColor?: string, color?: string, opacity?: number, draggable?: boolean, editable?: boolean,\r\n fitBounds?: boolean, object?: object) {\r\n\r\n this.center = center;\r\n this.radius = radius;\r\n this.weight = weight;\r\n this.addToMap = addToMap;\r\n this.fillOpacity = fillOpacity;\r\n this.fillColor = fillColor;\r\n this.color = color;\r\n this.opacity = opacity;\r\n this.draggable = draggable;\r\n this.editable = editable;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/circle/circle-options.ts","\r\nexport default class GeoJsonOptions {\r\n public draggable?: boolean;\r\n public editable?: boolean;\r\n\r\n constructor(draggable?: boolean, editable?: boolean) {\r\n this.draggable = draggable;\r\n this.editable = editable;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/geojson/geojson-options.ts","import CircleMarkerStyle from './circle-marker-style';\r\n\r\nexport default class CircleMarkerOptions {\r\n public latlng: number[];\r\n public addToMap?: boolean;\r\n public style: CircleMarkerStyle;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n\r\n constructor(latlng: number[], style: CircleMarkerStyle, addToMap?: boolean, fitBounds?: boolean, object?: object) {\r\n this.latlng = latlng;\r\n this.addToMap = addToMap;\r\n this.style = style;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/circle-marker-options.ts","export default class CircleMarkerStyle {\r\n public radius: number;\r\n public weight?: number;\r\n public color?: string;\r\n public fillColor?: string;\r\n public fillOpacity?: number;\r\n\r\n constructor(radius: number, weight?: number, color?: string, fillColor?: string, fillOpacity?: number) {\r\n this.radius = radius;\r\n this.weight = weight;\r\n this.color = color;\r\n this.fillColor = fillColor;\r\n this.fillOpacity = fillOpacity;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/circle-marker-style.ts","import CircleMarkerStyle from './circle-marker-style';\r\nimport MarkerIcon from './marker-icon';\r\n\r\nexport default class MarkerAlterOptions {\r\n public latlng?: number[];\r\n public icon?: MarkerIcon;\r\n public style?: CircleMarkerStyle;\r\n\r\n constructor(latlng?: number[], icon?: MarkerIcon, style?: CircleMarkerStyle) {\r\n this.latlng = latlng;\r\n this.icon = icon;\r\n this.style = style;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/marker-alter-options.ts","export default class MarkerIcon {\r\n public url: string;\r\n public size?: number[];\r\n\r\n constructor(url: string, size?: number[]) {\r\n this.url = url;\r\n this.size = size;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/marker-icon.ts","import MarkerIcon from './marker-icon';\r\n\r\nexport default class MarkerOptions {\r\n public latlng: number[];\r\n public addToMap?: boolean;\r\n public draggable?: boolean;\r\n public icon?: MarkerIcon;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n public addClusterer?: boolean;\r\n\r\n constructor(latlng: number[], addToMap: boolean = false, draggable: boolean = false, icon?: MarkerIcon,\r\n fitBounds: boolean = false, object?: object, addClusterer = false) {\r\n\r\n this.latlng = latlng;\r\n this.addToMap = addToMap;\r\n this.draggable = draggable;\r\n this.icon = icon;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n this.addClusterer = addClusterer;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/marker-options.ts","export default class OverlayOptions {\r\n public position: number[];\r\n public divElement: HTMLDivElement;\r\n public addToMap: boolean;\r\n public object: any;\r\n public polygon: string;\r\n public conditionPolygon: any;\r\n public draggable: boolean;\r\n public afterEventDragHandler: any;\r\n\r\n constructor(divElement: HTMLDivElement, addToMap: boolean, position?: number[], object?: any,\r\n polygon?: string, conditionPolygon?: any, draggable: boolean = false) {\r\n this.position = position;\r\n this.divElement = divElement;\r\n this.addToMap = addToMap;\r\n this.object = object;\r\n this.polygon = polygon;\r\n this.conditionPolygon = conditionPolygon;\r\n this.draggable = draggable;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/overlay/overlay-options.ts","export default class PolygonAlterOptions {\r\n public weight: number;\r\n public color?: string;\r\n public opacity?: number;\r\n public fillColor?: string;\r\n public fillOpacity?: number;\r\n public addToMap: boolean;\r\n public object: any;\r\n public path: number[][];\r\n public editable?: boolean;\r\n public draggable?: boolean;\r\n\r\n constructor(addToMap: boolean, color?: string, opacity?: number, fillColor?: string, fillOpacity?: number,\r\n weight?: number) {\r\n this.addToMap = addToMap;\r\n this.color = color;\r\n this.opacity = opacity;\r\n this.fillColor = fillColor;\r\n this.fillOpacity = fillOpacity;\r\n this.weight = weight;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polygons/polygon-alter-options.ts","export default class PolygonOptions {\r\n public path: number[][];\r\n public weight: number;\r\n public addToMap?: boolean;\r\n public color?: string;\r\n public opacity?: number;\r\n public fillColor?: string;\r\n public fillOpacity?: number;\r\n public draggable?: boolean;\r\n public editable?: boolean;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n public zIndex: number;\r\n\r\n constructor(path: number[][], weight: number, addToMap?: boolean, color?: string, opacity?: number,\r\n fillColor?: string, fillOpacity?: number, draggable?: boolean, editable?: boolean, fitBounds?: boolean,\r\n object?: object) {\r\n\r\n this.path = path;\r\n this.weight = weight;\r\n this.addToMap = addToMap;\r\n this.color = color;\r\n this.opacity = opacity;\r\n this.fillColor = fillColor;\r\n this.fillOpacity = fillOpacity;\r\n this.draggable = draggable;\r\n this.editable = editable;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polygons/polygon-options.ts","import { PolylineType } from '../../dto/polyline-type';\r\n\r\nexport default class NavigationOptions {\r\n public color?: string;\r\n public weight?: number;\r\n public opacity?: number;\r\n public navigateByPoint: boolean; // Set to false when you want to navigate by stretch, and not by points\r\n public style: PolylineType;\r\n public editable: boolean;\r\n public navegateOnKeyPress: boolean;\r\n\r\n constructor(color?: string, weight?: number, navigateByPoint: boolean = true, opacity = 1) {\r\n this.color = color;\r\n this.weight = weight;\r\n this.opacity = opacity;\r\n this.navigateByPoint = navigateByPoint;\r\n this.navegateOnKeyPress = false\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polyline/navigations-options.ts","export default class PopupOptions {\r\n public latlng: number[];\r\n public content: string;\r\n public marker?: string;\r\n public conditionMarker?: any;\r\n public notCalledByMap?: boolean; /* Property to set if open is called from map event or not, only used on leaflet */\r\n public object?: object;\r\n\r\n constructor(latlng: number[], content: string, marker?: string, conditionMarker?: any,\r\n notCalledByMap?: boolean, object?: object) {\r\n this.latlng = latlng;\r\n this.content = content;\r\n this.marker = marker;\r\n this.conditionMarker = conditionMarker;\r\n this.notCalledByMap = notCalledByMap;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/popup/popup-options.ts","/**\r\n * urlBuilder\r\n *\r\n * @param {object} params\r\n * @param {string} params.base the base url\r\n * @param {array} params.libraries an array of the libraries to be requested\r\n * @param {string} params.callback the callback function\r\n *\r\n * @return {string}\r\n */\r\nexport const urlBuilder = (params) => {\r\n let builtUrl = params.base;\r\n\r\n builtUrl += '?';\r\n\r\n if (params.apiKey) {\r\n builtUrl += 'key=' + params.apiKey + '&';\r\n }\r\n if (params.integrity) {\r\n builtUrl += 'integrity=' + params.integrity + '&';\r\n }\r\n\r\n if (params.client) {\r\n builtUrl += 'client=' + params.client + '&';\r\n }\r\n\r\n if (params.crossorigin) {\r\n builtUrl += 'crossorigin=' + params.crossorigin + '&';\r\n }\r\n\r\n if (params.libraries && params.libraries.length > 0) {\r\n builtUrl += 'libraries=';\r\n\r\n params.libraries.forEach(function (library, index) {\r\n builtUrl += library;\r\n\r\n if (index !== params.libraries.length - 1) {\r\n builtUrl += ',';\r\n }\r\n });\r\n\r\n builtUrl += '&';\r\n }\r\n\r\n if (params.language) {\r\n builtUrl += 'language=' + params.language + '&';\r\n }\r\n\r\n if (params.callback) {\r\n builtUrl += 'callback=' + params.callback + '&';\r\n }\r\n\r\n return builtUrl;\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/url-builder.ts"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 055f440e5f36e347d05b","webpack:///./src/models/features/events/event-return.ts","webpack:///./src/models/dto/event-type.ts","webpack:///./src/models/dto/map-type.ts","webpack:///./src/models/dto/polyline-type.ts","webpack:///./src/models/features/marker-clusterer/marker-clusterer-config.ts","webpack:///./src/models/features/polyline/polyline-options.ts","webpack:///./src/utils/maps-api-loader.service.ts","webpack:///./src/index.ts","webpack:///./~/@google/markerclustererplus/src/markerclusterer.js","webpack:///./src/map.ts","webpack:///./src/models/apis/googleMaps.ts","webpack:///./src/models/apis/google/google-circles.ts","webpack:///./src/models/apis/google/google-geojson.ts","webpack:///./src/models/apis/google/google-map.ts","webpack:///./src/models/apis/google/google-markers.ts","webpack:///./src/models/apis/google/google-overlay.ts","webpack:///./src/models/apis/google/google-polygons.ts","webpack:///./src/models/apis/google/google-polylines.ts","webpack:///./src/models/apis/google/google-popup.ts","webpack:///./src/models/apis/leaflet.ts","webpack:///./src/models/apis/leaflet/leaflet-circle.ts","webpack:///./src/models/apis/leaflet/leaflet-geojson.ts","webpack:///./src/models/apis/leaflet/leaflet-map.ts","webpack:///./src/models/apis/leaflet/leaflet-markers.ts","webpack:///./src/models/apis/leaflet/leaflet-overlay.ts","webpack:///./src/models/apis/leaflet/leaflet-polygons.ts","webpack:///./src/models/apis/leaflet/leaflet-polylines.ts","webpack:///./src/models/apis/leaflet/leaflet-popup.ts","webpack:///./src/models/features/circle/circle-alter-options.ts","webpack:///./src/models/features/circle/circle-options.ts","webpack:///./src/models/features/geojson/geojson-options.ts","webpack:///./src/models/features/marker/circle-marker-options.ts","webpack:///./src/models/features/marker/circle-marker-style.ts","webpack:///./src/models/features/marker/marker-alter-options.ts","webpack:///./src/models/features/marker/marker-icon.ts","webpack:///./src/models/features/marker/marker-options.ts","webpack:///./src/models/features/overlay/overlay-options.ts","webpack:///./src/models/features/polygons/polygon-alter-options.ts","webpack:///./src/models/features/polygons/polygon-options.ts","webpack:///./src/models/features/polyline/navigations-options.ts","webpack:///./src/models/features/popup/popup-options.ts","webpack:///./src/utils/url-builder.ts"],"names":[],"mappings":"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;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM,uBAAuB,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,yBAAyB;AACzB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,2EAA2E;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,wBAAwB,yBAAyB;AACnH;AACA,2CAA2C,gCAAgC;AAC3E,KAAK;AACL;AACA,2EAA2E;AAC3E;AACA;AACA;AACA,4BAA4B;AAC5B,4CAA4C;AAC5C,6CAA6C;AAC7C,wCAAwC;AACxC,6CAA6C;AAC7C,+CAA+C;AAC/C,+CAA+C;AAC/C,6CAA6C;AAC7C,uDAAuD;AACvD,4BAA4B;AAC5B,sCAAsC;AACtC,4CAA4C;AAC5C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,YAAY,OAAO;AACnB;AACA;AACA;AACA,8BAA8B;AAC9B,iCAAiC,sBAAsB,uBAAuB;AAC9E,2CAA2C,gCAAgC;AAC3E,wCAAwC;AACxC,uCAAuC;AACvC,qCAAqC;AACrC,mCAAmC;AACnC,gCAAgC;AAChC;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,eAAe,YAAY;AAC3B;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,SAAS,sBAAsB;AAC/B,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA,cAAc,QAAQ;AACtB;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA,cAAc,OAAO;AACrB;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA,KAAK,sBAAsB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,MAAM,uBAAuB,uBAAuB;AAClE;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,wDAAwD;AACxD;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B;AAChG;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,2BAA2B;AACtC,WAAW,uBAAuB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,mBAAmB;AACnB;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;;AAEA;AACA,aAAa,4BAA4B;AACzC;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,6CAA6C;AACxD;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,aAAa,oBAAoB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,YAAY,OAAO;AACnB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,yBAAyB;AACpC,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA,uBAAuB;AACvB;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;AACA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","file":"inlog-maps.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"InlogMaps\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"InlogMaps\"] = factory();\n\telse\n\t\troot[\"InlogMaps\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 42);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 055f440e5f36e347d05b","export default class EventReturn {\r\n public latlng: number[];\r\n\r\n constructor(latlng: number[]) {\r\n this.latlng = latlng;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/events/event-return.ts","export enum MapEventType {\r\n Click,\r\n ZoomChanged\r\n}\r\n\r\nexport enum MarkerEventType {\r\n Click,\r\n RightClick,\r\n AfterDrag,\r\n MouseOver,\r\n MouseOut,\r\n BeforeDrag\r\n}\r\n\r\nexport enum CircleEventType {\r\n Click,\r\n CenterChanged,\r\n RadiusChanged\r\n}\r\n\r\nexport enum PolygonEventType {\r\n SetAt,\r\n InsertAt,\r\n RemoveAt,\r\n DragPolygon,\r\n Click\r\n}\r\n\r\nexport enum PolylineEventType {\r\n SetAt,\r\n InsertAt,\r\n RemoveAt,\r\n DragPolyline,\r\n MouseOver,\r\n MouseOut,\r\n RightClick\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/dto/event-type.ts","export enum MapType {\r\n Google,\r\n Leaflet\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/dto/map-type.ts","export enum PolylineType {\r\n Dashed,\r\n Dotted,\r\n Arrow\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/dto/polyline-type.ts","export default class MarkerClustererConfig {\r\n public clusterZoomOnClick: boolean;\r\n public clusterMinSize: number;\r\n public clusterMaxZoom: number;\r\n\r\n constructor(clusterZoomOnClick: boolean, clusterMinSize: number, clusterMaxZoom: number) {\r\n this.clusterZoomOnClick = clusterZoomOnClick;\r\n this.clusterMinSize = clusterMinSize;\r\n this.clusterMaxZoom = clusterMaxZoom;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker-clusterer/marker-clusterer-config.ts","import NavigationOptions from './navigations-options';\r\nimport { PolylineType } from '../../dto/polyline-type';\r\n\r\nexport default class PolylineOptions {\r\n public path: number[][];\r\n public addToMap?: boolean;\r\n public fitBounds?: boolean;\r\n public editable?: boolean;\r\n public draggable?: boolean;\r\n public color?: string;\r\n public weight: number;\r\n public object?: object;\r\n public infowindows?: string[];\r\n public style?: PolylineType;\r\n public navigateOptions?: NavigationOptions;\r\n public opacity: number;\r\n public zIndex: number;\r\n\r\n constructor(path?: number[][], addToMap?: boolean, fitBounds?: boolean,\r\n editable?: boolean, draggable?: boolean, color?: string, weight?: number,\r\n object?: object, infowindows?: string[], navigateOptions?: NavigationOptions, style?: PolylineType,\r\n opacity?: number, zIndex?: number) {\r\n\r\n this.path = path;\r\n this.addToMap = addToMap;\r\n this.fitBounds = fitBounds;\r\n this.editable = editable;\r\n this.draggable = draggable;\r\n this.color = color;\r\n this.weight = weight;\r\n this.object = object;\r\n this.infowindows = infowindows;\r\n this.navigateOptions = navigateOptions;\r\n this.style = style;\r\n this.opacity = opacity;\r\n this.zIndex = zIndex;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polyline/polyline-options.ts","import { MapType } from '../models/dto/map-type';\r\nimport { urlBuilder } from './url-builder';\r\n\r\nexport class MapsApiLoaderService {\r\n public static loadGoogleAPI(params) {\r\n const script = document.createElement('script');\r\n\r\n script.type = 'text/javascript';\r\n script.setAttribute('data-google-inlogmaps', 'true');\r\n\r\n script.src = urlBuilder({\r\n apiKey: params.apiKey,\r\n base: 'https://maps.googleapis.com/maps/api/js',\r\n callback: 'mapsAPILoadCallback',\r\n client: params.client,\r\n language: params.language,\r\n libraries: params.libraries || []\r\n });\r\n\r\n var has_script = document.querySelector('script').hasAttribute('data-google-inlogmaps');\r\n\r\n if (!has_script) document.querySelector('head').appendChild(script);\r\n }\r\n\r\n public static loadLeafletAPI(params) {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = 'https://desenvolvimentoweb.blob.core.windows.net/inlog-leaflet/leaflet.css';\r\n // link.integrity = params.cssIntegrity;\r\n // link.setAttribute('crossorigin', params.crossorigin);\r\n\r\n document.querySelector('head').appendChild(link);\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n\r\n script.src = urlBuilder({\r\n base: 'https://desenvolvimentoweb.blob.core.windows.net/inlog-leaflet/leaflet.js',\r\n callback: 'mapsAPILoadCallback',\r\n // crossorigin: params.crossorigin,\r\n // integrity: params.integrity\r\n });\r\n\r\n document.querySelector('head').appendChild(script);\r\n }\r\n\r\n private static windowRef = null;\r\n private static mapsApi = null;\r\n\r\n constructor() { /* */ }\r\n\r\n // TODO: needs refactoring\r\n public loadApi(mapType: MapType, params) {\r\n if (MapsApiLoaderService.mapsApi) {\r\n return Promise.resolve(MapsApiLoaderService.mapsApi);\r\n }\r\n\r\n MapsApiLoaderService.windowRef = window ? window : { api: null, mapsAPILoadCallback: null };\r\n\r\n const deferred = (resolve, reject) => {\r\n if (mapType === MapType.Google) {\r\n MapsApiLoaderService.loadGoogleAPI(params);\r\n } else {\r\n MapsApiLoaderService.loadLeafletAPI(params);\r\n }\r\n\r\n // Temporaria para testar Leaflet\r\n if (mapType === MapType.Leaflet) {\r\n setTimeout(() => {\r\n MapsApiLoaderService.mapsApi = MapsApiLoaderService.windowRef.L;\r\n resolve(MapsApiLoaderService.mapsApi);\r\n }, 2000);\r\n } else {\r\n MapsApiLoaderService.windowRef.mapsAPILoadCallback = () => {\r\n MapsApiLoaderService.mapsApi = MapsApiLoaderService.windowRef.google;\r\n resolve(MapsApiLoaderService.mapsApi);\r\n };\r\n }\r\n\r\n setTimeout(() => {\r\n if (!MapsApiLoaderService.windowRef.api) {\r\n reject(new Error('Loading took too long'));\r\n }\r\n }, 5000);\r\n };\r\n\r\n return new Promise(deferred);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/maps-api-loader.service.ts","'use strict';\r\n\r\nimport Map from './map';\r\nimport IMapFunctions from './models/apis/mapFunctions';\r\nimport CircleAlterOptions from './models/features/circle/circle-alter-options';\r\nimport CircleOptions from './models/features/circle/circle-options';\r\nimport EventReturn from './models/features/events/event-return';\r\nimport GeoJsonOptions from './models/features/geojson/geojson-options';\r\nimport CircleMarkerOptions from './models/features/marker/circle-marker-options';\r\nimport CircleMarkerStyle from './models/features/marker/circle-marker-style';\r\nimport MarkerAlterOptions from './models/features/marker/marker-alter-options';\r\nimport MarkerIcon from './models/features/marker/marker-icon';\r\nimport MarkerOptions from './models/features/marker/marker-options';\r\nimport OverlayOptions from './models/features/overlay/overlay-options';\r\nimport PolygonAlterOptions from './models/features/polygons/polygon-alter-options';\r\nimport PolygonOptions from './models/features/polygons/polygon-options';\r\nimport NavigationOptions from './models/features/polyline/navigations-options';\r\nimport PolylineOptions from './models/features/polyline/polyline-options';\r\nimport PopupOptions from './models/features/popup/popup-options';\r\nimport MarkerClustererConfig from './models/features/marker-clusterer/marker-clusterer-config';\r\nimport { MarkerEventType, CircleEventType, PolygonEventType, PolylineEventType, MapEventType } from './models/dto/event-type';\r\nimport { MapType } from './models/dto/map-type';\r\nimport { PolylineType } from './models/dto/polyline-type';\r\n\r\nexport { Map };\r\nexport { MarkerOptions };\r\nexport { MarkerIcon };\r\nexport { EventReturn };\r\nexport { CircleMarkerOptions };\r\nexport { CircleMarkerStyle };\r\nexport { GeoJsonOptions };\r\nexport { MarkerAlterOptions };\r\nexport { PopupOptions };\r\nexport { PolygonOptions };\r\nexport { PolygonAlterOptions };\r\nexport { CircleOptions };\r\nexport { CircleAlterOptions };\r\nexport { PolylineOptions };\r\nexport { NavigationOptions };\r\nexport { IMapFunctions };\r\nexport { OverlayOptions };\r\nexport { MapType };\r\nexport { PolylineType };\r\nexport { MapEventType };\r\nexport { MarkerEventType };\r\nexport { CircleEventType };\r\nexport { PolygonEventType };\r\nexport { PolylineEventType };\r\nexport { MarkerClustererConfig };\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.ts","/**\n * @name MarkerClustererPlus for Google Maps V3\n * @version 2.1.11\n * @author Gary Little\n * @fileoverview\n * The library creates and manages per-zoom-level clusters for large amounts of markers.\n * <p>\n * This is an enhanced V3 implementation of the V2 MarkerClusterer by Xiaoxi Wu. It is\n * based on the V3 MarkerClusterer port by Luke Mahe. MarkerClustererPlus was created\n * by Gary Little.\n * <p>\n * v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It\n * adds support for the <code>ignoreHidden</code>, <code>title</code>, <code>batchSizeIE</code>,\n * and <code>calculator</code> properties as well as support for four more events. It also allows\n * greater control over the styling of the text that appears on the cluster marker. The\n * documentation has been significantly improved and the overall code has been simplified and\n * polished. Very large numbers of markers can now be managed without causing Javascript timeout\n * errors on Internet Explorer. Note that the name of the <code>clusterclick</code> event has been\n * deprecated. The new name is <code>click</code>, so please change your application code now.\n */\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @name ClusterIconStyle\n * @class This class represents the object for values in the <code>styles</code> array passed\n * to the {@link MarkerClusterer} constructor. The element in this array that is used to\n * style the cluster icon is determined by calling the <code>calculator</code> function.\n *\n * @property {string} url The URL of the cluster icon image file. Required.\n * @property {number} height The display height (in pixels) of the cluster icon. Required.\n * @property {number} width The display width (in pixels) of the cluster icon. Required.\n * @property {Array} [anchorText] The position (in pixels) from the center of the cluster icon to\n * where the text label is to be centered and drawn. The format is <code>[yoffset, xoffset]</code>\n * where <code>yoffset</code> increases as you go down from center and <code>xoffset</code>\n * increases to the right of center. The default is <code>[0, 0]</code>.\n * @property {Array} [anchorIcon] The anchor position (in pixels) of the cluster icon. This is the\n * spot on the cluster icon that is to be aligned with the cluster position. The format is\n * <code>[yoffset, xoffset]</code> where <code>yoffset</code> increases as you go down and\n * <code>xoffset</code> increases to the right of the top-left corner of the icon. The default\n * anchor position is the center of the cluster icon.\n * @property {string} [textColor=\"black\"] The color of the label text shown on the\n * cluster icon.\n * @property {number} [textSize=11] The size (in pixels) of the label text shown on the\n * cluster icon.\n * @property {string} [textDecoration=\"none\"] The value of the CSS <code>text-decoration</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [fontWeight=\"bold\"] The value of the CSS <code>font-weight</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [fontStyle=\"normal\"] The value of the CSS <code>font-style</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [fontFamily=\"Arial,sans-serif\"] The value of the CSS <code>font-family</code>\n * property for the label text shown on the cluster icon.\n * @property {string} [backgroundPosition=\"0 0\"] The position of the cluster icon image\n * within the image defined by <code>url</code>. The format is <code>\"xpos ypos\"</code>\n * (the same format as for the CSS <code>background-position</code> property). You must set\n * this property appropriately when the image defined by <code>url</code> represents a sprite\n * containing multiple images. Note that the position <i>must</i> be specified in px units.\n */\n/**\n * @name ClusterIconInfo\n * @class This class is an object containing general information about a cluster icon. This is\n * the object that a <code>calculator</code> function returns.\n *\n * @property {string} text The text of the label to be shown on the cluster icon.\n * @property {number} index The index plus 1 of the element in the <code>styles</code>\n * array to be used to style the cluster icon.\n * @property {string} title The tooltip to display when the mouse moves over the cluster icon.\n * If this value is <code>undefined</code> or <code>\"\"</code>, <code>title</code> is set to the\n * value of the <code>title</code> property passed to the MarkerClusterer.\n */\n/**\n * A cluster icon.\n *\n * @constructor\n * @extends google.maps.OverlayView\n * @param {Cluster} cluster The cluster with which the icon is to be associated.\n * @param {Array} [styles] An array of {@link ClusterIconStyle} defining the cluster icons\n * to use for various cluster sizes.\n * @private\n */\nfunction ClusterIcon(cluster, styles) {\n cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);\n\n this.cluster_ = cluster;\n this.className_ = cluster.getMarkerClusterer().getClusterClass();\n this.styles_ = styles;\n this.center_ = null;\n this.div_ = null;\n this.sums_ = null;\n this.visible_ = false;\n\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n}\n\n\n/**\n * Adds the icon to the DOM.\n */\nClusterIcon.prototype.onAdd = function () {\n var cClusterIcon = this;\n var cMouseDownInCluster;\n var cDraggingMapByCluster;\n var gmVersion = google.maps.version.split(\".\");\n\n gmVersion = parseInt(gmVersion[0] * 100, 10) + parseInt(gmVersion[1], 10);\n\n this.div_ = document.createElement(\"div\");\n this.div_.className = this.className_;\n if (this.visible_) {\n this.show();\n }\n\n this.getPanes().overlayMouseTarget.appendChild(this.div_);\n\n // Fix for Issue 157\n this.boundsChangedListener_ = google.maps.event.addListener(this.getMap(), \"bounds_changed\", function () {\n cDraggingMapByCluster = cMouseDownInCluster;\n });\n\n google.maps.event.addDomListener(this.div_, \"mousedown\", function () {\n cMouseDownInCluster = true;\n cDraggingMapByCluster = false;\n });\n\n// March 1, 2018: Fix for this 3.32 exp bug, https://issuetracker.google.com/issues/73571522\n// But it doesn't work with earlier releases so do a version check.\n if (gmVersion >= 332) { // Ugly version-dependent code\n google.maps.event.addDomListener(this.div_, \"touchstart\", function (e) {\n e.stopPropagation();\n });\n }\n\n google.maps.event.addDomListener(this.div_, \"click\", function (e) {\n cMouseDownInCluster = false;\n if (!cDraggingMapByCluster) {\n var theBounds;\n var mz;\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(mc, \"click\", cClusterIcon.cluster_);\n google.maps.event.trigger(mc, \"clusterclick\", cClusterIcon.cluster_); // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (mc.getZoomOnClick()) {\n // Zoom into the cluster.\n mz = mc.getMaxZoom();\n theBounds = cClusterIcon.cluster_.getBounds();\n mc.getMap().fitBounds(theBounds);\n // There is a fix for Issue 170 here:\n setTimeout(function () {\n mc.getMap().fitBounds(theBounds);\n // Don't zoom beyond the max zoom level\n if (mz !== null && (mc.getMap().getZoom() > mz)) {\n mc.getMap().setZoom(mz + 1);\n }\n }, 100);\n }\n\n // Prevent event propagation to the map:\n e.cancelBubble = true;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n }\n });\n\n google.maps.event.addDomListener(this.div_, \"mouseover\", function () {\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(mc, \"mouseover\", cClusterIcon.cluster_);\n });\n\n google.maps.event.addDomListener(this.div_, \"mouseout\", function () {\n var mc = cClusterIcon.cluster_.getMarkerClusterer();\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(mc, \"mouseout\", cClusterIcon.cluster_);\n });\n};\n\n\n/**\n * Removes the icon from the DOM.\n */\nClusterIcon.prototype.onRemove = function () {\n if (this.div_ && this.div_.parentNode) {\n this.hide();\n google.maps.event.removeListener(this.boundsChangedListener_);\n google.maps.event.clearInstanceListeners(this.div_);\n this.div_.parentNode.removeChild(this.div_);\n this.div_ = null;\n }\n};\n\n\n/**\n * Draws the icon.\n */\nClusterIcon.prototype.draw = function () {\n if (this.visible_) {\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.top = pos.y + \"px\";\n this.div_.style.left = pos.x + \"px\";\n this.div_.style.zIndex = google.maps.Marker.MAX_ZINDEX + 1; // Put above all unclustered markers\n }\n};\n\n\n/**\n * Hides the icon.\n */\nClusterIcon.prototype.hide = function () {\n if (this.div_) {\n this.div_.style.display = \"none\";\n }\n this.visible_ = false;\n};\n\n\n/**\n * Positions and shows the icon.\n */\nClusterIcon.prototype.show = function () {\n if (this.div_) {\n var img = \"\";\n // NOTE: values must be specified in px units\n var bp = this.backgroundPosition_.split(\" \");\n var spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, \"\"), 10);\n var spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, \"\"), 10);\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.cssText = this.createCss(pos);\n img = \"<img src='\" + this.url_ + \"' style='position: absolute; top: \" + spriteV + \"px; left: \" + spriteH + \"px; \";\n if (this.cluster_.getMarkerClusterer().enableRetinaIcons_) {\n img += \"width: \" + this.width_ + \"px; height: \" + this.height_ + \"px;\";\n } else {\n img += \"clip: rect(\" + (-1 * spriteV) + \"px, \" + ((-1 * spriteH) + this.width_) + \"px, \" +\n ((-1 * spriteV) + this.height_) + \"px, \" + (-1 * spriteH) + \"px);\";\n }\n img += \"'>\";\n this.div_.innerHTML = img + \"<div style='\" +\n \"position: absolute;\" +\n \"top: \" + this.anchorText_[0] + \"px;\" +\n \"left: \" + this.anchorText_[1] + \"px;\" +\n \"color: \" + this.textColor_ + \";\" +\n \"font-size: \" + this.textSize_ + \"px;\" +\n \"font-family: \" + this.fontFamily_ + \";\" +\n \"font-weight: \" + this.fontWeight_ + \";\" +\n \"font-style: \" + this.fontStyle_ + \";\" +\n \"text-decoration: \" + this.textDecoration_ + \";\" +\n \"text-align: center;\" +\n \"width: \" + this.width_ + \"px;\" +\n \"line-height:\" + this.height_ + \"px;\" +\n \"'>\" + this.sums_.text + \"</div>\";\n if (typeof this.sums_.title === \"undefined\" || this.sums_.title === \"\") {\n this.div_.title = this.cluster_.getMarkerClusterer().getTitle();\n } else {\n this.div_.title = this.sums_.title;\n }\n this.div_.style.display = \"\";\n }\n this.visible_ = true;\n};\n\n\n/**\n * Sets the icon styles to the appropriate element in the styles array.\n *\n * @param {ClusterIconInfo} sums The icon label text and styles index.\n */\nClusterIcon.prototype.useStyle = function (sums) {\n this.sums_ = sums;\n var index = Math.max(0, sums.index - 1);\n index = Math.min(this.styles_.length - 1, index);\n var style = this.styles_[index];\n this.url_ = style.url;\n this.height_ = style.height;\n this.width_ = style.width;\n this.anchorText_ = style.anchorText || [0, 0];\n this.anchorIcon_ = style.anchorIcon || [parseInt(this.height_ / 2, 10), parseInt(this.width_ / 2, 10)];\n this.textColor_ = style.textColor || \"black\";\n this.textSize_ = style.textSize || 11;\n this.textDecoration_ = style.textDecoration || \"none\";\n this.fontWeight_ = style.fontWeight || \"bold\";\n this.fontStyle_ = style.fontStyle || \"normal\";\n this.fontFamily_ = style.fontFamily || \"Arial,sans-serif\";\n this.backgroundPosition_ = style.backgroundPosition || \"0 0\";\n};\n\n\n/**\n * Sets the position at which to center the icon.\n *\n * @param {google.maps.LatLng} center The latlng to set as the center.\n */\nClusterIcon.prototype.setCenter = function (center) {\n this.center_ = center;\n};\n\n\n/**\n * Creates the cssText style parameter based on the position of the icon.\n *\n * @param {google.maps.Point} pos The position of the icon.\n * @return {string} The CSS style text.\n */\nClusterIcon.prototype.createCss = function (pos) {\n var style = [];\n style.push(\"cursor: pointer;\");\n style.push(\"position: absolute; top: \" + pos.y + \"px; left: \" + pos.x + \"px;\");\n style.push(\"width: \" + this.width_ + \"px; height: \" + this.height_ + \"px;\");\n style.push(\"-webkit-user-select: none;\");\n style.push(\"-khtml-user-select: none;\");\n style.push(\"-moz-user-select: none;\");\n style.push(\"-o-user-select: none;\");\n style.push(\"user-select: none;\");\n return style.join(\"\");\n};\n\n\n/**\n * Returns the position at which to place the DIV depending on the latlng.\n *\n * @param {google.maps.LatLng} latlng The position in latlng.\n * @return {google.maps.Point} The position in pixels.\n */\nClusterIcon.prototype.getPosFromLatLng_ = function (latlng) {\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n pos.x -= this.anchorIcon_[1];\n pos.y -= this.anchorIcon_[0];\n pos.x = parseInt(pos.x, 10);\n pos.y = parseInt(pos.y, 10);\n return pos;\n};\n\n\n/**\n * Creates a single cluster that manages a group of proximate markers.\n * Used internally, do not call this constructor directly.\n * @constructor\n * @param {MarkerClusterer} mc The <code>MarkerClusterer</code> object with which this\n * cluster is associated.\n */\nfunction Cluster(mc) {\n this.markerClusterer_ = mc;\n this.map_ = mc.getMap();\n this.gridSize_ = mc.getGridSize();\n this.minClusterSize_ = mc.getMinimumClusterSize();\n this.averageCenter_ = mc.getAverageCenter();\n this.markers_ = [];\n this.center_ = null;\n this.bounds_ = null;\n this.clusterIcon_ = new ClusterIcon(this, mc.getStyles());\n}\n\n\n/**\n * Returns the number of markers managed by the cluster. You can call this from\n * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler\n * for the <code>MarkerClusterer</code> object.\n *\n * @return {number} The number of markers in the cluster.\n */\nCluster.prototype.getSize = function () {\n return this.markers_.length;\n};\n\n\n/**\n * Returns the array of markers managed by the cluster. You can call this from\n * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler\n * for the <code>MarkerClusterer</code> object.\n *\n * @return {Array} The array of markers in the cluster.\n */\nCluster.prototype.getMarkers = function () {\n return this.markers_;\n};\n\n\n/**\n * Returns the center of the cluster. You can call this from\n * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler\n * for the <code>MarkerClusterer</code> object.\n *\n * @return {google.maps.LatLng} The center of the cluster.\n */\nCluster.prototype.getCenter = function () {\n return this.center_;\n};\n\n\n/**\n * Returns the map with which the cluster is associated.\n *\n * @return {google.maps.Map} The map.\n * @ignore\n */\nCluster.prototype.getMap = function () {\n return this.map_;\n};\n\n\n/**\n * Returns the <code>MarkerClusterer</code> object with which the cluster is associated.\n *\n * @return {MarkerClusterer} The associated marker clusterer.\n * @ignore\n */\nCluster.prototype.getMarkerClusterer = function () {\n return this.markerClusterer_;\n};\n\n\n/**\n * Returns the bounds of the cluster.\n *\n * @return {google.maps.LatLngBounds} the cluster bounds.\n * @ignore\n */\nCluster.prototype.getBounds = function () {\n var i;\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n var markers = this.getMarkers();\n for (i = 0; i < markers.length; i++) {\n bounds.extend(markers[i].getPosition());\n }\n return bounds;\n};\n\n\n/**\n * Removes the cluster from the map.\n *\n * @ignore\n */\nCluster.prototype.remove = function () {\n this.clusterIcon_.setMap(null);\n this.markers_ = [];\n delete this.markers_;\n};\n\n\n/**\n * Adds a marker to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to be added.\n * @return {boolean} True if the marker was added.\n * @ignore\n */\nCluster.prototype.addMarker = function (marker) {\n var i;\n var mCount;\n var mz;\n\n if (this.isMarkerAlreadyAdded_(marker)) {\n return false;\n }\n\n if (!this.center_) {\n this.center_ = marker.getPosition();\n this.calculateBounds_();\n } else {\n if (this.averageCenter_) {\n var l = this.markers_.length + 1;\n var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;\n var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;\n this.center_ = new google.maps.LatLng(lat, lng);\n this.calculateBounds_();\n }\n }\n\n marker.isAdded = true;\n this.markers_.push(marker);\n\n mCount = this.markers_.length;\n mz = this.markerClusterer_.getMaxZoom();\n if (mz !== null && this.map_.getZoom() > mz) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map_) {\n marker.setMap(this.map_);\n }\n } else if (mCount < this.minClusterSize_) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map_) {\n marker.setMap(this.map_);\n }\n } else if (mCount === this.minClusterSize_) {\n // Hide the markers that were showing.\n for (i = 0; i < mCount; i++) {\n this.markers_[i].setMap(null);\n }\n } else {\n marker.setMap(null);\n }\n\n this.updateIcon_();\n return true;\n};\n\n\n/**\n * Determines if a marker lies within the cluster's bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker lies in the bounds.\n * @ignore\n */\nCluster.prototype.isMarkerInClusterBounds = function (marker) {\n return this.bounds_.contains(marker.getPosition());\n};\n\n\n/**\n * Calculates the extended bounds of the cluster with the grid.\n */\nCluster.prototype.calculateBounds_ = function () {\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds);\n};\n\n\n/**\n * Updates the cluster icon.\n */\nCluster.prototype.updateIcon_ = function () {\n var mCount = this.markers_.length;\n var mz = this.markerClusterer_.getMaxZoom();\n\n if (mz !== null && this.map_.getZoom() > mz) {\n this.clusterIcon_.hide();\n return;\n }\n\n if (mCount < this.minClusterSize_) {\n // Min cluster size not yet reached.\n this.clusterIcon_.hide();\n return;\n }\n\n var numStyles = this.markerClusterer_.getStyles().length;\n var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles);\n this.clusterIcon_.setCenter(this.center_);\n this.clusterIcon_.useStyle(sums);\n this.clusterIcon_.show();\n};\n\n\n/**\n * Determines if a marker has already been added to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker has already been added.\n */\nCluster.prototype.isMarkerAlreadyAdded_ = function (marker) {\n var i;\n if (this.markers_.indexOf) {\n return this.markers_.indexOf(marker) !== -1;\n } else {\n for (i = 0; i < this.markers_.length; i++) {\n if (marker === this.markers_[i]) {\n return true;\n }\n }\n }\n return false;\n};\n\n\n/**\n * @name MarkerClustererOptions\n * @class This class represents the optional parameter passed to\n * the {@link MarkerClusterer} constructor.\n * @property {number} [gridSize=60] The grid size of a cluster in pixels. The grid is a square.\n * @property {number} [maxZoom=null] The maximum zoom level at which clustering is enabled or\n * <code>null</code> if clustering is to be enabled at all zoom levels.\n * @property {boolean} [zoomOnClick=true] Whether to zoom the map when a cluster marker is\n * clicked. You may want to set this to <code>false</code> if you have installed a handler\n * for the <code>click</code> event and it deals with zooming on its own.\n * @property {boolean} [averageCenter=false] Whether the position of a cluster marker should be\n * the average position of all markers in the cluster. If set to <code>false</code>, the\n * cluster marker is positioned at the location of the first marker added to the cluster.\n * @property {number} [minimumClusterSize=2] The minimum number of markers needed in a cluster\n * before the markers are hidden and a cluster marker appears.\n * @property {boolean} [ignoreHidden=false] Whether to ignore hidden markers in clusters. You\n * may want to set this to <code>true</code> to ensure that hidden markers are not included\n * in the marker count that appears on a cluster marker (this count is the value of the\n * <code>text</code> property of the result returned by the default <code>calculator</code>).\n * If set to <code>true</code> and you change the visibility of a marker being clustered, be\n * sure to also call <code>MarkerClusterer.repaint()</code>.\n * @property {string} [title=\"\"] The tooltip to display when the mouse moves over a cluster\n * marker. (Alternatively, you can use a custom <code>calculator</code> function to specify a\n * different tooltip for each cluster marker.)\n * @property {function} [calculator=MarkerClusterer.CALCULATOR] The function used to determine\n * the text to be displayed on a cluster marker and the index indicating which style to use\n * for the cluster marker. The input parameters for the function are (1) the array of markers\n * represented by a cluster marker and (2) the number of cluster icon styles. It returns a\n * {@link ClusterIconInfo} object. The default <code>calculator</code> returns a\n * <code>text</code> property which is the number of markers in the cluster and an\n * <code>index</code> property which is one higher than the lowest integer such that\n * <code>10^i</code> exceeds the number of markers in the cluster, or the size of the styles\n * array, whichever is less. The <code>styles</code> array element used has an index of\n * <code>index</code> minus 1. For example, the default <code>calculator</code> returns a\n * <code>text</code> value of <code>\"125\"</code> and an <code>index</code> of <code>3</code>\n * for a cluster icon representing 125 markers so the element used in the <code>styles</code>\n * array is <code>2</code>. A <code>calculator</code> may also return a <code>title</code>\n * property that contains the text of the tooltip to be used for the cluster marker. If\n * <code>title</code> is not defined, the tooltip is set to the value of the <code>title</code>\n * property for the MarkerClusterer.\n * @property {string} [clusterClass=\"cluster\"] The name of the CSS class defining general styles\n * for the cluster markers. Use this class to define CSS styles that are not set up by the code\n * that processes the <code>styles</code> array.\n * @property {Array} [styles] An array of {@link ClusterIconStyle} elements defining the styles\n * of the cluster markers to be used. The element to be used to style a given cluster marker\n * is determined by the function defined by the <code>calculator</code> property.\n * The default is an array of {@link ClusterIconStyle} elements whose properties are derived\n * from the values for <code>imagePath</code>, <code>imageExtension</code>, and\n * <code>imageSizes</code>.\n * @property {boolean} [enableRetinaIcons=false] Whether to allow the use of cluster icons that\n * have sizes that are some multiple (typically double) of their actual display size. Icons such\n * as these look better when viewed on high-resolution monitors such as Apple's Retina displays.\n * Note: if this property is <code>true</code>, sprites cannot be used as cluster icons.\n * @property {number} [batchSize=MarkerClusterer.BATCH_SIZE] Set this property to the\n * number of markers to be processed in a single batch when using a browser other than\n * Internet Explorer (for Internet Explorer, use the batchSizeIE property instead).\n * @property {number} [batchSizeIE=MarkerClusterer.BATCH_SIZE_IE] When Internet Explorer is\n * being used, markers are processed in several batches with a small delay inserted between\n * each batch in an attempt to avoid Javascript timeout errors. Set this property to the\n * number of markers to be processed in a single batch; select as high a number as you can\n * without causing a timeout error in the browser. This number might need to be as low as 100\n * if 15,000 markers are being managed, for example.\n * @property {string} [imagePath=MarkerClusterer.IMAGE_PATH]\n * The full URL of the root name of the group of image files to use for cluster icons.\n * The complete file name is of the form <code>imagePath</code>n.<code>imageExtension</code>\n * where n is the image file number (1, 2, etc.).\n * @property {string} [imageExtension=MarkerClusterer.IMAGE_EXTENSION]\n * The extension name for the cluster icon image files (e.g., <code>\"png\"</code> or\n * <code>\"jpg\"</code>).\n * @property {Array} [imageSizes=MarkerClusterer.IMAGE_SIZES]\n * An array of numbers containing the widths of the group of\n * <code>imagePath</code>n.<code>imageExtension</code> image files.\n * (The images are assumed to be square.)\n */\n/**\n * Creates a MarkerClusterer object with the options specified in {@link MarkerClustererOptions}.\n * @constructor\n * @extends google.maps.OverlayView\n * @param {google.maps.Map} map The Google map to attach to.\n * @param {Array.<google.maps.Marker>} [opt_markers] The markers to be added to the cluster.\n * @param {MarkerClustererOptions} [opt_options] The optional parameters.\n */\nfunction MarkerClusterer(map, opt_markers, opt_options) {\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\n // extend function to extend MarkerClusterer with google.maps.OverlayView\n // because it might not always be available when the code is defined so we\n // look for it at the last possible moment. If it doesn't exist now then\n // there is no point going ahead :)\n this.extend(MarkerClusterer, google.maps.OverlayView);\n\n opt_markers = opt_markers || [];\n opt_options = opt_options || {};\n\n this.markers_ = [];\n this.clusters_ = [];\n this.listeners_ = [];\n this.activeMap_ = null;\n this.ready_ = false;\n\n this.gridSize_ = opt_options.gridSize || 60;\n this.minClusterSize_ = opt_options.minimumClusterSize || 2;\n this.maxZoom_ = opt_options.maxZoom || null;\n this.styles_ = opt_options.styles || [];\n this.title_ = opt_options.title || \"\";\n this.zoomOnClick_ = true;\n if (opt_options.zoomOnClick !== undefined) {\n this.zoomOnClick_ = opt_options.zoomOnClick;\n }\n this.averageCenter_ = false;\n if (opt_options.averageCenter !== undefined) {\n this.averageCenter_ = opt_options.averageCenter;\n }\n this.ignoreHidden_ = false;\n if (opt_options.ignoreHidden !== undefined) {\n this.ignoreHidden_ = opt_options.ignoreHidden;\n }\n this.enableRetinaIcons_ = false;\n if (opt_options.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons_ = opt_options.enableRetinaIcons;\n }\n this.imagePath_ = opt_options.imagePath || MarkerClusterer.IMAGE_PATH;\n this.imageExtension_ = opt_options.imageExtension || MarkerClusterer.IMAGE_EXTENSION;\n this.imageSizes_ = opt_options.imageSizes || MarkerClusterer.IMAGE_SIZES;\n this.calculator_ = opt_options.calculator || MarkerClusterer.CALCULATOR;\n this.batchSize_ = opt_options.batchSize || MarkerClusterer.BATCH_SIZE;\n this.batchSizeIE_ = opt_options.batchSizeIE || MarkerClusterer.BATCH_SIZE_IE;\n this.clusterClass_ = opt_options.clusterClass || \"cluster\";\n\n if (navigator.userAgent.toLowerCase().indexOf(\"msie\") !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize_ = this.batchSizeIE_;\n }\n\n this.setupStyles_();\n\n this.addMarkers(opt_markers, true);\n this.setMap(map); // Note: this causes onAdd to be called\n}\n\n\n/**\n * Implementation of the onAdd interface method.\n * @ignore\n */\nMarkerClusterer.prototype.onAdd = function () {\n var cMarkerClusterer = this;\n\n this.activeMap_ = this.getMap();\n this.ready_ = true;\n\n this.repaint();\n\n this.prevZoom_ = this.getMap().getZoom();\n\n // Add the map event listeners\n this.listeners_ = [\n google.maps.event.addListener(this.getMap(), \"zoom_changed\", function () {\n // Fix for bug #407\n // Determines map type and prevents illegal zoom levels\n var zoom = this.getMap().getZoom();\n var minZoom = this.getMap().minZoom || 0;\n var maxZoom = Math.min(this.getMap().maxZoom || 100,\n this.getMap().mapTypes[this.getMap().getMapTypeId()].maxZoom);\n zoom = Math.min(Math.max(zoom, minZoom), maxZoom);\n\n if (this.prevZoom_ != zoom) {\n this.prevZoom_ = zoom;\n this.resetViewport_(false);\n }\n }.bind(this)),\n google.maps.event.addListener(this.getMap(), \"idle\", function () {\n cMarkerClusterer.redraw_();\n })\n ];\n};\n\n\n/**\n * Implementation of the onRemove interface method.\n * Removes map event listeners and all cluster icons from the DOM.\n * All managed markers are also put back on the map.\n * @ignore\n */\nMarkerClusterer.prototype.onRemove = function () {\n var i;\n\n // Put all the managed markers back on the map:\n for (i = 0; i < this.markers_.length; i++) {\n if (this.markers_[i].getMap() !== this.activeMap_) {\n this.markers_[i].setMap(this.activeMap_);\n }\n }\n\n // Remove all clusters:\n for (i = 0; i < this.clusters_.length; i++) {\n this.clusters_[i].remove();\n }\n this.clusters_ = [];\n\n // Remove map event listeners:\n for (i = 0; i < this.listeners_.length; i++) {\n google.maps.event.removeListener(this.listeners_[i]);\n }\n this.listeners_ = [];\n\n this.activeMap_ = null;\n this.ready_ = false;\n};\n\n\n/**\n * Implementation of the draw interface method.\n * @ignore\n */\nMarkerClusterer.prototype.draw = function () {};\n\n\n/**\n * Sets up the styles object.\n */\nMarkerClusterer.prototype.setupStyles_ = function () {\n var i, size;\n if (this.styles_.length > 0) {\n return;\n }\n\n for (i = 0; i < this.imageSizes_.length; i++) {\n size = this.imageSizes_[i];\n this.styles_.push({\n url: this.imagePath_ + (i + 1) + \".\" + this.imageExtension_,\n height: size,\n width: size\n });\n }\n};\n\n\n/**\n * Fits the map to the bounds of the markers managed by the clusterer.\n */\nMarkerClusterer.prototype.fitMapToMarkers = function () {\n var i;\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (i = 0; i < markers.length; i++) {\n // March 3, 2018: Bug fix -- honor the ignoreHidden property\n if (markers[i].getVisible() || !this.getIgnoreHidden()) {\n bounds.extend(markers[i].getPosition());\n }\n }\n\n this.getMap().fitBounds(bounds);\n};\n\n\n/**\n * Returns the value of the <code>gridSize</code> property.\n *\n * @return {number} The grid size.\n */\nMarkerClusterer.prototype.getGridSize = function () {\n return this.gridSize_;\n};\n\n\n/**\n * Sets the value of the <code>gridSize</code> property.\n *\n * @param {number} gridSize The grid size.\n */\nMarkerClusterer.prototype.setGridSize = function (gridSize) {\n this.gridSize_ = gridSize;\n};\n\n\n/**\n * Returns the value of the <code>minimumClusterSize</code> property.\n *\n * @return {number} The minimum cluster size.\n */\nMarkerClusterer.prototype.getMinimumClusterSize = function () {\n return this.minClusterSize_;\n};\n\n/**\n * Sets the value of the <code>minimumClusterSize</code> property.\n *\n * @param {number} minimumClusterSize The minimum cluster size.\n */\nMarkerClusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {\n this.minClusterSize_ = minimumClusterSize;\n};\n\n\n/**\n * Returns the value of the <code>maxZoom</code> property.\n *\n * @return {number} The maximum zoom level.\n */\nMarkerClusterer.prototype.getMaxZoom = function () {\n return this.maxZoom_;\n};\n\n\n/**\n * Sets the value of the <code>maxZoom</code> property.\n *\n * @param {number} maxZoom The maximum zoom level.\n */\nMarkerClusterer.prototype.setMaxZoom = function (maxZoom) {\n this.maxZoom_ = maxZoom;\n};\n\n\n/**\n * Returns the value of the <code>styles</code> property.\n *\n * @return {Array} The array of styles defining the cluster markers to be used.\n */\nMarkerClusterer.prototype.getStyles = function () {\n return this.styles_;\n};\n\n\n/**\n * Sets the value of the <code>styles</code> property.\n *\n * @param {Array.<ClusterIconStyle>} styles The array of styles to use.\n */\nMarkerClusterer.prototype.setStyles = function (styles) {\n this.styles_ = styles;\n};\n\n\n/**\n * Returns the value of the <code>title</code> property.\n *\n * @return {string} The content of the title text.\n */\nMarkerClusterer.prototype.getTitle = function () {\n return this.title_;\n};\n\n\n/**\n * Sets the value of the <code>title</code> property.\n *\n * @param {string} title The value of the title property.\n */\nMarkerClusterer.prototype.setTitle = function (title) {\n this.title_ = title;\n};\n\n\n/**\n * Returns the value of the <code>zoomOnClick</code> property.\n *\n * @return {boolean} True if zoomOnClick property is set.\n */\nMarkerClusterer.prototype.getZoomOnClick = function () {\n return this.zoomOnClick_;\n};\n\n\n/**\n * Sets the value of the <code>zoomOnClick</code> property.\n *\n * @param {boolean} zoomOnClick The value of the zoomOnClick property.\n */\nMarkerClusterer.prototype.setZoomOnClick = function (zoomOnClick) {\n this.zoomOnClick_ = zoomOnClick;\n};\n\n\n/**\n * Returns the value of the <code>averageCenter</code> property.\n *\n * @return {boolean} True if averageCenter property is set.\n */\nMarkerClusterer.prototype.getAverageCenter = function () {\n return this.averageCenter_;\n};\n\n\n/**\n * Sets the value of the <code>averageCenter</code> property.\n *\n * @param {boolean} averageCenter The value of the averageCenter property.\n */\nMarkerClusterer.prototype.setAverageCenter = function (averageCenter) {\n this.averageCenter_ = averageCenter;\n};\n\n\n/**\n * Returns the value of the <code>ignoreHidden</code> property.\n *\n * @return {boolean} True if ignoreHidden property is set.\n */\nMarkerClusterer.prototype.getIgnoreHidden = function () {\n return this.ignoreHidden_;\n};\n\n\n/**\n * Sets the value of the <code>ignoreHidden</code> property.\n *\n * @param {boolean} ignoreHidden The value of the ignoreHidden property.\n */\nMarkerClusterer.prototype.setIgnoreHidden = function (ignoreHidden) {\n this.ignoreHidden_ = ignoreHidden;\n};\n\n\n/**\n * Returns the value of the <code>enableRetinaIcons</code> property.\n *\n * @return {boolean} True if enableRetinaIcons property is set.\n */\nMarkerClusterer.prototype.getEnableRetinaIcons = function () {\n return this.enableRetinaIcons_;\n};\n\n\n/**\n * Sets the value of the <code>enableRetinaIcons</code> property.\n *\n * @param {boolean} enableRetinaIcons The value of the enableRetinaIcons property.\n */\nMarkerClusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {\n this.enableRetinaIcons_ = enableRetinaIcons;\n};\n\n\n/**\n * Returns the value of the <code>imageExtension</code> property.\n *\n * @return {string} The value of the imageExtension property.\n */\nMarkerClusterer.prototype.getImageExtension = function () {\n return this.imageExtension_;\n};\n\n\n/**\n * Sets the value of the <code>imageExtension</code> property.\n *\n * @param {string} imageExtension The value of the imageExtension property.\n */\nMarkerClusterer.prototype.setImageExtension = function (imageExtension) {\n this.imageExtension_ = imageExtension;\n};\n\n\n/**\n * Returns the value of the <code>imagePath</code> property.\n *\n * @return {string} The value of the imagePath property.\n */\nMarkerClusterer.prototype.getImagePath = function () {\n return this.imagePath_;\n};\n\n\n/**\n * Sets the value of the <code>imagePath</code> property.\n *\n * @param {string} imagePath The value of the imagePath property.\n */\nMarkerClusterer.prototype.setImagePath = function (imagePath) {\n this.imagePath_ = imagePath;\n};\n\n\n/**\n * Returns the value of the <code>imageSizes</code> property.\n *\n * @return {Array} The value of the imageSizes property.\n */\nMarkerClusterer.prototype.getImageSizes = function () {\n return this.imageSizes_;\n};\n\n\n/**\n * Sets the value of the <code>imageSizes</code> property.\n *\n * @param {Array} imageSizes The value of the imageSizes property.\n */\nMarkerClusterer.prototype.setImageSizes = function (imageSizes) {\n this.imageSizes_ = imageSizes;\n};\n\n\n/**\n * Returns the value of the <code>calculator</code> property.\n *\n * @return {function} the value of the calculator property.\n */\nMarkerClusterer.prototype.getCalculator = function () {\n return this.calculator_;\n};\n\n\n/**\n * Sets the value of the <code>calculator</code> property.\n *\n * @param {function(Array.<google.maps.Marker>, number)} calculator The value\n * of the calculator property.\n */\nMarkerClusterer.prototype.setCalculator = function (calculator) {\n this.calculator_ = calculator;\n};\n\n\n/**\n * Returns the value of the <code>batchSizeIE</code> property.\n *\n * @return {number} the value of the batchSizeIE property.\n */\nMarkerClusterer.prototype.getBatchSizeIE = function () {\n return this.batchSizeIE_;\n};\n\n\n/**\n * Sets the value of the <code>batchSizeIE</code> property.\n *\n * @param {number} batchSizeIE The value of the batchSizeIE property.\n */\nMarkerClusterer.prototype.setBatchSizeIE = function (batchSizeIE) {\n this.batchSizeIE_ = batchSizeIE;\n};\n\n\n/**\n * Returns the value of the <code>clusterClass</code> property.\n *\n * @return {string} the value of the clusterClass property.\n */\nMarkerClusterer.prototype.getClusterClass = function () {\n return this.clusterClass_;\n};\n\n\n/**\n * Sets the value of the <code>clusterClass</code> property.\n *\n * @param {string} clusterClass The value of the clusterClass property.\n */\nMarkerClusterer.prototype.setClusterClass = function (clusterClass) {\n this.clusterClass_ = clusterClass;\n};\n\n\n/**\n * Returns the array of markers managed by the clusterer.\n *\n * @return {Array} The array of markers managed by the clusterer.\n */\nMarkerClusterer.prototype.getMarkers = function () {\n return this.markers_;\n};\n\n\n/**\n * Returns the number of markers managed by the clusterer.\n *\n * @return {number} The number of markers.\n */\nMarkerClusterer.prototype.getTotalMarkers = function () {\n return this.markers_.length;\n};\n\n\n/**\n * Returns the current array of clusters formed by the clusterer.\n *\n * @return {Array} The array of clusters formed by the clusterer.\n */\nMarkerClusterer.prototype.getClusters = function () {\n return this.clusters_;\n};\n\n\n/**\n * Returns the number of clusters formed by the clusterer.\n *\n * @return {number} The number of clusters formed by the clusterer.\n */\nMarkerClusterer.prototype.getTotalClusters = function () {\n return this.clusters_.length;\n};\n\n\n/**\n * Adds a marker to the clusterer. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n */\nMarkerClusterer.prototype.addMarker = function (marker, opt_nodraw) {\n this.pushMarkerTo_(marker);\n if (!opt_nodraw) {\n this.redraw_();\n }\n};\n\n\n/**\n * Adds an array of markers to the clusterer. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>.\n *\n * @param {Array.<google.maps.Marker>} markers The markers to add.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n */\nMarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) {\n var key;\n for (key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo_(markers[key]);\n }\n }\n if (!opt_nodraw) {\n this.redraw_();\n }\n};\n\n\n/**\n * Pushes a marker to the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to add.\n */\nMarkerClusterer.prototype.pushMarkerTo_ = function (marker) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n var cMarkerClusterer = this;\n google.maps.event.addListener(marker, \"dragend\", function () {\n if (cMarkerClusterer.ready_) {\n this.isAdded = false;\n cMarkerClusterer.repaint();\n }\n });\n }\n marker.isAdded = false;\n this.markers_.push(marker);\n};\n\n\n/**\n * Removes a marker from the cluster. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if the\n * marker was removed from the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to remove.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n * @return {boolean} True if the marker was removed from the clusterer.\n */\nMarkerClusterer.prototype.removeMarker = function (marker, opt_nodraw) {\n var removed = this.removeMarker_(marker);\n\n if (!opt_nodraw && removed) {\n this.repaint();\n }\n\n return removed;\n};\n\n\n/**\n * Removes an array of markers from the cluster. The clusters are redrawn unless\n * <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if markers\n * were removed from the clusterer.\n *\n * @param {Array.<google.maps.Marker>} markers The markers to remove.\n * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.\n * @return {boolean} True if markers were removed from the clusterer.\n */\nMarkerClusterer.prototype.removeMarkers = function (markers, opt_nodraw) {\n var i, r;\n var removed = false;\n\n for (i = 0; i < markers.length; i++) {\n r = this.removeMarker_(markers[i]);\n removed = removed || r;\n }\n\n if (!opt_nodraw && removed) {\n this.repaint();\n }\n\n return removed;\n};\n\n\n/**\n * Removes a marker and returns true if removed, false if not.\n *\n * @param {google.maps.Marker} marker The marker to remove\n * @return {boolean} Whether the marker was removed or not\n */\nMarkerClusterer.prototype.removeMarker_ = function (marker) {\n var i;\n var index = -1;\n if (this.markers_.indexOf) {\n index = this.markers_.indexOf(marker);\n } else {\n for (i = 0; i < this.markers_.length; i++) {\n if (marker === this.markers_[i]) {\n index = i;\n break;\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n\n marker.setMap(null);\n this.markers_.splice(index, 1); // Remove the marker from the list of managed markers\n return true;\n};\n\n\n/**\n * Removes all clusters and markers from the map and also removes all markers\n * managed by the clusterer.\n */\nMarkerClusterer.prototype.clearMarkers = function () {\n this.resetViewport_(true);\n this.markers_ = [];\n};\n\n\n/**\n * Recalculates and redraws all the marker clusters from scratch.\n * Call this after changing any properties.\n */\nMarkerClusterer.prototype.repaint = function () {\n var oldClusters = this.clusters_.slice();\n this.clusters_ = [];\n this.resetViewport_(false);\n this.redraw_();\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function () {\n var i;\n for (i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove();\n }\n }, 0);\n};\n\n\n/**\n * Returns the current bounds extended by the grid size.\n *\n * @param {google.maps.LatLngBounds} bounds The bounds to extend.\n * @return {google.maps.LatLngBounds} The extended bounds.\n * @ignore\n */\nMarkerClusterer.prototype.getExtendedBounds = function (bounds) {\n var projection = this.getProjection();\n\n // Turn the bounds into latlng.\n var tr = new google.maps.LatLng(bounds.getNorthEast().lat(),\n bounds.getNorthEast().lng());\n var bl = new google.maps.LatLng(bounds.getSouthWest().lat(),\n bounds.getSouthWest().lng());\n\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(tr);\n trPix.x += this.gridSize_;\n trPix.y -= this.gridSize_;\n\n var blPix = projection.fromLatLngToDivPixel(bl);\n blPix.x -= this.gridSize_;\n blPix.y += this.gridSize_;\n\n // Convert the pixel points back to LatLng\n var ne = projection.fromDivPixelToLatLng(trPix);\n var sw = projection.fromDivPixelToLatLng(blPix);\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(ne);\n bounds.extend(sw);\n\n return bounds;\n};\n\n\n/**\n * Redraws all the clusters.\n */\nMarkerClusterer.prototype.redraw_ = function () {\n this.createClusters_(0);\n};\n\n\n/**\n * Removes all clusters from the map. The markers are also removed from the map\n * if <code>opt_hide</code> is set to <code>true</code>.\n *\n * @param {boolean} [opt_hide] Set to <code>true</code> to also remove the markers\n * from the map.\n */\nMarkerClusterer.prototype.resetViewport_ = function (opt_hide) {\n var i, marker;\n // Remove all the clusters\n for (i = 0; i < this.clusters_.length; i++) {\n this.clusters_[i].remove();\n }\n this.clusters_ = [];\n\n // Reset the markers to not be added and to be removed from the map.\n for (i = 0; i < this.markers_.length; i++) {\n marker = this.markers_[i];\n marker.isAdded = false;\n if (opt_hide) {\n marker.setMap(null);\n }\n }\n};\n\n\n/**\n * Calculates the distance between two latlng locations in km.\n *\n * @param {google.maps.LatLng} p1 The first lat lng point.\n * @param {google.maps.LatLng} p2 The second lat lng point.\n * @return {number} The distance between the two points in km.\n * @see http://www.movable-type.co.uk/scripts/latlong.html\n*/\nMarkerClusterer.prototype.distanceBetweenPoints_ = function (p1, p2) {\n var R = 6371; // Radius of the Earth in km\n var dLat = (p2.lat() - p1.lat()) * Math.PI / 180;\n var dLon = (p2.lng() - p1.lng()) * Math.PI / 180;\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) *\n Math.sin(dLon / 2) * Math.sin(dLon / 2);\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n var d = R * c;\n return d;\n};\n\n\n/**\n * Determines if a marker is contained in a bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @param {google.maps.LatLngBounds} bounds The bounds to check against.\n * @return {boolean} True if the marker is in the bounds.\n */\nMarkerClusterer.prototype.isMarkerInBounds_ = function (marker, bounds) {\n return bounds.contains(marker.getPosition());\n};\n\n\n/**\n * Adds a marker to a cluster, or creates a new cluster.\n *\n * @param {google.maps.Marker} marker The marker to add.\n */\nMarkerClusterer.prototype.addToClosestCluster_ = function (marker) {\n var i, d, cluster, center;\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (i = 0; i < this.clusters_.length; i++) {\n cluster = this.clusters_[i];\n center = cluster.getCenter();\n if (center) {\n d = this.distanceBetweenPoints_(center, marker.getPosition());\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n } else {\n cluster = new Cluster(this);\n cluster.addMarker(marker);\n this.clusters_.push(cluster);\n }\n};\n\n\n/**\n * Creates the clusters. This is done in batches to avoid timeout errors\n * in some browsers when there is a huge number of markers.\n *\n * @param {number} iFirst The index of the first marker in the batch of\n * markers to be added to clusters.\n */\nMarkerClusterer.prototype.createClusters_ = function (iFirst) {\n var i, marker;\n var mapBounds;\n var cMarkerClusterer = this;\n if (!this.ready_) {\n return;\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the <code>MarkerClusterer</code> begins\n * clustering markers.\n * @name MarkerClusterer#clusteringbegin\n * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, \"clusteringbegin\", this);\n\n if (typeof this.timerRefStatic !== \"undefined\") {\n clearTimeout(this.timerRefStatic);\n delete this.timerRefStatic;\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n if (this.getMap().getZoom() > 3) {\n mapBounds = new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),\n this.getMap().getBounds().getNorthEast());\n } else {\n mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n }\n var bounds = this.getExtendedBounds(mapBounds);\n\n var iLast = Math.min(iFirst + this.batchSize_, this.markers_.length);\n\n for (i = iFirst; i < iLast; i++) {\n marker = this.markers_[i];\n if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {\n if (!this.ignoreHidden_ || (this.ignoreHidden_ && marker.getVisible())) {\n this.addToClosestCluster_(marker);\n }\n }\n }\n\n if (iLast < this.markers_.length) {\n this.timerRefStatic = setTimeout(function () {\n cMarkerClusterer.createClusters_(iLast);\n }, 0);\n } else {\n delete this.timerRefStatic;\n\n /**\n * This event is fired when the <code>MarkerClusterer</code> stops\n * clustering markers.\n * @name MarkerClusterer#clusteringend\n * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, \"clusteringend\", this);\n }\n};\n\n\n/**\n * Extends an object's prototype by another's.\n *\n * @param {Object} obj1 The object to be extended.\n * @param {Object} obj2 The object to extend with.\n * @return {Object} The new extended object.\n * @ignore\n */\nMarkerClusterer.prototype.extend = function (obj1, obj2) {\n return (function (object) {\n var property;\n for (property in object.prototype) {\n this.prototype[property] = object.prototype[property];\n }\n return this;\n }).apply(obj1, [obj2]);\n};\n\n\n/**\n * The default function for determining the label text and style\n * for a cluster icon.\n *\n * @param {Array.<google.maps.Marker>} markers The array of markers represented by the cluster.\n * @param {number} numStyles The number of marker styles available.\n * @return {ClusterIconInfo} The information resource for the cluster.\n * @constant\n * @ignore\n */\nMarkerClusterer.CALCULATOR = function (markers, numStyles) {\n var index = 0;\n var title = \"\";\n var count = markers.length.toString();\n\n var dv = count;\n while (dv !== 0) {\n dv = parseInt(dv / 10, 10);\n index++;\n }\n\n index = Math.min(index, numStyles);\n return {\n text: count,\n index: index,\n title: title\n };\n};\n\n\n/**\n * The number of markers to process in one batch.\n *\n * @type {number}\n * @constant\n */\nMarkerClusterer.BATCH_SIZE = 2000;\n\n\n/**\n * The number of markers to process in one batch (IE only).\n *\n * @type {number}\n * @constant\n */\nMarkerClusterer.BATCH_SIZE_IE = 500;\n\n\n/**\n * The default root name for the marker cluster images.\n *\n * @type {string}\n * @constant\n */\nMarkerClusterer.IMAGE_PATH = \"https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m\";\n\n\n/**\n * The default extension name for the marker cluster images.\n *\n * @type {string}\n * @constant\n */\nMarkerClusterer.IMAGE_EXTENSION = \"png\";\n\n\n/**\n * The default array of sizes for the marker cluster images.\n *\n * @type {Array.<number>}\n * @constant\n */\nMarkerClusterer.IMAGE_SIZES = [53, 56, 66, 78, 90];\n\nif (typeof module == 'object') {\n module.exports = MarkerClusterer;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@google/markerclustererplus/src/markerclusterer.js\n// module id = 8\n// module chunks = 0 1","import GoogleMaps from './models/apis/googleMaps';\r\nimport Leaflet from './models/apis/leaflet';\r\nimport IMapFunctions from './models/apis/mapFunctions';\r\nimport { MarkerEventType, CircleEventType, PolygonEventType, PolylineEventType, MapEventType } from './models/dto/event-type';\r\nimport { MapType } from './models/dto/map-type';\r\nimport CircleAlterOptions from './models/features/circle/circle-alter-options';\r\nimport CircleOptions from './models/features/circle/circle-options';\r\nimport GeoJsonOptions from './models/features/geojson/geojson-options';\r\nimport MarkerClustererConfig from './models/features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from './models/features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from './models/features/marker/marker-alter-options';\r\nimport MarkerOptions from './models/features/marker/marker-options';\r\nimport OverlayOptions from './models/features/overlay/overlay-options';\r\nimport PolygonAlterOptions from './models/features/polygons/polygon-alter-options';\r\nimport PolygonOptions from './models/features/polygons/polygon-options';\r\nimport PolylineOptions from './models/features/polyline/polyline-options';\r\nimport PopupOptions from './models/features/popup/popup-options';\r\n\r\nexport default class Map {\r\n private markersList = {};\r\n private polygonsList = {};\r\n private circlesList = {};\r\n private polylinesList = {};\r\n private infoWindowList = {};\r\n private overlayList = {};\r\n private map: IMapFunctions;\r\n private markerClusterer = {};\r\n\r\n constructor() { /**/ }\r\n\r\n /**\r\n * Use this to initialize map\r\n * @param {InlogMaps.MapType} mapType\r\n * @param {any} options\r\n * @param {string} elementId default: 'inlog-map' [nullable]\r\n * @returns {Promisse<any>}\r\n */\r\n public initialize(mapType: MapType, options: any, elementId: string = 'inlog-map'): Promise<any> {\r\n this.map = mapType === MapType.Google ? new GoogleMaps() : new Leaflet();\r\n return this.map.initialize(mapType, options, elementId);\r\n }\r\n\r\n /* GEOJson */\r\n /**\r\n * Use this function to add GEOJSON to the currentMap\r\n * @param {object} data Geojson\r\n * @param {InlogMaps.GeoJsonOptions} options\r\n * @param {any} eventClick is a function callback on click [nullable]\r\n */\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick?: any): void {\r\n this.map.loadGEOJson(data, options, eventClick);\r\n }\r\n\r\n /* Markers */\r\n /**\r\n * Use this function to draw markers in the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerOptions} options\r\n * @param {any} eventClick is a function callback on click [nullable]\r\n */\r\n public drawMarker(type: string, options: MarkerOptions, eventClick?: any): void {\r\n const marker = this.map.drawMarker(options, eventClick);\r\n\r\n if (!this.markersList[type]) {\r\n this.markersList[type] = [];\r\n }\r\n marker.type = 'simple';\r\n this.markersList[type].push(marker);\r\n\r\n if (options.addClusterer) {\r\n if (!this.markerClusterer[type]) {\r\n this.addMarkerClusterer(type, new MarkerClustererConfig(true, 1, 10));\r\n }\r\n\r\n this.map.addMarkerOnClusterer(marker, this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to draw circle markers in the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.CircleMarkerOptions} options\r\n * @param {any} eventClick is a function callback on click [nullable]\r\n */\r\n public drawCircleMarker(type: string, options: CircleMarkerOptions, eventClick?: any): void {\r\n const marker = this.map.drawCircleMarker(options, eventClick);\r\n\r\n if (!this.markersList[type]) {\r\n this.markersList[type] = [];\r\n }\r\n marker.type = 'circle';\r\n this.markersList[type].push(marker);\r\n }\r\n\r\n /**\r\n * Use this function to show/hide markers from a specific type\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toogle markers with the condition [nullable]\r\n */\r\n public toggleMarkers(show: boolean, type: string, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n if (markers && markers.length) {\r\n this.map.toggleMarkers(markers, show, this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /**\r\n * Remove markers from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove markers with the condition [nullable]\r\n */\r\n public removeMarkers(type: string, condition?: any): void {\r\n if (this.markersList[type] && condition) {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.toggleMarkers(markers, false, this.markerClusterer[type]);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.markersList[type] = this.markersList[type].filter((marker: any) => !condition(marker.object));\r\n } else {\r\n if (this.markersList[type]) {\r\n this.map.toggleMarkers(this.markersList[type], false, this.markerClusterer[type]);\r\n }\r\n this.markersList[type] = [];\r\n }\r\n\r\n if (this.markersList[type].length === 0) {\r\n delete this.markersList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all markers from the map and from the internal list\r\n */\r\n public removeAllMarkers(): void {\r\n for (const type in this.markersList) {\r\n if (this.markersList.hasOwnProperty(type)) {\r\n this.removeMarkers(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter marker style\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerAlterOptions} options\r\n * @param {any} condition alter markers with the condition [nullable]\r\n */\r\n public alterMarkerOptions(type: string, options: MarkerAlterOptions, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n if (markers && markers.length) {\r\n this.map.alterMarkerOptions(markers, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this functions to alterar marker position\r\n * @param {string } type\r\n * @param {number[]} position\r\n * @param {boolean} addTransition [nullable]\r\n * @param {any} condition [nullable]\r\n */\r\n public alterMarkerPosition(type: string, position: number[], addTransition?: boolean, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n if (markers && markers.length) {\r\n this.map.alterMarkerPosition(markers, position, addTransition);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to fit bounds in the markers with the especified type\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @param {boolean} onlyMarkersOnMap default true\r\n */\r\n public fitBoundsMarkers(type: string, condition?: any, onlyMarkersOnMap: boolean = true): void {\r\n let markers = this.getMarkers(type, condition);\r\n\r\n if (onlyMarkersOnMap) {\r\n markers = markers.filter((x: any) => this.map.isMarkerOnMap(x));\r\n }\r\n\r\n if (markers && markers.length) {\r\n this.map.fitBoundsPositions(markers);\r\n }\r\n }\r\n\r\n /**\r\n * Use this functions to set the center of the map on marker\r\n * @param {string} type\r\n * @param {any} condition center on marker with the condition [nullable]\r\n */\r\n public setCenterMarker(type: string, condition?: any): void {\r\n if (this.markersList[type] && condition) {\r\n const marker = this.markersList[type].find((marker: any) => condition(marker.object));\r\n\r\n // Center on the marker with the condition\r\n this.map.setCenterMarker(marker);\r\n } else {\r\n if (this.markersList[type] && this.markersList[type].length) {\r\n this.map.setCenterMarker(this.markersList[type][0]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if marker exists\r\n * @param type\r\n * @param condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public markerExists(type: string, condition?: any): boolean {\r\n const markers = this.getMarkers(type, condition);\r\n return markers && markers.length > 0;\r\n }\r\n\r\n /**\r\n * Use this function to count markers by type\r\n * @param {string} type\r\n * @param {boolean} onlyOnMap exclude hidden markers, default true\r\n * @param {any} condition\r\n * @returns {number}\r\n */\r\n public countMarkers(type: string, onlyOnMap: boolean = true, condition?: any): number {\r\n if (this.markerClusterer[type]) {\r\n return this.map.countMarkersOnCluster(this.markerClusterer[type]);\r\n }\r\n\r\n let markers = this.getMarkers(type, condition);\r\n if (onlyOnMap) {\r\n markers = markers.filter((x: any) => this.map.isMarkerOnMap(x));\r\n }\r\n\r\n return markers.length;\r\n }\r\n\r\n /**\r\n * This function add new events on marker\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addMarkerEvent(type: string, event: MarkerEventType, eventFunction: any, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n this.map.addMarkerEvent(markers, event, eventFunction);\r\n }\r\n\r\n /**\r\n * This function remove events of marker\r\n * @param {string} type\r\n * @param {InlogMaps.MarkerEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removeMarkerEvent(type: string, event: MarkerEventType, condition?: any): void {\r\n const markers = this.getMarkers(type, condition);\r\n\r\n this.map.removeMarkerEvent(markers, event);\r\n }\r\n\r\n /* Marker Clusterer */\r\n /**\r\n * Use this function to add MarkerClusterer on the map\r\n * @param {string} type same type of markers\r\n * @param {InlogMaps.MarkerClusterConfig} config\r\n */\r\n public addMarkerClusterer(type: string, config: MarkerClustererConfig): void {\r\n this.markerClusterer[type] = this.map.addMarkerClusterer(config);\r\n }\r\n\r\n /**\r\n * Use this function to alter clusterer options\r\n * @param type same type of markers\r\n * @param {InlogMaps.MarkerClusterConfig} config\r\n */\r\n public alterMarkerClustererConfig(type: string, config: MarkerClustererConfig): void {\r\n if (this.markerClusterer[type]) {\r\n this.map.alterMarkerClustererConfig(this.markerClusterer[type], config);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to redraw marker clusterer\r\n * @param type same type of markers\r\n */\r\n public refreshClusterer(type: string): void {\r\n if (this.markerClusterer[type]) {\r\n this.map.refreshClusterer(this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /**\r\n * Use this to clear markers on clusterer\r\n * @param type same type of markers\r\n */\r\n public clearMarkersClusterer(type: string): void {\r\n if (this.markerClusterer[type]) {\r\n this.map.clearMarkersClusterer(this.markerClusterer[type]);\r\n }\r\n }\r\n\r\n /* Polygons */\r\n /**\r\n * Use this function to draw polygons\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonOptions} options\r\n * @param {any} eventClick [nullable]\r\n */\r\n public drawPolygon(type: string, options: PolygonOptions, eventClick?: any): void {\r\n const polygon = this.map.drawPolygon(options, eventClick);\r\n\r\n if (!this.polygonsList[type]) {\r\n this.polygonsList[type] = [];\r\n }\r\n this.polygonsList[type].push(polygon);\r\n }\r\n\r\n /**\r\n * Use this function to show/hide polygon from a especific type\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toggle polygon with the condition [nullable]\r\n */\r\n public togglePolygons(show: boolean, type: string, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n if (polygons && polygons.length) {\r\n this.map.togglePolygons(polygons, show);\r\n }\r\n }\r\n\r\n /**\r\n * Remove polygons from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove polygons with the condition [nullable]\r\n */\r\n public removePolygons(type: string, condition?: any): void {\r\n if (this.polygonsList[type] && condition) {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.togglePolygons(polygons, false);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.polygonsList[type] = this.polygonsList[type].filter((polygon: any) => !condition(polygon.object));\r\n } else {\r\n if (this.polygonsList[type]) {\r\n this.map.togglePolygons(this.polygonsList[type], false);\r\n }\r\n this.polygonsList[type] = [];\r\n }\r\n\r\n if (this.polygonsList[type].length === 0) {\r\n delete this.polygonsList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all polygons from the map and from the internal list\r\n */\r\n public removeAllPolygons(): void {\r\n for (const type in this.polygonsList) {\r\n if (this.polygonsList.hasOwnProperty(type)) {\r\n this.removePolygons(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter polygons options/style\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonAlterOptions} options\r\n * @param {any} condition alter polygon with the condition [nullable]\r\n */\r\n public alterPolygonOptions(type: string, options: PolygonAlterOptions, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n if (polygons && polygons.length) {\r\n this.map.alterPolygonOptions(polygons, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to fit bounds of a polygon\r\n * @param {string} type\r\n * @param {any} condition fit polygon bounds with the condition [nullable]\r\n */\r\n public fitBoundsPolygons(type: string, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition)\r\n .filter((polygon: any) => this.map.isPolygonOnMap(polygon));\r\n\r\n if (polygons && polygons.length) {\r\n this.map.fitBoundsPolygons(polygons);\r\n }\r\n }\r\n\r\n /**\r\n * Set center on polygon bounds\r\n * @param {string} type\r\n * @param {any} condition fit polygon bounds with the condition [nullable]\r\n */\r\n public setCenterPolygons(type: string, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition)\r\n .filter((polygon: any) => this.map.isPolygonOnMap(polygon));\r\n\r\n if (polygons && polygons.length) {\r\n this.map.setCenterPolygons(polygons);\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if polygon exists\r\n * @param type\r\n * @param condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public polygonExists(type: string, condition?: any): boolean {\r\n const polygons = this.getPolygons(type, condition);\r\n return polygons && polygons.length > 0;\r\n }\r\n\r\n /**\r\n * Use this function to get the path of some polygon\r\n * @param {string} type\r\n * @param {any} condition\r\n * @returns {number[]}\r\n */\r\n public getPolygonPath(type: string, condition?: any): number[][] {\r\n const polygon = this.getPolygons(type, condition);\r\n\r\n if (polygon && polygon.length) {\r\n return this.map.getPolygonPath(polygon[0]);\r\n }\r\n }\r\n\r\n /**\r\n * This function add new events on polygon\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addPolygonEvent(type: string, event: PolygonEventType, eventFunction: any, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n this.map.addPolygonEvent(polygons, event, eventFunction);\r\n }\r\n\r\n /**\r\n * This function remove events of polygon\r\n * @param {string} type\r\n * @param {InlogMaps.PolygonEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removePolygonEvent(type: string, event: PolygonEventType, condition?: any): void {\r\n const polygons = this.getPolygons(type, condition);\r\n\r\n this.map.removePolygonEvent(polygons, event);\r\n }\r\n\r\n /* Circles */\r\n /**\r\n * Use this function to draw circles on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.CircleOptions} options\r\n * @param {any} eventClick [nullable]\r\n */\r\n public drawCircle(type: string, options: CircleOptions, eventClick?: any): void {\r\n const circle = this.map.drawCircle(options, eventClick);\r\n\r\n if (!this.circlesList[type]) {\r\n this.circlesList[type] = [];\r\n }\r\n this.circlesList[type].push(circle);\r\n }\r\n\r\n /**\r\n * Use this function to show/hide circles from a especific type\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toggle circles with the condition [nullable]\r\n */\r\n public toggleCircles(show: boolean, type: string, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n this.map.toggleCircles(circles, show);\r\n }\r\n }\r\n\r\n /**\r\n * Remove circles from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove circles with the condition [nullable]\r\n */\r\n public removeCircles(type: string, condition?: any): void {\r\n if (this.circlesList[type] && condition) {\r\n const circles = this.getCircles(type, condition);\r\n\r\n // Hide circles with the condition\r\n this.map.toggleCircles(circles, false);\r\n\r\n // Keep circles that doesn't have the condition\r\n this.circlesList[type] = this.circlesList[type].filter((circle: any) => !condition(circle.object));\r\n } else {\r\n if (this.circlesList[type]) {\r\n this.map.toggleCircles(this.circlesList[type], false);\r\n }\r\n this.circlesList[type] = [];\r\n }\r\n\r\n if (this.circlesList[type].length === 0) {\r\n delete this.circlesList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all circles from the map and from the internal list\r\n */\r\n public removeAllCircles(): void {\r\n for (const type in this.circlesList) {\r\n if (this.circlesList.hasOwnProperty(type)) {\r\n this.removeCircles(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter circle options\r\n * @param {string} type\r\n * @param {InlogMaps.CircleAlterOptions} options\r\n * @param {any} condition alter circle with the condition [nullable]\r\n */\r\n public alterCircleOptions(type: string, options: CircleAlterOptions, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n this.map.alterCircleOptions(circles, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to fit bounds of a polygon\r\n * @param {string} type\r\n * @param {any} condition fit polygon bounds with the condition [nullable]\r\n */\r\n public fitBoundsCircles(type: string, condition?: any): void {\r\n const circles = this.getCircles(type, condition)\r\n .filter((circle: any) => this.map.isCircleOnMap(circle));\r\n\r\n if (circles && circles.length) {\r\n this.map.fitBoundsCircles(circles);\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if circle exists\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public circleExists(type: string, condition?: any): boolean {\r\n const circles = this.getCircles(type, condition);\r\n return circles && circles.length > 0;\r\n }\r\n\r\n /**\r\n * This function return circle center\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {number[]}\r\n */\r\n public getCircleCenter(type: string, condition?: any): number[] {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n return this.map.getCircleCenter(circles[0]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * This function return circle center\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {number}\r\n */\r\n public getCircleRadius(type: string, condition?: any): number {\r\n const circles = this.getCircles(type, condition);\r\n\r\n if (circles && circles.length) {\r\n return this.map.getCircleRadius(circles[0]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * This function add new events on circle\r\n * @param {string} type\r\n * @param {InlogMaps.CircleEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addCircleEvent(type: string, event: CircleEventType, eventFunction: any, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n this.map.addCircleEvent(circles, event, eventFunction);\r\n }\r\n\r\n /**\r\n * This function remove events of circle\r\n * @param {string} type\r\n * @param {InlogMaps.CircleEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removeCircleEvent(type: string, event: CircleEventType, condition?: any): void {\r\n const circles = this.getCircles(type, condition);\r\n\r\n this.map.removeCircleEvent(circles, event);\r\n }\r\n\r\n /* Polylines */\r\n /**\r\n * Use this function to draw polylines on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineOptions} options\r\n * @param {any} eventClick [nullable]\r\n */\r\n public drawPolyline(type: string, options: PolylineOptions, eventClick?: any): void {\r\n const polyline = this.map.drawPolyline(options, eventClick);\r\n\r\n if (!this.polylinesList[type]) {\r\n this.polylinesList[type] = [];\r\n }\r\n this.polylinesList[type].push(polyline);\r\n }\r\n\r\n /**\r\n * Use this function to draw polylines with navigation on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineOptions} options\r\n */\r\n public drawPolylineWithNavigation(type: string, options: PolylineOptions, eventClick?: any): void {\r\n const polyline = this.map.drawPolylineWithNavigation(options, eventClick);\r\n\r\n if (!this.polylinesList[type]) {\r\n this.polylinesList[type] = [];\r\n }\r\n this.polylinesList[type].push(polyline);\r\n }\r\n\r\n /**\r\n * Use this function to toggle polylines\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition toggle polyline with the condition [nullable]\r\n */\r\n public togglePolylines(show: boolean, type: string, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n this.map.togglePolylines(polyline, show);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to remove polylines\r\n * @param {string} type\r\n * @param {any} condition remove polyline with the condition [nullable]\r\n */\r\n public removePolylines(type: string, condition?: any): void {\r\n if (this.polylinesList[type] && condition) {\r\n const polylines = this.getPolylines(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.togglePolylines(polylines, false);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.polylinesList[type] = this.polylinesList[type].filter((polyline: any) => !condition(polyline.object));\r\n } else {\r\n if (this.polylinesList[type]) {\r\n this.map.togglePolylines(this.polylinesList[type], false);\r\n }\r\n this.polylinesList[type] = [];\r\n }\r\n\r\n if (this.polylinesList[type].length === 0) {\r\n delete this.polylinesList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all polylines from the map and from the internal list\r\n */\r\n public removeAllPolylines(): void {\r\n for (const type in this.polylinesList) {\r\n if (this.polylinesList.hasOwnProperty(type)) {\r\n this.removePolylines(type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to alter polyline options\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineOptions} options\r\n * @param {any} condition alter polyline with the condition [nullable]\r\n */\r\n public alterPolylineOptions(type: string, options: PolylineOptions, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n this.map.alterPolylineOptions(polyline, options);\r\n }\r\n }\r\n\r\n /**\r\n * Use this functions to fit polylines bounds\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n */\r\n public fitBoundsPolylines(type: string, condition?: any): void {\r\n const polylines = this.getPolylines(type, condition)\r\n .filter((polyline: any) => this.map.isPolylineOnMap(polyline));\r\n\r\n if (polylines && polylines.length) {\r\n this.map.fitBoundsPolylines(polylines);\r\n }\r\n }\r\n\r\n /**\r\n * This functions returns if polyline exists\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n * @returns {boolean}\r\n */\r\n public polylineExists(type: string, condition?: any): boolean {\r\n const polylines = this.getPolylines(type, condition);\r\n return polylines && polylines.length > 0;\r\n }\r\n\r\n /**\r\n * Use this function to add more paths to a polyline\r\n * @param {string} type\r\n * @param {number[]} position\r\n * @param {any} condition [nullable]\r\n */\r\n public addPolylinePath(type: string, position: number[], condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n this.map.addPolylinePath(polyline, position);\r\n } else {\r\n const options = new PolylineOptions();\r\n options.addToMap = true;\r\n\r\n this.drawPolyline(type, options, null);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to get the path of some polyline\r\n * @param {string} type\r\n * @param {any} condition\r\n * @returns {number[]}\r\n */\r\n public getPolylinePath(type: string, condition?: any): number[][] {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n if (polyline && polyline.length) {\r\n return this.map.getPolylinePath(polyline[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to clear polyline selected from the currentMap\r\n */\r\n public removePolylineHighlight(): void {\r\n this.map.removePolylineHighlight();\r\n }\r\n\r\n /**\r\n * Use this function to add listeners on polyline\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineEventType} event\r\n * @param {any} eventFunction\r\n * @param {any} condition [nullable]\r\n */\r\n public addPolylineEvent(type: string, event: PolylineEventType, eventFunction: any, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n this.map.addPolylineEvent(polyline, event, eventFunction);\r\n }\r\n\r\n /**\r\n * Use this function to remove listeners of polyline\r\n * @param {string} type\r\n * @param {InlogMaps.PolylineEventType} event\r\n * @param {any} condition [nullable]\r\n */\r\n public removePolylineEvent(type: string, event: PolylineEventType, condition?: any): void {\r\n const polyline = this.getPolylines(type, condition);\r\n\r\n this.map.removePolylineEvent(polyline, event);\r\n }\r\n\r\n /**\r\n * Use this function to set position of polyline highlight\r\n * @param {string} type\r\n * @param {number} initialIndex\r\n * @param {any} condition [nullable]\r\n */\r\n public setIndexPolylineHighlight(type: string, initialIndex: number, condition?: any) {\r\n const polylines = this.getPolylines(type, condition);\r\n\r\n if (polylines && polylines.length) {\r\n this.map.setIndexPolylineHighlight(polylines[0], initialIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to get the object of a polyline\r\n * @param {string} type\r\n * @param {any} condition\r\n * @returns {object}\r\n */\r\n public getObjectPolyline(type: string, condition?: any): object {\r\n const polylines = this.getPolylines(type, condition);\r\n\r\n if (polylines && polylines.length) {\r\n return this.map.getObjectPolyline(polylines[0]);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to get the object of the polyline highligth\r\n * @returns {object}\r\n */\r\n public getObjectPolylineHighlight(): any {\r\n return this.map.getObjectPolylineHighlight();\r\n }\r\n\r\n /**\r\n * Use this function to add events on polyline highligtht / selected polyline\r\n * @param {InlogMaps.PolylineEventType} event\r\n * @param {any} eventFunction\r\n */\r\n public addPolylineHighlightEvent(event: PolylineEventType, eventFunction: any) {\r\n this.map.addPolylineHighlightEvent(event, eventFunction);\r\n }\r\n\r\n /**\r\n * Use this function to get initial and final index of the polyline highlight\r\n * @returns {number[]} returns an array with initial index and final index\r\n */\r\n public getPolylineHighlightIndex(): number[] {\r\n return this.map.getPolylineHighlightIndex();\r\n }\r\n\r\n /* Info Windows */\r\n /**\r\n * Use this function to draw popups on the currentMap\r\n * @param {string} type\r\n * @param {InlogMaps.PopupOptions} options\r\n */\r\n public drawPopup(type: string, options: PopupOptions): void {\r\n let marker: any = null;\r\n if (options.marker) {\r\n const markers = this.getMarkers(options.marker, options.conditionMarker);\r\n marker = markers[0];\r\n }\r\n\r\n let popup: any;\r\n if (this.infoWindowList[type]) {\r\n popup = this.map.alterPopup(this.infoWindowList[type], options, marker);\r\n } else {\r\n popup = this.map.drawPopup(options, marker);\r\n }\r\n\r\n this.infoWindowList[type] = popup;\r\n }\r\n\r\n /**\r\n * Use this function to alter popups\r\n * @param {string} type\r\n * @param {InlogMaps.PopupOptions} options\r\n */\r\n public alterPopup(type: string, options: PopupOptions): void {\r\n const popups = this.infoWindowList[type];\r\n\r\n let markers: any;\r\n if (options.marker) {\r\n markers = this.getMarkers(options.marker, options.conditionMarker);\r\n }\r\n\r\n if (popups) {\r\n this.map.alterPopupContent(popups, options, markers ? markers[0] : null);\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} type\r\n * @returns {object}\r\n */\r\n public getObjectOpenPopup(type: string): object {\r\n return this.infoWindowList[type] ? this.infoWindowList[type].object : null;\r\n }\r\n\r\n /**\r\n * Use this function to close popup by type\r\n * @param {string} type\r\n */\r\n public closePopup(type: string): void {\r\n if (this.infoWindowList[type]) {\r\n this.map.closePopup(this.infoWindowList[type])\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to close all popups\r\n * @param {string} type\r\n */\r\n public closeAllPopups(): void {\r\n for (const type in this.infoWindowList) {\r\n if (this.infoWindowList.hasOwnProperty(type)) {\r\n this.closePopup(type);\r\n }\r\n }\r\n }\r\n\r\n /* Map */\r\n /**\r\n * Resize de map based on html size\r\n */\r\n public resizeMap(): void {\r\n this.map.resizeMap();\r\n }\r\n\r\n /**\r\n * Use this function to add event clicks on the currentMap\r\n * @param {InlogMaps.MapEventType} eventType\r\n * @param eventFunction function callback\r\n */\r\n public addEventMap(eventType: MapEventType, eventFunction: any): void {\r\n this.map.addEventMap(eventType, eventFunction);\r\n }\r\n\r\n /**\r\n * Use this function to remove event clicks from the currentMap\r\n * @param {InlogMaps.MapEventType} eventType\r\n */\r\n public removeEventMap(eventType: MapEventType): void {\r\n this.map.removeEventMap(eventType);\r\n }\r\n\r\n /**\r\n * Returns the current zoom level of the map view\r\n * @returns {number}\r\n */\r\n public getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n /**\r\n * Set the current zoom level of the map view\r\n * @param {number} zoom\r\n */\r\n public setZoom(zoom: number): void {\r\n this.map.setZoom(zoom);\r\n }\r\n\r\n /**\r\n * Returns the center position of the map\r\n * @returns {number[]}\r\n */\r\n public getCenter(): number[] {\r\n return this.map.getCenter();\r\n }\r\n\r\n /**\r\n * Set the position center of the map\r\n * @param {number[]} position\r\n */\r\n public setCenter(position: number[]): void {\r\n this.map.setCenter(position);\r\n }\r\n\r\n /**\r\n * Returns the coordinates from pixels\r\n * @param {number} offsetx\r\n * @param {number} offsety\r\n * @returns {number[]}\r\n */\r\n public pixelsToLatLng(offsetx: number, offsety: number): number[] {\r\n return this.map.pixelsToLatLng(offsetx, offsety);\r\n }\r\n\r\n /**\r\n * Use this functions to fit bounds on elements with same type and condition\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n */\r\n public fitBoundsElements(type: string, condition?: any): void {\r\n const markers = this.getMarkers(type, condition)\r\n .filter((marker: any) => this.map.isMarkerOnMap(marker));\r\n\r\n const circles = this.getCircles(type, condition)\r\n .filter((circle: any) => this.map.isCircleOnMap(circle));\r\n\r\n const polygons = this.getPolygons(type, condition)\r\n .filter((polygon: any) => this.map.isPolygonOnMap(polygon));\r\n\r\n const polylines = this.getPolylines(type, condition)\r\n .filter((polyline: any) => this.map.isPolylineOnMap(polyline));\r\n\r\n this.map.fitBoundsElements(markers, circles, polygons, polylines);\r\n }\r\n\r\n /* Overlay */\r\n /**\r\n * Use this function to dray overlays on the current map\r\n * @param {string} type\r\n * @param {InlogMaps.OverlayOptions} options\r\n */\r\n public drawOverlay(type: string, options: OverlayOptions): void {\r\n let overlay = null;\r\n\r\n if (options.polygon) {\r\n const polygons = this.getPolygons(options.polygon, options.conditionPolygon);\r\n\r\n if (polygons && polygons.length) {\r\n overlay = this.map.drawOverlay(options, polygons);\r\n }\r\n } else {\r\n overlay = this.map.drawOverlay(options);\r\n }\r\n\r\n if (overlay != null) {\r\n if (!this.overlayList[type]) {\r\n this.overlayList[type] = [];\r\n }\r\n this.overlayList[type].push(overlay);\r\n }\r\n }\r\n\r\n /**\r\n * Use this function to show or hide overlay\r\n * @param {boolean} show\r\n * @param {string} type\r\n * @param {any} condition [nullable]\r\n */\r\n public toggleOverlay(show: boolean, type: string, condition?: any): void {\r\n const overlays = this.getOverlays(type, condition);\r\n\r\n if (overlays && overlays.length) {\r\n this.map.toggleOverlay(overlays, show);\r\n }\r\n }\r\n\r\n /**\r\n * Remove overlays from the map and from internal list\r\n * @param {string} type\r\n * @param {any} condition remove overlays with the condition [nullable]\r\n */\r\n public removeOverlays(type: string, condition?: any): void {\r\n if (this.overlayList[type] && condition) {\r\n const overlays = this.getOverlays(type, condition);\r\n\r\n // Hide markers with the condition\r\n this.map.toggleOverlay(overlays, false);\r\n\r\n // Keep markers that doesn't have the condition\r\n this.overlayList[type] = this.overlayList[type].filter((overlay: any) => !condition(overlay.object));\r\n } else {\r\n if (this.overlayList[type]) {\r\n this.map.toggleOverlay(this.overlayList[type], false);\r\n }\r\n this.overlayList[type] = [];\r\n }\r\n\r\n if (this.overlayList[type].length === 0) {\r\n delete this.overlayList[type];\r\n }\r\n }\r\n\r\n /**\r\n * Remove all overlays from the map and from the internal list\r\n */\r\n public removeAllOverlays(): void {\r\n for (const type in this.overlayList) {\r\n if (this.overlayList.hasOwnProperty(type)) {\r\n this.removeOverlays(type);\r\n }\r\n }\r\n }\r\n\r\n /* Private Methods */\r\n private getMarkers(type: string, condition: any): any[] {\r\n const markers = this.markersList[type];\r\n\r\n if (markers && markers.length) {\r\n return condition ? markers.filter((marker: any) => condition(marker.object)) : markers;\r\n } else return [];\r\n }\r\n\r\n private getPolygons(type: string, condition: any): any[] {\r\n const polygons = this.polygonsList[type];\r\n\r\n if (polygons && polygons.length) {\r\n return condition ? polygons.filter((polygon: any) => condition(polygon.object)) : polygons;\r\n } else return [];\r\n }\r\n\r\n private getCircles(type: string, condition: any): any[] {\r\n const circles = this.circlesList[type];\r\n\r\n if (circles && circles.length) {\r\n return condition ? circles.filter((circle: any) => condition(circle.object)) : circles;\r\n } else return [];\r\n }\r\n\r\n private getPolylines(type: string, condition: any): any[] {\r\n const polylines = this.polylinesList[type];\r\n\r\n if (polylines && polylines.length) {\r\n return condition ? polylines.filter((polyline: any) => condition(polyline.object)) : polylines;\r\n } else return [];\r\n }\r\n\r\n private getOverlays(type: string, condition: any): any[] {\r\n const overlays = this.overlayList[type];\r\n\r\n if (overlays && overlays.length) {\r\n return condition ? overlays.filter((overlay: any) => condition(overlay.object)) : overlays;\r\n } else return [];\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/map.ts","import { MapsApiLoaderService } from '../../utils/maps-api-loader.service';\r\nimport { CircleEventType, MapEventType, MarkerEventType, PolygonEventType, PolylineEventType } from '../dto/event-type';\r\nimport { MapType } from '../dto/map-type';\r\nimport CircleAlterOptions from '../features/circle/circle-alter-options';\r\nimport CircleOptions from '../features/circle/circle-options';\r\nimport GeoJsonOptions from '../features/geojson/geojson-options';\r\nimport MarkerClustererConfig from '../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../features/marker/marker-options';\r\nimport OverlayOptions from '../features/overlay/overlay-options';\r\nimport PolygonAlterOptions from '../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../features/polygons/polygon-options';\r\nimport PolylineOptions from '../features/polyline/polyline-options';\r\nimport PopupOptions from '../features/popup/popup-options';\r\nimport GoogleCircles from './google/google-circles';\r\nimport GoogleGeoJson from './google/google-geojson';\r\nimport GoogleMap from './google/google-map';\r\nimport GoogleMarkers from './google/google-markers';\r\nimport GoogleOverlays from './google/google-overlay';\r\nimport GooglePolygons from './google/google-polygons';\r\nimport GooglePolylines from './google/google-polylines';\r\nimport GooglePopups from './google/google-popup';\r\nimport IMapFunctions from './mapFunctions';\r\n\r\nexport default class GoogleMaps implements IMapFunctions {\r\n private googleMarkers: GoogleMarkers;\r\n private googlePolygons: GooglePolygons;\r\n private googleCircles: GoogleCircles;\r\n private googlePolylines: GooglePolylines;\r\n private googlePopups: GooglePopups;\r\n private googleMap: GoogleMap;\r\n private googleOverlays: GoogleOverlays;\r\n private googleGeoJson: GoogleGeoJson;\r\n\r\n private mapsApiLoader: MapsApiLoaderService = new MapsApiLoaderService();\r\n\r\n constructor() { /* */ }\r\n\r\n public async initialize(mapType: MapType, params: any, elementId: string): Promise<any> {\r\n try {\r\n const api = await this.mapsApiLoader.loadApi(mapType, params);\r\n const google = api;\r\n const options: any = {\r\n center: new google.maps.LatLng(-14, -54),\r\n fullscreenControl: false,\r\n keyboardShortcuts: false,\r\n mapTypeControl: true,\r\n minZoom: 4,\r\n rotateControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n zoom: 4,\r\n zoomControl: true\r\n };\r\n\r\n if (params.gestureHandling) {\r\n options.gestureHandling = 'cooperative';\r\n } else {\r\n options.gestureHandling = 'greedy';\r\n }\r\n\r\n if (params.options) {\r\n for (const key in params.options) {\r\n if (params.options.hasOwnProperty(key)) {\r\n options[key] = params.options[key];\r\n }\r\n }\r\n }\r\n\r\n const imageMapTypes = [];\r\n if (params.mapTiles) {\r\n const ids = [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE];\r\n\r\n params.mapTiles.forEach((tile: any) => {\r\n ids.push(tile.name);\r\n\r\n const mapTypeOptions = {\r\n getTileUrl: (coord: any, zoom: any) =>\r\n `https://tile.openstreetmap.org/${zoom}/${coord.x}/${coord.y}.png`,\r\n isPng: true,\r\n maxZoom: 19,\r\n minZoom: 0,\r\n name: 'OpenStreetMap',\r\n tileSize: new google.maps.Size(256, 256),\r\n };\r\n\r\n for (const key in tile) {\r\n if (tile.hasOwnProperty(key)) {\r\n mapTypeOptions[key] = tile[key];\r\n }\r\n }\r\n\r\n const imageMapType = new google.maps.ImageMapType(mapTypeOptions);\r\n imageMapTypes.push({ id: tile.name, tile: imageMapType });\r\n });\r\n\r\n options.mapTypeControlOptions = {\r\n mapTypeIds: ids,\r\n style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR\r\n };\r\n }\r\n\r\n const map = new google.maps.Map(document.getElementById(elementId), options);\r\n this.googleMarkers = new GoogleMarkers(map, google);\r\n this.googlePolygons = new GooglePolygons(map, google);\r\n this.googleCircles = new GoogleCircles(map, google);\r\n this.googlePopups = new GooglePopups(map, google);\r\n this.googlePolylines = new GooglePolylines(map, google, this.googlePopups);\r\n this.googleMap = new GoogleMap(map, google);\r\n this.googleOverlays = new GoogleOverlays(map, google, this.googlePolygons);\r\n this.googleGeoJson = new GoogleGeoJson(map, google);\r\n\r\n if (imageMapTypes && imageMapTypes.length) {\r\n imageMapTypes.forEach((image: any) => {\r\n map.mapTypes.set(image.id, image.tile);\r\n });\r\n }\r\n\r\n if (params.showTraffic) {\r\n const trafficLayer = new google.maps.TrafficLayer();\r\n trafficLayer.setMap(map);\r\n }\r\n\r\n return this;\r\n } catch (err) {\r\n return err;\r\n }\r\n }\r\n\r\n /* GEOJson */\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any) {\r\n this.googleGeoJson.loadGEOJson(data, options, eventClick);\r\n }\r\n\r\n /* Markers */\r\n public drawMarker(options: MarkerOptions, eventClick: any): any {\r\n return this.googleMarkers.drawMarker(options, eventClick);\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any): any {\r\n return this.googleMarkers.drawCircleMarker(options, eventClick);\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any): void {\r\n this.googleMarkers.toggleMarkers(markers, show, markerClusterer);\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions): void {\r\n this.googleMarkers.alterMarkerOptions(markers, options);\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean): void {\r\n this.googleMarkers.alterMarkerPosition(markers, position, addTransition);\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]): void {\r\n this.googleMarkers.fitBoundsPositions(markers);\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return this.googleMarkers.isMarkerOnMap(marker);\r\n }\r\n\r\n public setCenterMarker(marker: any): void {\r\n this.googleMarkers.setCenterMarker(marker);\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any): void {\r\n this.googleMarkers.addMarkerEvent(markers, eventType, eventFunction);\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n this.googleMarkers.removeMarkerEvent(markers, event);\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n return this.googleMarkers.addMarkerClusterer(config);\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n this.googleMarkers.alterMarkerClustererConfig(markerClusterer, config);\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n this.googleMarkers.refreshClusterer(markerClusterer);\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n this.googleMarkers.addMarkerOnClusterer(marker, markerClusterer);\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n this.googleMarkers.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n this.googleMarkers.clearMarkersClusterer(markerClusterer);\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return this.googleMarkers.countMarkersOnCluster(markerClusterer);\r\n }\r\n\r\n /* Polygons */\r\n public drawPolygon(options: PolygonOptions, eventClick: any): any {\r\n return this.googlePolygons.drawPolygon(options, eventClick);\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean): void {\r\n this.googlePolygons.togglePolygons(polygons, show);\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions): void {\r\n this.googlePolygons.alterPolygonOptions(polygons, options);\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.googlePolygons.fitBoundsPolygons(polygons);\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.googlePolygons.setCenterPolygons(polygons);\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return this.googlePolygons.isPolygonOnMap(polygon);\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return this.googlePolygons.getPolygonPath(polygon);\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n return this.googlePolygons.addPolygonEvent(polygons, eventType, eventFunction);\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n this.googlePolygons.removePolygonEvent(polygons, event);\r\n }\r\n\r\n /* Circles */\r\n public drawCircle(options: CircleOptions, eventClick: any): any {\r\n return this.googleCircles.drawCircle(options, eventClick);\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean): void {\r\n this.googleCircles.toggleCircles(circles, show);\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions): void {\r\n this.googleCircles.alterCircleOptions(circles, options);\r\n }\r\n\r\n public fitBoundsCircles(circles: any): void {\r\n this.googleCircles.fitBoundsCircles(circles);\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return this.googleCircles.isCircleOnMap(circle);\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n return this.googleCircles.getCircleCenter(circle);\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return this.googleCircles.getCircleRadius(circle);\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n this.googleCircles.addCircleEvent(circles, eventType, eventFunction);\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n this.googleCircles.removeCircleEvent(circles, event);\r\n }\r\n\r\n /* Polylines */\r\n public drawPolyline(options: PolylineOptions, eventClick: any): any {\r\n return this.googlePolylines.drawPolyline(options, eventClick);\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any): any {\r\n return this.googlePolylines.drawPolylineWithNavigation(options, eventClick);\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean): void {\r\n this.googlePolylines.togglePolylines(polylines, show);\r\n }\r\n\r\n public alterPolylineOptions(polylines: any, options: PolylineOptions): void {\r\n this.googlePolylines.alterPolylineOptions(polylines, options);\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any): void {\r\n this.googlePolylines.fitBoundsPolylines(polylines);\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return this.googlePolylines.isPolylineOnMap(polyline);\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]): void {\r\n this.googlePolylines.addPolylinePath(polylines, position);\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return this.googlePolylines.getPolylinePath(polyline);\r\n }\r\n\r\n public removePolylineHighlight(): void {\r\n this.googlePolylines.removePolylineHighlight();\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any): void {\r\n this.googlePolylines.addPolylineEvent(polylines, eventType, eventFunction);\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType): void {\r\n this.googlePolylines.removePolylineEvent(polylines, event);\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number): void {\r\n this.googlePolylines.setIndexPolylineHighlight(polyline, index);\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return this.googlePolylines.getObjectPolyline(polyline);\r\n }\r\n\r\n public getObjectPolylineHighlight(): object {\r\n return this.googlePolylines.getObjectPolylineHighlight();\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any): void {\r\n this.googlePolylines.addPolylineHighlightEvent(eventType, eventFunction);\r\n }\r\n\r\n public getPolylineHighlightIndex(): number[] {\r\n return this.googlePolylines.getPolylineHighlightIndex();\r\n }\r\n\r\n /* Info Windows */\r\n public drawPopup(options: PopupOptions, marker?: any): any {\r\n return this.googlePopups.drawPopup(options, marker);\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any): any {\r\n return this.googlePopups.alterPopup(popup, options, marker);\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any): void {\r\n this.googlePopups.alterPopupContent(popup, options, marker);\r\n }\r\n\r\n public closePopup(popup: any): void {\r\n this.googlePopups.closePopup(popup);\r\n }\r\n\r\n /* Map */\r\n public resizeMap(): void {\r\n this.googleMap.resizeMap();\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any): void {\r\n this.googleMap.addEventMap(eventType, eventFunction);\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType): void {\r\n this.googleMap.removeEventMap(eventType);\r\n }\r\n\r\n public getZoom(): number {\r\n return this.googleMap.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number): void {\r\n this.googleMap.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n return this.googleMap.getCenter();\r\n }\r\n\r\n public setCenter(position: number[]): void {\r\n this.googleMap.setCenter(position);\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number): number[] {\r\n return this.googleMap.pixelsToLatLng(offsetx, offsety);\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any): void {\r\n this.googleMap.fitBoundsElements(markers, circles, polygons, polylines);\r\n }\r\n\r\n /* Overlay */\r\n public drawOverlay(options: OverlayOptions, polygons: any) {\r\n return this.googleOverlays.drawOverlay(options, polygons);\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean): void {\r\n this.googleOverlays.toggleOverlay(overlays, show);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/googleMaps.ts","import { CircleEventType } from '../../dto/event-type';\r\nimport CircleAlterOptions from '../../features/circle/circle-alter-options';\r\nimport CircleOptions from '../../features/circle/circle-options';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class GoogleCircles {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawCircle(options: CircleOptions, eventClick: any) {\r\n const self = this;\r\n const latlng = {\r\n lat: options.center[0],\r\n lng: options.center[1]\r\n };\r\n const newOptions = {\r\n center: latlng,\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n fillColor: options.fillColor,\r\n fillOpacity: options.fillOpacity,\r\n object: options.object,\r\n radius: options.radius,\r\n strokeColor: options.color,\r\n strokeOpacity: options.opacity,\r\n strokeWeight: options.weight,\r\n suppressUndo: true\r\n };\r\n\r\n const circle = new this.google.maps.Circle(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(circle, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n circle.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(circle.getBounds());\r\n }\r\n\r\n return circle;\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean) {\r\n const self = this;\r\n circles.forEach((circle) => circle.setMap(show ? self.map : null));\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions) {\r\n circles.forEach((circle) => {\r\n const latlng = options.center && options.center.length > 0 ?\r\n { lat: options.center[0], lng: options.center[1] } : circle.getCenter();\r\n\r\n const newOptions = {\r\n center: latlng,\r\n fillColor: options.fillColor ? options.fillColor : circle.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : circle.fillOpacity,\r\n radius: options.radius ? options.radius : circle.radius,\r\n strokeColor: options.color ? options.color : circle.strokeColor,\r\n strokeOpacity: options.opacity ? options.opacity : circle.strokeOpacity,\r\n strokeWeight: options.weight ? options.weight : circle.strokeWeight,\r\n editable: options.editable !== null && options.editable !== undefined ?\r\n options.editable : circle.editable,\r\n draggable: options.draggable !== null && options.draggable !== undefined ?\r\n options.draggable : circle.draggable\r\n };\r\n\r\n circle.setOptions(newOptions);\r\n });\r\n }\r\n\r\n public fitBoundsCircles(circles: any): void {\r\n this.map.fitBounds(this.getCirclesBounds(circles));\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return !!circle.map;\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n const center = circle.getCenter();\r\n\r\n return [center.lat(), center.lng()];\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return circle.getRadius();\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n circles.forEach((circle: any) => {\r\n switch (eventType) {\r\n case CircleEventType.Click:\r\n this.google.maps.event.addListener(circle, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, circle.object);\r\n });\r\n break;\r\n case CircleEventType.CenterChanged:\r\n this.google.maps.event.addListener(circle, 'center_changed', () => {\r\n const param = new EventReturn([circle.getCenter().lat(), circle.getCenter().lng()]);\r\n eventFunction(param, circle.object);\r\n });\r\n case CircleEventType.RadiusChanged:\r\n this.google.maps.event.addListener(circle, 'radius_changed', (event: any) => {\r\n const param = new EventReturn([circle.getCenter().lat(), circle.getCenter().lng()]);\r\n eventFunction(param, circle.object, circle.getRadius());\r\n });\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n circles.forEach((circle: any) => {\r\n switch (event) {\r\n case CircleEventType.Click:\r\n this.google.maps.event.clearListeners(circle, 'click');\r\n case CircleEventType.CenterChanged:\r\n this.google.maps.event.clearListeners(circle, 'center_changed');\r\n case CircleEventType.RadiusChanged:\r\n this.google.maps.event.clearListeners(circle, 'radius_changed');\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n private getCirclesBounds(circles: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n circles.forEach((circulo: any) => bounds.union(circulo.getBounds()));\r\n return bounds;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-circles.ts","import EventReturn from '../../features/events/event-return';\r\nimport GeoJsonOptions from '../../features/geojson/geojson-options';\r\n\r\nexport default class GoogleGeoJson {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any) {\r\n const self = this;\r\n const objects = self.parseGeoJson(data, options);\r\n\r\n objects.forEach((elem) => {\r\n if (eventClick) {\r\n elem.addListener('click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param);\r\n });\r\n }\r\n elem.setMap(self.map);\r\n });\r\n }\r\n\r\n private parseGeoJson(data: any, options: GeoJsonOptions) {\r\n const self = this;\r\n const parsedFeatures = [];\r\n\r\n if (Array.isArray(data.features)) {\r\n for (const feature of data.features) {\r\n parsedFeatures.push(self.parseGeoJsonToObject(feature, options));\r\n }\r\n } else {\r\n parsedFeatures.push(self.parseGeoJsonToObject(data, options));\r\n }\r\n\r\n return parsedFeatures;\r\n }\r\n\r\n private parseGeoJsonToObject(data: any, objectOptions: any) {\r\n const geometry = data.geometry;\r\n\r\n if (data.properties) {\r\n Object.assign(objectOptions, data.properties);\r\n }\r\n\r\n switch (geometry.type) {\r\n case 'Point':\r\n objectOptions.position = {\r\n lat: geometry.coordinates[1],\r\n lng: geometry.coordinates[0]\r\n };\r\n return new this.google.maps.Marker(objectOptions);\r\n case 'Polygon':\r\n objectOptions.paths = [];\r\n geometry.coordinates.forEach((polygon) =>\r\n objectOptions.paths.push(polygon.map((elem) => ({\r\n lat: elem[1],\r\n lng: elem[0]\r\n })))\r\n );\r\n return new this.google.maps.Polygon(objectOptions);\r\n case 'LineString':\r\n objectOptions.path = geometry.coordinates.map((elem) => ({\r\n lat: elem[1],\r\n lng: elem[0]\r\n }));\r\n return new this.google.maps.Polyline(objectOptions);\r\n default:\r\n throw new Error('Forma de objeto desconhecida.');\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-geojson.ts","import { MapEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class GoogleMap {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public resizeMap(): void {\r\n google.maps.event.trigger(this.map, 'resize');\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any) {\r\n const self = this;\r\n\r\n switch (eventType) {\r\n case MapEventType.Click:\r\n this.google.maps.event.addListener(self.map, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param);\r\n });\r\n break;\r\n case MapEventType.ZoomChanged:\r\n self.map.addListener('zoom_changed', () => {\r\n const param = new EventReturn([self.map.getCenter().lat(), self.map.getCenter().lng()]);\r\n eventFunction(param);\r\n });\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType) {\r\n const self = this;\r\n switch (eventType) {\r\n case MapEventType.Click:\r\n this.google.maps.event.clearListeners(self.map, 'click');\r\n break;\r\n case MapEventType.ZoomChanged:\r\n this.google.maps.event.clearListeners(self.map, 'zoom_changed');\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number) {\r\n return this.map.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n const center = this.map.getCenter();\r\n return [center.lat(), center.lng()];\r\n }\r\n\r\n public setCenter(position: number[]) {\r\n this.map.setCenter(new google.maps.LatLng(position[0], position[1]));\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number) {\r\n const scale = Math.pow(2, this.map.getZoom());\r\n const worldCoordinateCenter = this.map.getProjection().fromLatLngToPoint(this.map.getCenter());\r\n const pixelOffset = new google.maps.Point(offsetx / scale || 0, offsety / scale || 0);\r\n\r\n const worldCoordinateNewCenter = new google.maps.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n\r\n const latlng = this.map.getProjection().fromPointToLatLng(worldCoordinateNewCenter);\r\n return [latlng.lat(), latlng.lng()];\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any) {\r\n const bounds = new google.maps.LatLngBounds();\r\n\r\n if (markers && markers.length) {\r\n markers.forEach((marker: any) => bounds.extend(marker.getPosition()));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n if (circles && circles.length) {\r\n circles.forEach((circle: any) => bounds.union(circle.getBounds()));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n if (polygons && polygons.length) {\r\n polygons.forEach((polygon: any) => polygon.getPaths()\r\n .forEach((path: any) => path.getArray()\r\n .forEach((ponto: any) => bounds.extend(ponto))));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n if (polylines && polylines.length) {\r\n polylines.forEach((polyline: any) => polyline.getPath()\r\n .forEach((path: any) => bounds.extend(new google.maps.LatLng(path.lat(), path.lng()))));\r\n\r\n this.map.fitBounds(bounds);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-map.ts","import { MarkerEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport MarkerClustererConfig from '../../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../../features/marker/marker-options';\r\n\r\nconst MarkerClusterer = require('@google/markerclustererplus');\r\n\r\nexport default class GoogleMarkers {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawMarker(options: MarkerOptions, eventClick: any) {\r\n const newOptions = {\r\n draggable: options.draggable,\r\n icon: null,\r\n object: options.object,\r\n position: {\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n }\r\n };\r\n\r\n if (options.icon) {\r\n newOptions.icon = {\r\n url: options.icon.url\r\n };\r\n\r\n if (options.icon.size) {\r\n newOptions.icon.size = new this.google.maps.Size(options.icon.size[0], options.icon.size[1]);\r\n }\r\n }\r\n const marker = new this.google.maps.Marker(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(marker, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n marker.setMap(this.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n bounds.extend(marker.getPosition());\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n return marker;\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n icon: {\r\n fillColor: options.style.fillColor,\r\n fillOpacity: options.style.fillOpacity,\r\n path: this.google.maps.SymbolPath.CIRCLE,\r\n scale: options.style.radius,\r\n strokeColor: options.style.color,\r\n strokeWeight: options.style.weight\r\n },\r\n object: options.object,\r\n position: {\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n }\r\n };\r\n\r\n const marker = new this.google.maps.Marker(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(marker, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n marker.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n bounds.extend(marker.getPosition());\r\n self.map.fitBounds(bounds);\r\n }\r\n\r\n return marker;\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any) {\r\n const self = this;\r\n markers.forEach((marker) => {\r\n marker.setMap(show ? self.map : null);\r\n\r\n if (markerClusterer) {\r\n if (show) {\r\n self.addMarkerOnClusterer(marker, markerClusterer);\r\n } else {\r\n self.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions) {\r\n let icon = null;\r\n let position = null;\r\n\r\n if (options.latlng) {\r\n position = {\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n };\r\n }\r\n\r\n if (options.icon) {\r\n icon = options.icon;\r\n\r\n if (options.icon.size) {\r\n icon.size = new this.google.maps.Size(options.icon.size[0], options.icon.size[1]);\r\n }\r\n }\r\n\r\n markers.forEach((marker) => {\r\n if (options.style) {\r\n icon = {\r\n fillColor: options.style.fillColor ? options.style.fillColor : marker.icon.fillColor,\r\n fillOpacity: options.style.fillOpacity ? options.style.fillOpacity : marker.icon.fillOpacity,\r\n path: this.google.maps.SymbolPath.CIRCLE,\r\n scale: options.style.radius ? options.style.radius : marker.icon.scale,\r\n strokeColor: options.style.color ? options.style.color : marker.icon.strokeColor,\r\n strokeWeight: options.style.weight ? options.style.weight : marker.icon.strokeWeight\r\n };\r\n }\r\n\r\n let newOptions = null;\r\n if (position && icon) {\r\n newOptions = { icon, position };\r\n } else if (position) {\r\n newOptions = { position };\r\n } else {\r\n newOptions = { icon };\r\n }\r\n\r\n marker.setOptions(newOptions);\r\n });\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean) {\r\n const newPosition = {\r\n lat: position[0],\r\n lng: position[1]\r\n };\r\n\r\n markers.forEach((marker) => {\r\n if (addTransition) {\r\n this.moveTransitionMarker(newPosition, marker);\r\n } else {\r\n marker.setPosition(newPosition);\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n markers.map((marker) => marker.position).forEach((position) => bounds.extend(position));\r\n this.map.fitBounds(bounds);\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return !!marker.map;\r\n }\r\n\r\n public setCenterMarker(marker: any) {\r\n this.map.setCenter(marker.getPosition());\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any) {\r\n markers.forEach((marker: any) => {\r\n switch (eventType) {\r\n case MarkerEventType.Click:\r\n this.google.maps.event.addListener(marker, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.RightClick:\r\n this.google.maps.event.addListener(marker, 'rightclick', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n this.google.maps.event.addListener(marker, 'dragend', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOver:\r\n this.google.maps.event.addListener(marker, 'mouseover', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOut:\r\n this.google.maps.event.addListener(marker, 'mouseout', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n this.google.maps.event.addListener(marker, 'dragstart', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n markers.forEach((marker: any) => {\r\n switch (event) {\r\n case MarkerEventType.Click:\r\n this.google.maps.event.clearListeners(marker, 'click');\r\n break;\r\n case MarkerEventType.RightClick:\r\n this.google.maps.event.clearListeners(marker, 'rightclick');\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n this.google.maps.event.clearListeners(marker, 'dragend');\r\n break;\r\n case MarkerEventType.MouseOver:\r\n this.google.maps.event.clearListeners(marker, 'mouseover');\r\n break;\r\n case MarkerEventType.MouseOut:\r\n this.google.maps.event.clearListeners(marker, 'mouseout');\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n this.google.maps.event.clearListeners(marker, \"dragstart\");\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n return new MarkerClusterer(this.map, [], {\r\n maxZoom: config.clusterMaxZoom,\r\n minimumClusterSize: config.clusterMinSize,\r\n zoomOnClick: config.clusterZoomOnClick\r\n });\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n markerClusterer.setZoomOnClick(config.clusterZoomOnClick);\r\n markerClusterer.setMinimumClusterSize(config.clusterMinSize);\r\n markerClusterer.setMaxZoom(config.clusterMaxZoom);\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n markerClusterer.repaint();\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n if (markerClusterer.getMarkers().indexOf(marker) === -1) {\r\n markerClusterer.addMarker(marker, true);\r\n }\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n markerClusterer.removeMarker(marker);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n markerClusterer.clearMarkers();\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return markerClusterer.getMarkers().length;\r\n }\r\n\r\n private moveTransitionMarker(position: any, marker: any) {\r\n const numDeltas = 5;\r\n const reference = {\r\n deltaLat: (position.lat - marker.getPosition().lat()) / numDeltas,\r\n deltaLng: (position.lng - marker.getPosition().lng()) / numDeltas,\r\n i: 0,\r\n position: [marker.getPosition().lat(), marker.getPosition().lng()],\r\n lastPosition: position\r\n };\r\n\r\n this.moveMarker(marker, reference, numDeltas);\r\n }\r\n\r\n private moveMarker(marker: any, reference: any, numDeltas: number) {\r\n reference.position[0] += reference.deltaLat;\r\n reference.position[1] += reference.deltaLng;\r\n marker.setPosition(new google.maps.LatLng(reference.position[0], reference.position[1]));\r\n if (reference.i < numDeltas) {\r\n reference.i++;\r\n setTimeout(() => this.moveMarker(marker, reference, numDeltas), 20);\r\n } else if (reference.i === numDeltas) {\r\n setTimeout(() => marker.setPosition(reference.lastPosition), 20);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-markers.ts","import EventReturn from '../../features/events/event-return';\r\nimport OverlayOptions from '../../features/overlay/overlay-options';\r\nimport GooglePolygons from './google-polygons';\r\n\r\nexport default class GoogleOverlays {\r\n private map = null;\r\n private google = null;\r\n private googlePolygons: GooglePolygons;\r\n private OverlayGoogle = null;\r\n\r\n constructor(map: any, google: any, googlePolygons: GooglePolygons) {\r\n this.map = map;\r\n this.google = google;\r\n this.googlePolygons = googlePolygons;\r\n\r\n OverlayGoogle.prototype = new this.google.maps.OverlayView();\r\n\r\n function OverlayGoogle(bounds: any, div: any, draggable: boolean, obj: any, afterDrag: any) {\r\n this.bounds_ = bounds;\r\n this.div_ = div;\r\n this.draggable = draggable;\r\n this.afterDragHandler = afterDrag;\r\n this.object = obj;\r\n this.setMap(map);\r\n }\r\n\r\n OverlayGoogle.prototype.onAdd = function () {\r\n const that = this;\r\n const panes = this.getPanes();\r\n panes.overlayLayer.appendChild(this.div_);\r\n panes.overlayMouseTarget.appendChild(this.div_);\r\n\r\n google.maps.event.addDomListener(this.div_, 'click', function () {\r\n google.maps.event.trigger(this.div_, 'click');\r\n });\r\n\r\n if (this.draggable) {\r\n google.maps.event.addDomListener(this.get('map').getDiv(), 'mouseleave', function () {\r\n google.maps.event.trigger(this.div_, 'mouseup');\r\n });\r\n\r\n google.maps.event.addDomListener(this.div_, 'mousedown', function (e) {\r\n this.style.cursor = 'move';\r\n that.map.set('draggable', false);\r\n that.set('origin', e);\r\n\r\n that.moveHandler = google.maps.event.addDomListener(that.get('map').getDiv(),\r\n 'mousemove', function (e) {\r\n const origin = that.get('origin');\r\n const left = origin.clientX - e.clientX;\r\n const top = origin.clientY - e.clientY;\r\n const pos = that.getProjection().fromLatLngToDivPixel(that.bounds_.getCenter());\r\n const latLng = that.getProjection()\r\n .fromDivPixelToLatLng(new google.maps.Point(pos.x - left, pos.y - top));\r\n\r\n that.set('origin', e);\r\n that.bounds_ = new google.maps.LatLngBounds();\r\n that.bounds_.extend(latLng);\r\n that.draw();\r\n });\r\n });\r\n\r\n google.maps.event.addDomListener(this.div_, 'mouseup', function () {\r\n that.map.set('draggable', true);\r\n this.style.cursor = 'default';\r\n google.maps.event.removeListener(that.moveHandler);\r\n\r\n if (that.afterDragHandler) {\r\n const latLng = that.bounds_.getCenter();\r\n const param = new EventReturn([latLng.lat(), latLng.lng()]);\r\n that.afterDragHandler(param, that.object);\r\n }\r\n });\r\n }\r\n };\r\n\r\n OverlayGoogle.prototype.draw = function () {\r\n const overlayProjection = this.getProjection();\r\n const center = overlayProjection.fromLatLngToDivPixel(this.bounds_.getCenter());\r\n\r\n const div = this.div_;\r\n div.style.left = center.x + 'px';\r\n div.style.top = center.y + 'px';\r\n };\r\n\r\n OverlayGoogle.prototype.onRemove = function () {\r\n this.div_.parentNode.removeChild(this.div_);\r\n };\r\n\r\n this.OverlayGoogle = OverlayGoogle;\r\n }\r\n\r\n public drawOverlay(options: OverlayOptions, polygons: any) {\r\n let bounds = null;\r\n\r\n if (polygons && polygons.length > 0) {\r\n bounds = this.googlePolygons.getPolygonsBounds(polygons);\r\n } else {\r\n bounds = new this.google.maps.LatLngBounds();\r\n bounds.extend(new this.google.maps.LatLng(options.position[0], options.position[1]));\r\n }\r\n\r\n const overlay = new this.OverlayGoogle(bounds, options.divElement,\r\n options.draggable, options.object, options.afterEventDragHandler);\r\n\r\n if (options.addToMap) {\r\n overlay.setMap(this.map);\r\n }\r\n\r\n overlay.object = options.object;\r\n return overlay;\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean) {\r\n const self = this;\r\n overlays.forEach((overlay) => overlay.setMap(show ? self.map : null));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-overlay.ts","import { PolygonEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport PolygonAlterOptions from '../../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../../features/polygons/polygon-options';\r\n\r\nexport default class GooglePolygons {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawPolygon(options: PolygonOptions, eventClick: any) {\r\n const self = this;\r\n let paths = this.getPathRecursiveArray(options.path);\r\n paths = this.getPathPolylineArray(paths);\r\n\r\n const newOptions = {\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n fillColor: options.fillColor,\r\n fillOpacity: options.fillOpacity,\r\n object: options.object,\r\n paths,\r\n strokeColor: options.color,\r\n strokeOpacity: options.opacity,\r\n strokeWeight: options.weight,\r\n suppressUndo: true,\r\n zIndex: options.zIndex\r\n };\r\n\r\n const polygon = new this.google.maps.Polygon(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(polygon, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, options.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polygon.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(self.getPolygonBounds(polygon));\r\n }\r\n\r\n return polygon;\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean) {\r\n const self = this;\r\n polygons.forEach((polygon) => polygon.setMap(show ? self.map : null));\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions) {\r\n let newOptions = {};\r\n\r\n polygons.forEach((polygon) => {\r\n newOptions = {\r\n editable: options.editable !== null && options.editable !== undefined ?\r\n options.editable : polygon.editable,\r\n fillColor: options.fillColor ? options.fillColor : polygon.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : polygon.fillOpacity,\r\n strokeColor: options.color ? options.color : polygon.strokeColor,\r\n strokeOpacity: options.opacity ? options.opacity : polygon.strokeOpacity,\r\n strokeWeight: options.weight ? options.weight : polygon.strokeWeight,\r\n draggable: options.draggable !== null && options.draggable !== undefined ?\r\n options.draggable : polygon.draggable\r\n };\r\n\r\n if (options.path) {\r\n const paths = [];\r\n options.path.forEach((path) => paths.push({ lat: path[0], lng: path[1] }));\r\n polygon.setPath(paths);\r\n }\r\n\r\n polygon.setOptions(newOptions);\r\n\r\n if (options.object) {\r\n polygon.object = options.object;\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.map.fitBounds(this.getPolygonsBounds(polygons));\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.map.setCenter(this.getPolygonsBounds(polygons).getCenter());\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return !!polygon.map;\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()])));\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n polygons.forEach((polygon: any) => {\r\n switch (eventType) {\r\n case PolygonEventType.SetAt:\r\n this.addPolygonEventMove(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.InsertAt:\r\n this.addPolygonEventInsertAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n this.addPolygonEventRemoveAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n this.addPolygonEventDragPolygon(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.Click:\r\n this.addPolygonEventClick(polygon, eventFunction);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n polygons.forEach((polygon: any) => {\r\n switch (event) {\r\n case PolygonEventType.SetAt:\r\n this.google.maps.event.clearListeners(polygon.getPaths(), 'set_at');\r\n break;\r\n case PolygonEventType.InsertAt:\r\n this.google.maps.event.clearListeners(polygon.getPaths(), 'insert_at');\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n this.google.maps.event.clearListeners(polygon.getPaths(), 'remove_at');\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n this.google.maps.event.clearListeners(polygon, 'dragstart');\r\n this.google.maps.event.clearListeners(polygon, 'dragend');\r\n break;\r\n case PolygonEventType.Click:\r\n this.google.maps.event.clearListeners(polygon, 'click');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public getPolygonsBounds(polygons: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n polygons.forEach((polygon: any) => {\r\n const paths = polygon.getPaths().getArray();\r\n paths.forEach((path: any) => path.getArray().forEach((x: any) => bounds.extend(x)));\r\n });\r\n\r\n return bounds;\r\n }\r\n\r\n private getPolygonBounds(polygon: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n const paths = polygon.getPaths().getArray();\r\n\r\n paths.forEach((path: any) => path.getArray().forEach((x: any) => bounds.extend(x)));\r\n return bounds;\r\n }\r\n\r\n private addPolygonEventMove(polygon, eventFunction) {\r\n const polygonPathIdx = polygon.getPaths().getLength();\r\n\r\n for (let index = 0; index < polygonPathIdx; index++) {\r\n this.addPolygonEventMoveAllPaths(polygon, polygon.getPaths().getAt(index), eventFunction);\r\n }\r\n }\r\n\r\n private addPolygonEventMoveAllPaths(polygon, innerPolygon, eventFunction) {\r\n this.google.maps.event.addListener(innerPolygon, 'set_at', (newEvent: any, lastEvent: any) => {\r\n if (polygon.dragging)\r\n return;\r\n\r\n const path = innerPolygon.getAt(newEvent);\r\n const newPosition = new EventReturn([path.lat(), path.lng()]);\r\n const lastPosition = new EventReturn([lastEvent.lat(), lastEvent.lng()]);\r\n\r\n eventFunction(newPosition, lastPosition, polygon.object, newEvent, polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))));\r\n });\r\n }\r\n\r\n private addPolygonEventInsertAt(polygon, eventFunction) {\r\n const polygonPathIdx = polygon.getPaths().getLength();\r\n\r\n for (let index = 0; index < polygonPathIdx; index++) {\r\n this.addPolygonEventInsertAtAllPaths(polygon, polygon.getPaths().getAt(index), eventFunction);\r\n }\r\n }\r\n\r\n private addPolygonEventInsertAtAllPaths(polygon, innerPolygon, eventFunction) {\r\n this.google.maps.event.addListener(innerPolygon, 'insert_at', (event: any) => {\r\n const newPath = innerPolygon.getAt(event);\r\n const newPoint = new EventReturn([newPath.lat(), newPath.lng()]);\r\n\r\n const previousPath = innerPolygon.getAt(event - 1);\r\n const previousPoint = previousPath ? new EventReturn([previousPath.lat(), previousPath.lng()]) : null;\r\n eventFunction(newPoint, previousPoint, polygon.object, event, polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))));\r\n });\r\n }\r\n\r\n private addPolygonEventRemoveAt(polygon, eventFunction) {\r\n const polygonPathIdx = polygon.getPaths().getLength();\r\n\r\n for (let index = 0; index < polygonPathIdx; index++) {\r\n this.addPolygonEventRemoveAtAllPaths(polygon, polygon.getPaths().getAt(index), eventFunction)\r\n }\r\n }\r\n\r\n private addPolygonEventRemoveAtAllPaths(polygon, innerPolygon, eventFunction) {\r\n this.google.maps.event.addListener(innerPolygon, 'remove_at', (event: any) => {\r\n const param = new EventReturn([innerPolygon.getAt(event).lat(), innerPolygon.getAt(event).lng()]);\r\n eventFunction(param, polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))), polygon.object);\r\n });\r\n }\r\n\r\n private addPolygonEventDragPolygon(polygon, eventFunction) {\r\n this.google.maps.event.addListener(polygon, 'dragstart', (event: any) => {\r\n polygon.dragging = true;\r\n });\r\n\r\n this.google.maps.event.addListener(polygon, 'dragend', (event: any) => {\r\n polygon.dragging = false;\r\n eventFunction(polygon.getPaths().getArray().map((x: any) => x.getArray().map(y => new EventReturn([y.lat(), y.lng()]))), polygon.object);\r\n });\r\n }\r\n\r\n private addPolygonEventClick(polygon, eventFunction) {\r\n this.google.maps.event.addListener(polygon, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, polygon.object);\r\n });\r\n }\r\n\r\n private getPathRecursiveArray(path: any) {\r\n if (Array.isArray(path) && typeof path[0] !== 'number') {\r\n return path.map(x => this.getPathRecursiveArray(x));\r\n }\r\n else return { lat: path[0], lng: path[1] }\r\n }\r\n\r\n private getPathPolylineArray(path: any) {\r\n if (typeof path[0].lat === 'number') {\r\n return path;\r\n }\r\n else if (typeof path[0][0].lat !== 'number') {\r\n path = path[0];\r\n return this.getPathPolylineArray(path);\r\n } else return path;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-polygons.ts","import { PolylineEventType } from '../../dto/event-type';\r\nimport { PolylineType } from '../../dto/polyline-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport NavigationOptions from '../../features/polyline/navigations-options';\r\nimport PolylineOptions from '../../features/polyline/polyline-options';\r\nimport GooglePopups from './google-popup';\r\n\r\nexport default class GooglePolylines {\r\n private map = null;\r\n private google = null;\r\n private googlePopups: GooglePopups;\r\n\r\n private selectedPolyline = null;\r\n private selectedPath = null;\r\n private navigateInfoWindow = null;\r\n private directionForward = false;\r\n private multiSelectionForward = false;\r\n private multiSelection = false;\r\n private navigateByPoint: boolean;\r\n private navigationOptions: NavigationOptions;\r\n\r\n constructor(map: any, google: any, googlePopups: GooglePopups) {\r\n this.map = map;\r\n this.google = google;\r\n this.googlePopups = googlePopups;\r\n }\r\n\r\n public drawPolyline(options: PolylineOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n icons: null,\r\n infowindows: options.infowindows,\r\n object: options.object,\r\n path: null,\r\n strokeColor: options.color,\r\n strokeOpacity: options.opacity || 1,\r\n strokeWeight: options.weight,\r\n suppressUndo: true,\r\n zIndex: options.zIndex\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.strokeOpacity = 0;\r\n newOptions.icons = [{\r\n icon: {\r\n path: 'M 0,-1 0,1',\r\n scale: 2,\r\n strokeOpacity: 1,\r\n strokeWeight: options.weight\r\n },\r\n offset: '0',\r\n repeat: '10px'\r\n }];\r\n break;\r\n case PolylineType.Arrow:\r\n newOptions.icons = [{\r\n icon: {\r\n path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\r\n scaledSize: new google.maps.Size(20, 20),\r\n size: new google.maps.Size(20, 20)\r\n },\r\n offset: '100%',\r\n repeat: '100px'\r\n },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '0%' },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '100%' }];\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n newOptions.path = options.path ? options.path.map((x) => {\r\n return {\r\n lat: x[0],\r\n lng: x[1]\r\n };\r\n }) : [];\r\n\r\n const polyline = new this.google.maps.Polyline(newOptions);\r\n\r\n if (eventClick) {\r\n this.google.maps.event.addListener(polyline, 'click', (event: any) => {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventClick(param, polyline.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polyline.setMap(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(self.getPolylineBounds(polyline));\r\n }\r\n\r\n return polyline;\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any) {\r\n const polyline = this.drawPolyline(options, null);\r\n\r\n polyline.navigationHandlerClick = eventClick;\r\n this.navigationOptions = options.navigateOptions;\r\n this.navigateByPoint = this.navigationOptions ? this.navigationOptions.navigateByPoint : true;\r\n this.addNavigation(polyline);\r\n\r\n return polyline;\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean) {\r\n polylines.forEach((polyline: any) => {\r\n const self = this;\r\n polyline.setMap(show ? self.map : null);\r\n });\r\n }\r\n\r\n public alterPolylineOptions(polylines, options: PolylineOptions) {\r\n polylines.forEach((polyline: any) => {\r\n const newOptions: any = {\r\n draggable: options.draggable ? options.draggable : polyline.draggable,\r\n editable: options.editable ? options.editable : polyline.editable,\r\n infowindows: options.infowindows ? options.infowindows : polyline.infowindows,\r\n object: options.object ? options.object : polyline.object,\r\n strokeColor: options.color ? options.color : polyline.strokeColor,\r\n strokeOpacity: options.opacity ? options.opacity : polyline.strokeOpacity,\r\n strokeWeight: options.weight ? options.weight : polyline.strokeWeight,\r\n zIndex: options.zIndex ? options.zIndex : polyline.zIndex\r\n };\r\n\r\n if (options.path) {\r\n polyline.setPath(options.path.map((x) => new google.maps.LatLng(x[0], x[1])));\r\n }\r\n\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.strokeOpacity = 0;\r\n newOptions.icons = [{\r\n icon: {\r\n path: 'M 0,-1 0,1',\r\n scale: 2,\r\n strokeOpacity: 1\r\n },\r\n offset: '0',\r\n repeat: '10px'\r\n }];\r\n break;\r\n case PolylineType.Arrow:\r\n newOptions.icons = [{\r\n icon: {\r\n path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\r\n scaledSize: new google.maps.Size(20, 20),\r\n size: new google.maps.Size(20, 20)\r\n },\r\n offset: '90%',\r\n repeat: '20%'\r\n },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '0%' },\r\n { icon: { path: google.maps.SymbolPath.FORWARD_OPEN_ARROW }, offset: '100%' }];\r\n break;\r\n default:\r\n newOptions.icons = null;\r\n break;\r\n }\r\n\r\n polyline.setOptions(newOptions);\r\n });\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any) {\r\n const self = this;\r\n self.map.fitBounds(self.getPolylinesBounds(polylines));\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return !!polyline.map;\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]) {\r\n polylines.forEach((polyline: any) => {\r\n const path = polyline.getPath();\r\n\r\n path.push(new this.google.maps.LatLng(position[0], position[1]));\r\n polyline.setPath(path);\r\n });\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return polyline.getPath().getArray().map((x: any) => [x.lat(), x.lng()]);\r\n }\r\n\r\n public removePolylineHighlight() {\r\n this.google.maps.event.clearListeners(document, 'keyup');\r\n this.google.maps.event.clearListeners(document, 'keydown');\r\n if (this.selectedPath) {\r\n this.selectedPath.setMap(null);\r\n this.selectedPath = null;\r\n }\r\n if (this.navigateInfoWindow) {\r\n this.navigateInfoWindow.close();\r\n }\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any) {\r\n polylines.forEach((polyline: any) => {\r\n switch (eventType) {\r\n case PolylineEventType.SetAt:\r\n this.addPolylineEventMove(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.RightClick:\r\n this.addPolylineEventRightClick(polyline, eventFunction)\r\n break;\r\n case PolylineEventType.InsertAt:\r\n this.addPolylineEventInsertAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n this.addPolylineEventRemoveAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n this.addPolylineEventDragPolyline(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOver:\r\n this.addPolylineEventMouseOver(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOut:\r\n this.addPolylineEventMouseOut(polyline, eventFunction);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType) {\r\n polylines.forEach((polyline: any) => this.google.maps.event.clearListeners(polyline, 'click'));\r\n\r\n polylines.forEach((polyline: any) => {\r\n switch (event) {\r\n case PolylineEventType.SetAt:\r\n this.google.maps.event.clearListeners(polyline.getPath(), 'set_at');\r\n break;\r\n case PolylineEventType.RightClick:\r\n this.google.maps.event.clearListeners(polyline, 'rightclick');\r\n break;\r\n case PolylineEventType.InsertAt:\r\n this.google.maps.event.clearListeners(polyline.getPath(), 'insert_at');\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n this.google.maps.event.clearListeners(polyline.getPath(), 'remove_at');\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n this.google.maps.event.clearListeners(polyline, 'dragstart');\r\n this.google.maps.event.clearListeners(polyline, 'dragend');\r\n break;\r\n case PolylineEventType.MouseOver:\r\n this.google.maps.event.clearListeners(polyline, 'mouseover');\r\n break;\r\n case PolylineEventType.MouseOut:\r\n this.google.maps.event.clearListeners(polyline, 'mouseout');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number) {\r\n this.directionForward = false;\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n this.google.maps.event.clearListeners(document, 'keydown');\r\n this.google.maps.event.addDomListener(document, 'keydown', this.onKeyUp.bind(this));\r\n } else {\r\n this.google.maps.event.clearListeners(document, 'keyup');\r\n this.google.maps.event.addDomListener(document, 'keyup', this.onKeyUp.bind(this));\r\n }\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return polyline.object;\r\n }\r\n\r\n public getObjectPolylineHighlight() {\r\n if (this.selectedPath) {\r\n return this.selectedPath.object;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any) {\r\n if (this.selectedPath) {\r\n this.addPolylineEvent([this.selectedPath], eventType, eventFunction);\r\n }\r\n }\r\n\r\n public getPolylineHighlightIndex() {\r\n if (this.selectedPath) {\r\n return [this.selectedPath.initialIdx, this.selectedPath.finalIdx];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /* Private methods */\r\n private addNavigation(polyline: any) {\r\n const self = this;\r\n\r\n this.google.maps.event.clearListeners(polyline, 'click');\r\n this.google.maps.event.addListener(polyline, 'click', self.onClickPolyline.bind(self, polyline));\r\n }\r\n\r\n private onClickPolyline(polyline: any, event: any) {\r\n const index = this.checkIdx(polyline, event.latLng);\r\n\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n this.google.maps.event.clearListeners(document, 'keydown');\r\n this.google.maps.event.addDomListener(document, 'keydown', this.onKeyUp.bind(this));\r\n } else {\r\n this.google.maps.event.clearListeners(document, 'keyup');\r\n this.google.maps.event.addDomListener(document, 'keyup', this.onKeyUp.bind(this));\r\n }\r\n\r\n if (polyline.navigationHandlerClick) {\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n polyline.navigationHandlerClick(param, polyline.object);\r\n }\r\n }\r\n\r\n private onKeyUp(event: any) {\r\n const self = this;\r\n\r\n if (self.selectedPath) {\r\n switch (event.which ? event.which : event.keyCode) {\r\n case 38: case 39:\r\n // up arrow or right arrow\r\n self.moveForwards(event.shiftKey);\r\n break;\r\n case 37: case 40:\r\n // left arrow or down arrow\r\n self.moveBackwards(event.shiftKey);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private moveForwards(multiSelection: boolean) {\r\n const self = this;\r\n const polyline = self.selectedPolyline;\r\n\r\n if ((!self.navigateByPoint || self.directionForward) &&\r\n polyline.finalIdx < polyline.getPath().getArray().length - 1) {\r\n self.navigateForward(multiSelection, polyline);\r\n }\r\n self.directionForward = true;\r\n self.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateForward(multiSelection: boolean, polyline: any) {\r\n const self = this;\r\n if (!multiSelection) {\r\n polyline.finalIdx++;\r\n polyline.initialIdx = self.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n self.multiSelection = false;\r\n } else {\r\n self.multiSelection = true;\r\n if (self.multiSelectionForward) {\r\n polyline.finalIdx++;\r\n }\r\n self.multiSelectionForward = true;\r\n }\r\n }\r\n\r\n private moveBackwards(multiSelection: boolean) {\r\n const self = this;\r\n const polyline = self.selectedPolyline;\r\n\r\n if ((!self.navigateByPoint || !self.directionForward) && polyline.initialIdx > 0) {\r\n self.navigateBackward(multiSelection, polyline);\r\n }\r\n self.directionForward = false;\r\n self.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateBackward(multiSelection: boolean, polyline) {\r\n const self = this;\r\n if (!multiSelection) {\r\n polyline.initialIdx--;\r\n polyline.finalIdx = !self.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n self.multiSelection = false;\r\n } else {\r\n self.multiSelection = true;\r\n if (!self.multiSelectionForward) {\r\n polyline.initialIdx--;\r\n }\r\n self.multiSelectionForward = false;\r\n }\r\n }\r\n\r\n private moveSelectedPath(polyline: any, options: NavigationOptions) {\r\n const pathSelected = polyline.getPath().getArray().slice(polyline.initialIdx, polyline.finalIdx + 1);\r\n\r\n if (this.selectedPath) {\r\n this.selectedPath.setPath(pathSelected);\r\n this.selectedPath.object = polyline.object;\r\n this.updateSelectedPathListeners();\r\n } else {\r\n const newOptions: any = {\r\n editable: options.editable,\r\n keyboardShortcuts: false,\r\n map: this.map,\r\n object: polyline.object,\r\n path: pathSelected,\r\n strokeColor: options && options.color || '#FF0000',\r\n strokeOpacity: options && options.opacity || 1,\r\n strokeWeight: options && options.weight || 10,\r\n zIndex: 9999\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.strokeOpacity = 0;\r\n newOptions.icons = [{\r\n icon: {\r\n path: 'M 0,-1 0,1',\r\n scale: 2,\r\n strokeOpacity: 1\r\n },\r\n offset: '0',\r\n repeat: '10px'\r\n }];\r\n break;\r\n case PolylineType.Arrow:\r\n newOptions.icons = [{\r\n icon: {\r\n anchor: new google.maps.Point(0, 2),\r\n fillColor: '#000',\r\n fillOpacity: 0.7,\r\n path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\r\n scale: 4,\r\n strokeColor: '#000',\r\n strokeWeight: 5,\r\n },\r\n offset: '100%'\r\n }];\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.selectedPath = new this.google.maps.Polyline(newOptions);\r\n }\r\n\r\n this.selectedPath.initialIdx = polyline.initialIdx;\r\n this.selectedPath.finalIdx = polyline.finalIdx;\r\n\r\n this.drawPopupNavigation(polyline);\r\n }\r\n\r\n private addPolylineEventMove(polyline: any, eventFunction: any) {\r\n polyline.moveListener = (newEvent: any, lastEvent: any) => {\r\n if (polyline.dragging)\r\n return;\r\n\r\n const path = polyline.getPath().getAt(newEvent);\r\n const newPosition = new EventReturn([path.lat(), path.lng()]);\r\n const lastPosition = new EventReturn([lastEvent.lat(), lastEvent.lng()]);\r\n\r\n eventFunction(newPosition, lastPosition, polyline.object, newEvent, polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()])));\r\n };\r\n this.google.maps.event.addListener(polyline.getPath(), 'set_at', polyline.moveListener);\r\n }\r\n\r\n private addPolylineEventInsertAt(polyline: any, eventFunction: any) {\r\n polyline.insertAtListener = (event: any) => {\r\n const path = polyline.getPath();\r\n const newPath = path.getAt(event);\r\n const newPoint = new EventReturn([newPath.lat(), newPath.lng()]);\r\n\r\n const previousPath = path.getAt(event - 1);\r\n const previousPoint = previousPath ? new EventReturn([previousPath.lat(), previousPath.lng()]) : null;\r\n eventFunction(newPoint, previousPoint, polyline.object, event, polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()])));\r\n };\r\n this.google.maps.event.addListener(polyline.getPath(), 'insert_at', polyline.insertAtListener);\r\n }\r\n\r\n private addPolylineEventRemoveAt(polyline: any, eventFunction: any) {\r\n polyline.removeAtListener = (event: any) => {\r\n const param = new EventReturn([polyline.getPath().getAt(event).lat(), polyline.getPath().getAt(event).lng()]);\r\n eventFunction(param, polyline.object, polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()])));\r\n };\r\n this.google.maps.event.addListener(polyline.getPath(), 'remove_at', polyline.removeAtListener);\r\n }\r\n\r\n private addPolylineEventRightClick(polyline: any, eventFunction: any) {\r\n polyline.rightClickPolylineListener = (event: any) => {\r\n polyline.dragging = false;\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'rightclick', polyline.rightClickPolylineListener);\r\n }\r\n\r\n private addPolylineEventMouseOver(polyline: any, eventFunction: any) {\r\n polyline.overPolylineListener = (event: any) => {\r\n polyline.dragging = false;\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'mouseover', polyline.overPolylineListener);\r\n }\r\n\r\n private addPolylineEventMouseOut(polyline: any, eventFunction: any) {\r\n polyline.outPolylineListener = (event: any) => {\r\n polyline.dragging = false;\r\n const param = new EventReturn([event.latLng.lat(), event.latLng.lng()]);\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'mouseout', polyline.outPolylineListener);\r\n }\r\n\r\n private addPolylineEventDragPolyline(polyline: any, eventFunction: any) {\r\n polyline.dragPolylineListener = () => {\r\n polyline.dragging = false;\r\n const param = polyline.getPath().getArray().map((x: any) => new EventReturn([x.lat(), x.lng()]));\r\n eventFunction(param, polyline.object);\r\n };\r\n\r\n this.google.maps.event.addListener(polyline, 'dragend', polyline.dragPolylineListener);\r\n this.google.maps.event.addListener(polyline, 'dragstart', () => polyline.dragging = true);\r\n }\r\n\r\n private updateSelectedPathListeners() {\r\n if (this.selectedPath.moveListener) {\r\n this.google.maps.event.clearListeners(this.selectedPath.getPath(), 'set_at');\r\n this.google.maps.event.addListener(this.selectedPath.getPath(), 'set_at', this.selectedPath.moveListener);\r\n }\r\n\r\n if (this.selectedPath.insertAtListener) {\r\n this.google.maps.event.clearListeners(this.selectedPath.getPath(), 'insert_at');\r\n this.google.maps.event.addListener(this.selectedPath.getPath(), 'insert_at',\r\n this.selectedPath.insertAtListener);\r\n }\r\n\r\n if (this.selectedPath.removeAtListener) {\r\n this.google.maps.event.clearListeners(this.selectedPath.getPath(), 'remove_at');\r\n this.google.maps.event.addListener(this.selectedPath.getPath(), 'remove_at',\r\n this.selectedPath.removeAtListener);\r\n }\r\n }\r\n\r\n private drawPopupNavigation(polyline: any) {\r\n const self = this;\r\n let idx = self.directionForward ? polyline.finalIdx : polyline.initialIdx;\r\n if (!self.navigateByPoint) {\r\n idx = polyline.finalIdx > polyline.initialIdx ? polyline.finalIdx : polyline.initialIdx;\r\n }\r\n\r\n const infowindow = polyline.infowindows ? polyline.infowindows[idx] : null;\r\n\r\n if (infowindow) {\r\n const point = polyline.getPath().getArray()[idx];\r\n\r\n if (self.navigateInfoWindow) {\r\n this.googlePopups.alterPopup(self.navigateInfoWindow, {\r\n content: infowindow,\r\n latlng: [point.lat(), point.lng()]\r\n });\r\n } else {\r\n self.navigateInfoWindow = this.googlePopups.drawPopup({\r\n content: infowindow,\r\n latlng: [point.lat(), point.lng()]\r\n });\r\n }\r\n }\r\n }\r\n\r\n private checkIdx(polyline: any, point: any) {\r\n const self = this;\r\n const path = polyline.getPath();\r\n let distance = 0;\r\n let minDistance = Number.MAX_VALUE;\r\n let returnValue = -1;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n distance = self.distanceToLine(path.getAt(i), path.getAt(i + 1), point);\r\n\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n returnValue = i;\r\n }\r\n }\r\n return returnValue;\r\n }\r\n\r\n private distanceToLine(pt1: any, pt2: any, pt: any) {\r\n const self = this;\r\n const deltaX = pt2.lng() - pt1.lng();\r\n const deltaY = pt2.lat() - pt1.lat();\r\n let incIntersect = (pt.lng() - pt1.lng()) * deltaX;\r\n const deltaSum = (deltaX * deltaX) + (deltaY * deltaY);\r\n\r\n incIntersect += (pt.lat() - pt1.lat()) * deltaY;\r\n if (deltaSum > 0) {\r\n incIntersect /= deltaSum;\r\n } else {\r\n incIntersect = -1;\r\n }\r\n\r\n // The intersection occurs outside the line segment, 'before' pt1.\r\n if (incIntersect < 0) {\r\n return self.kmTo(pt, pt1);\r\n } else if (incIntersect > 1) {\r\n return self.kmTo(pt, pt2);\r\n }\r\n\r\n // Intersection point calculation.\r\n const intersect = new this.google.maps\r\n .LatLng(pt1.lat() + incIntersect * deltaY, pt1.lng() + incIntersect * deltaX);\r\n\r\n return self.kmTo(pt, intersect);\r\n }\r\n\r\n private kmTo(pt1: any, pt2: any) {\r\n const e = Math;\r\n const ra = e.PI / 180;\r\n const b = pt1.lat() * ra;\r\n const c = pt2.lat() * ra;\r\n const d = b - c;\r\n const g = pt1.lng() * ra - pt2.lng() * ra;\r\n const f = 2 * e.asin(e.sqrt(e.pow(e.sin(d / 2), 2) + e.cos(b) * e.cos(c) * e.pow(e.sin(g / 2), 2)));\r\n\r\n return f * 6378.137 * 1000;\r\n }\r\n\r\n private getPolylinesBounds(polylines: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n\r\n polylines.forEach((polyline: any) => {\r\n const paths = polyline.getPath().getArray();\r\n paths.forEach((path: any) => bounds.extend(path));\r\n });\r\n\r\n return bounds;\r\n }\r\n\r\n private getPolylineBounds(polyline: any) {\r\n const bounds = new this.google.maps.LatLngBounds();\r\n const paths = polyline.getPath().getArray();\r\n\r\n paths.forEach((path) => bounds.extend(path));\r\n return bounds;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-polylines.ts","import PopupOptions from '../../features/popup/popup-options';\r\n\r\nexport default class GooglePopups {\r\n private map = null;\r\n private google = null;\r\n\r\n constructor(map: any, google: any) {\r\n this.map = map;\r\n this.google = google;\r\n }\r\n\r\n public drawPopup(options: PopupOptions, marker?: any) {\r\n const self = this;\r\n const infowindow = new this.google.maps.InfoWindow({\r\n content: options.content\r\n });\r\n\r\n if (options.latlng) {\r\n infowindow.setPosition({\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n });\r\n }\r\n\r\n infowindow.open(self.map, marker || null);\r\n\r\n if (options.object) {\r\n infowindow.object = options.object;\r\n }\r\n return infowindow;\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any) {\r\n const self = this;\r\n self.alterPopupContent(popup, options, marker);\r\n\r\n if (!popup.getMap()) {\r\n popup.open(self.map, marker || null);\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n\r\n return popup;\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any) {\r\n if (options.content) {\r\n popup.setContent(options.content);\r\n }\r\n\r\n if (options.latlng) {\r\n popup.setPosition({\r\n lat: options.latlng[0],\r\n lng: options.latlng[1]\r\n });\r\n } else if (marker) {\r\n popup.setPosition(marker.getPosition());\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n }\r\n\r\n public closePopup(popup: any) {\r\n popup.close();\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/google/google-popup.ts","import { OverlayOptions } from '../..';\r\nimport { MapsApiLoaderService } from '../../utils/maps-api-loader.service';\r\nimport { CircleEventType, MapEventType, MarkerEventType, PolygonEventType, PolylineEventType } from '../dto/event-type';\r\nimport { MapType } from '../dto/map-type';\r\nimport CircleAlterOptions from '../features/circle/circle-alter-options';\r\nimport CircleOptions from '../features/circle/circle-options';\r\nimport GeoJsonOptions from '../features/geojson/geojson-options';\r\nimport MarkerClustererConfig from '../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../features/marker/marker-options';\r\nimport PolygonAlterOptions from '../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../features/polygons/polygon-options';\r\nimport PolylineOptions from '../features/polyline/polyline-options';\r\nimport PopupOptions from '../features/popup/popup-options';\r\nimport LeafletCircles from './leaflet/leaflet-circle';\r\nimport LeafletGeoJson from './leaflet/leaflet-geojson';\r\nimport LeafletMap from './leaflet/leaflet-map';\r\nimport LeafletMarkers from './leaflet/leaflet-markers';\r\nimport LeafletOverlays from './leaflet/leaflet-overlay';\r\nimport LeafletPolygons from './leaflet/leaflet-polygons';\r\nimport LeafletPolylines from './leaflet/leaflet-polylines';\r\nimport LeafletPopups from './leaflet/leaflet-popup';\r\nimport IMapFunctions from './mapFunctions';\r\n\r\nexport default class Leaflet implements IMapFunctions {\r\n private leafletMarkers: LeafletMarkers;\r\n private leafletPolygons: LeafletPolygons;\r\n private leafletCircles: LeafletCircles;\r\n private leafletPolylines: LeafletPolylines;\r\n private leafletPopups: LeafletPopups;\r\n private leafletMap: LeafletMap;\r\n private leafletOverlays: LeafletOverlays;\r\n private leafletGeoJson: LeafletGeoJson;\r\n\r\n private mapsApiLoader: MapsApiLoaderService = new MapsApiLoaderService();\r\n\r\n constructor() { /* */ }\r\n\r\n public async initialize(mapType: MapType, params: any, elementId: string): Promise<any> {\r\n try {\r\n const api = await this.mapsApiLoader.loadApi(mapType, params);\r\n const leaflet = api;\r\n this.loadDependencies(params);\r\n await this.mapTimeout(1000);\r\n\r\n const mapOptions: any = {\r\n center: new leaflet.LatLng(-14, -54),\r\n editable: true,\r\n keyboard: false,\r\n maxZoom: params.wikimedia ? 18 : 19,\r\n minZoom: 4,\r\n zoom: 4,\r\n zoomControl: false\r\n };\r\n\r\n if (params.gestureHandling) {\r\n mapOptions.gestureHandling = true;\r\n }\r\n\r\n await this.mapTimeout(200);\r\n const osm = new leaflet.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', mapOptions);\r\n const wikimedia = new leaflet.tileLayer('https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png', {\r\n attribution: '<a href=\"https://wikimediafoundation.org/wiki/Maps_Terms_of_Use\">Wikimedia</a>'\r\n });\r\n\r\n const satelliteURL = 'https://server.arcgisonline.com/ArcGIS/rest/services/' +\r\n 'World_Imagery/MapServer/tile/{z}/{y}/{x}';\r\n const satellite = L.tileLayer(satelliteURL, {\r\n attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye,' +\r\n ' Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',\r\n maxZoom: 18\r\n });\r\n mapOptions.layers = [params.wikimedia ? wikimedia : osm];\r\n\r\n const map = new leaflet.Map(elementId, mapOptions);\r\n const baseLayers = {\r\n Map: params.wikimedia ? wikimedia : osm,\r\n Satellite: satellite\r\n };\r\n\r\n if (params.mapTiles && params.mapTiles.length) {\r\n params.mapTiles.forEach((tile: any) => {\r\n const layer = new leaflet.tileLayer(tile.url, tile.options);\r\n baseLayers[tile.name] = layer;\r\n });\r\n }\r\n\r\n leaflet.control.layers(baseLayers, null, { position: 'topleft' }).addTo(map);\r\n leaflet.control.zoom({ position: 'bottomright' }).addTo(map);\r\n\r\n this.leafletMarkers = new LeafletMarkers(map, leaflet);\r\n this.leafletPolygons = new LeafletPolygons(map, leaflet);\r\n this.leafletCircles = new LeafletCircles(map, leaflet);\r\n this.leafletPopups = new LeafletPopups(map, leaflet);\r\n this.leafletPolylines = new LeafletPolylines(map, leaflet, this.leafletPopups);\r\n this.leafletMap = new LeafletMap(map, leaflet);\r\n this.leafletOverlays = new LeafletOverlays(map, leaflet, this.leafletPolygons);\r\n this.leafletGeoJson = new LeafletGeoJson(map, leaflet);\r\n return this;\r\n } catch (err) {\r\n console.error(err);\r\n return err;\r\n }\r\n }\r\n\r\n /* GEOJson */\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any): void {\r\n this.leafletGeoJson.loadGEOJson(data, options, eventClick);\r\n }\r\n\r\n /* Markers */\r\n public drawMarker(options: MarkerOptions, eventClick: any): any {\r\n return this.leafletMarkers.drawMarker(options, eventClick);\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any): any {\r\n return this.leafletMarkers.drawCircleMarker(options, eventClick);\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any): void {\r\n this.leafletMarkers.toggleMarkers(markers, show, markerClusterer);\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions): void {\r\n this.leafletMarkers.alterMarkerOptions(markers, options);\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean): void {\r\n this.leafletMarkers.alterMarkerPosition(markers, position, addTransition);\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]): void {\r\n this.leafletMarkers.fitBoundsPositions(markers);\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return this.leafletMarkers.isMarkerOnMap(marker);\r\n }\r\n\r\n public setCenterMarker(marker: any): void {\r\n this.leafletMarkers.setCenterMarker(marker);\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any): void {\r\n this.leafletMarkers.addMarkerEvent(markers, eventType, eventFunction);\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n this.leafletMarkers.removeMarkerEvent(markers, event);\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n return this.leafletMarkers.addMarkerClusterer(config);\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n this.leafletMarkers.alterMarkerClustererConfig(markerClusterer, config);\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n this.leafletMarkers.refreshClusterer(markerClusterer);\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n this.leafletMarkers.addMarkerOnClusterer(marker, markerClusterer);\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n this.leafletMarkers.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n this.leafletMarkers.clearMarkersClusterer(markerClusterer);\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return this.leafletMarkers.countMarkersOnCluster(markerClusterer);\r\n }\r\n\r\n /* Polygons */\r\n public drawPolygon(options: PolygonOptions, eventClick: any): any {\r\n return this.leafletPolygons.drawPolygon(options, eventClick);\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean): void {\r\n this.leafletPolygons.togglePolygons(polygons, show);\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions): void {\r\n this.leafletPolygons.alterPolygonOptions(polygons, options);\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.leafletPolygons.fitBoundsPolygons(polygons);\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.leafletPolygons.setCenterPolygons(polygons);\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return this.leafletPolygons.isPolygonOnMap(polygon);\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return this.leafletPolygons.getPolygonPath(polygon);\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n this.leafletPolygons.addPolygonEvent(polygons, eventType, eventFunction);\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n this.leafletPolygons.removePolygonEvent(polygons, event);\r\n }\r\n\r\n /* Circles */\r\n public drawCircle(options: CircleOptions, eventClick: any): any {\r\n return this.leafletCircles.drawCircle(options, eventClick);\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean): void {\r\n this.leafletCircles.toggleCircles(circles, show);\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions): void {\r\n this.leafletCircles.alterCircleOptions(circles, options);\r\n }\r\n\r\n public fitBoundsCircles(circles: any) {\r\n this.leafletCircles.fitBoundsCircles(circles);\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return this.leafletCircles.isCircleOnMap(circle);\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n return this.leafletCircles.getCircleCenter(circle);\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return this.leafletCircles.getCircleRadius(circle);\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n this.leafletCircles.addCircleEvent(circles, eventType, eventFunction);\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n this.leafletCircles.removeCircleEvent(circles, event);\r\n }\r\n\r\n /* Polylines */\r\n public drawPolyline(options: PolylineOptions, eventClick: any): any {\r\n return this.leafletPolylines.drawPolyline(options, eventClick);\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any): any {\r\n return this.leafletPolylines.drawPolylineWithNavigation(options, eventClick);\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean): void {\r\n this.leafletPolylines.togglePolylines(polylines, show);\r\n }\r\n\r\n public alterPolylineOptions(polylines: any, options: PolylineOptions): void {\r\n this.leafletPolylines.alterPolylineOptions(polylines, options);\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any): void {\r\n this.leafletPolylines.fitBoundsPolylines(polylines);\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return this.leafletPolylines.isPolylineOnMap(polyline);\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]): void {\r\n this.leafletPolylines.addPolylinePath(polylines, position);\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return this.leafletPolylines.getPolylinePath(polyline);\r\n }\r\n\r\n public removePolylineHighlight(): void {\r\n this.leafletPolylines.removePolylineHighlight();\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any): void {\r\n this.leafletPolylines.addPolylineEvent(polylines, eventType, eventFunction);\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType): void {\r\n this.leafletPolylines.removePolylineEvent(polylines, event);\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number): void {\r\n this.leafletPolylines.setIndexPolylineHighlight(polyline, index);\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return this.leafletPolylines.getObjectPolyline(polyline);\r\n }\r\n public getObjectPolylineHighlight(): object {\r\n return this.leafletPolylines.getObjectPolylineHighlight();\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any): void {\r\n this.leafletPolylines.addPolylineHighlightEvent(eventType, eventFunction);\r\n }\r\n\r\n public getPolylineHighlightIndex(): number[] {\r\n return this.leafletPolylines.getPolylineHighlightIndex();\r\n }\r\n\r\n /* Popups */\r\n public drawPopup(options: PopupOptions, marker?: any): any {\r\n return this.leafletPopups.drawPopup(options, marker);\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any): any {\r\n return this.leafletPopups.alterPopup(popup, options, marker);\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any): any {\r\n this.leafletPopups.alterPopupContent(popup, options, marker);\r\n }\r\n\r\n public closePopup(popup: any): any {\r\n this.leafletPopups.closePopup(popup);\r\n }\r\n\r\n /* Map */\r\n public resizeMap(): void {\r\n this.leafletMap.resizeMap();\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any): void {\r\n this.leafletMap.addEventMap(eventType, eventFunction);\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType): void {\r\n this.leafletMap.removeEventMap(eventType);\r\n }\r\n\r\n public getZoom(): number {\r\n return this.leafletMap.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number): void {\r\n this.leafletMap.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n return this.leafletMap.getCenter();\r\n }\r\n\r\n public setCenter(position: number[]): void {\r\n this.leafletMap.setCenter(position);\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number): number[] {\r\n return this.leafletMap.pixelsToLatLng(offsetx, offsety);\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any): void {\r\n this.leafletMap.fitBoundsElements(markers, circles, polygons, polylines);\r\n }\r\n\r\n /* Overlay */\r\n public drawOverlay(options: OverlayOptions, polygons: any): any {\r\n return this.leafletOverlays.drawOverlay(options, polygons);\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean): void {\r\n this.leafletOverlays.toggleOverlay(overlays, show);\r\n }\r\n\r\n /* Private Methods */\r\n private mapTimeout(ms: number) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n }\r\n\r\n private loadDependencies(params: any) {\r\n const styles = params.cssDependencies;\r\n if (styles && styles.length > 0) {\r\n styles.forEach((path: any) => {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = path;\r\n document.querySelector('head').appendChild(link);\r\n });\r\n }\r\n\r\n const scripts = params.scriptsDependencies;\r\n if (scripts && scripts.length > 0) {\r\n scripts.forEach((path: any) => {\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = path;\r\n document.querySelector('head').appendChild(script);\r\n });\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet.ts","import { CircleEventType } from '../../dto/event-type';\r\nimport CircleAlterOptions from '../../features/circle/circle-alter-options';\r\nimport CircleOptions from '../../features/circle/circle-options';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class LeafletCircles {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public drawCircle(options: CircleOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n color: options.color,\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n fillColor: options.fillColor,\r\n fillOpacity: options.fillOpacity,\r\n opacity: options.opacity,\r\n radius: options.radius,\r\n weight: options.weight\r\n };\r\n const circle = new this.leaflet.Circle(options.center, newOptions);\r\n\r\n if (eventClick) {\r\n circle.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n circle.addTo(self.map);\r\n\r\n if (options.editable) {\r\n circle.enableEdit();\r\n }\r\n }\r\n\r\n if (options.object) {\r\n circle.object = options.object;\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(circle.getBounds());\r\n }\r\n\r\n return circle;\r\n }\r\n\r\n public toggleCircles(circles: any[], show: boolean) {\r\n const self = this;\r\n circles.forEach((circle) => show ? self.map.addLayer(circle) : self.map.removeLayer(circle));\r\n }\r\n\r\n public alterCircleOptions(circles: any[], options: CircleAlterOptions) {\r\n circles.forEach((circle) => {\r\n const style = {\r\n color: options.color ? options.color : circle.options.color,\r\n draggable: options.draggable ? options.draggable : circle.options.draggable,\r\n editable: options.editable ? options.editable : circle.options.editable,\r\n fillColor: options.fillColor ? options.fillColor : circle.options.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : circle.options.fillOpacity,\r\n opacity: options.opacity ? options.opacity : circle.options.opacity,\r\n weight: options.weight ? options.weight : circle.options.weight\r\n };\r\n\r\n circle.setStyle(style);\r\n\r\n if (options.radius) {\r\n circle.setRadius(options.radius);\r\n }\r\n\r\n if (options.center) {\r\n circle.setLatLng(options.center);\r\n }\r\n\r\n if (options.editable !== null && options.editable !== undefined) {\r\n if (options.editable) {\r\n circle.enableEdit();\r\n } else {\r\n circle.disableEdit();\r\n }\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsCircles(circles: any) {\r\n this.map.fitBounds(this.getBoundsCircles(circles));\r\n }\r\n\r\n public isCircleOnMap(circle: any): boolean {\r\n return this.map.hasLayer(circle);\r\n }\r\n\r\n public getCircleCenter(circle: any): number[] {\r\n const center = circle.getLatLng();\r\n\r\n return [center.lat, center.lng];\r\n }\r\n\r\n public getCircleRadius(circle: any): number {\r\n return circle.getRadius();\r\n }\r\n\r\n public addCircleEvent(circles: any, eventType: CircleEventType, eventFunction: any): void {\r\n circles.forEach((circle: any) => {\r\n switch (eventType) {\r\n case CircleEventType.Click:\r\n circle.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, circle.object);\r\n });\r\n case CircleEventType.CenterChanged:\r\n circle.on('dragend', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n eventFunction(param, circle.object);\r\n });\r\n case CircleEventType.RadiusChanged:\r\n circle.on('editable:vertex:dragend', (event: any) => {\r\n const param = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n eventFunction(param, circle.object, circle.getRadius());\r\n });\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeCircleEvent(circles: any, event: CircleEventType): void {\r\n circles.forEach((circle: any) => {\r\n switch (event) {\r\n case CircleEventType.Click:\r\n circle.off('click');\r\n case CircleEventType.CenterChanged:\r\n circle.off('dragend');\r\n case CircleEventType.RadiusChanged:\r\n circle.off('editable:vertex:dragend');\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n private getBoundsCircles(circles: any) {\r\n const group = new this.leaflet.FeatureGroup(circles);\r\n return group.getBounds();\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-circle.ts","import EventReturn from '../../features/events/event-return';\r\nimport GeoJsonOptions from '../../features/geojson/geojson-options';\r\n\r\nexport default class LeafletGeoJson {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public loadGEOJson(data: object, options: GeoJsonOptions, eventClick: any) {\r\n const self = this;\r\n const objects = self.parseGeoJson(data, options);\r\n\r\n objects.forEach((elem) => self.map.addLayer(elem));\r\n\r\n if (self.map.options) {\r\n if (self.map.options.editable) {\r\n objects.forEach((obj) => {\r\n if (obj.enableEdit) {\r\n obj.enableEdit();\r\n }\r\n\r\n if (eventClick) {\r\n obj.on('click', (event) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private parseGeoJson(data: any, options: GeoJsonOptions) {\r\n const self = this;\r\n const parsedFeatures = [];\r\n\r\n if (Array.isArray(data.features)) {\r\n for (const feature of data.features) {\r\n parsedFeatures.push(self.parseGeoJsonToObject(feature, options));\r\n }\r\n } else {\r\n parsedFeatures.push(self.parseGeoJsonToObject(data, options));\r\n }\r\n\r\n return parsedFeatures;\r\n }\r\n\r\n private parseGeoJsonToObject(data: any, objectOptions: any) {\r\n const geometry = data.geometry;\r\n let parsedCoordinates = [];\r\n\r\n if (data.properties) {\r\n Object.assign(objectOptions, data.properties);\r\n }\r\n\r\n switch (geometry.type) {\r\n case 'Point':\r\n parsedCoordinates = geometry.coordinates.reverse();\r\n return new this.leaflet.Marker(parsedCoordinates, objectOptions);\r\n case 'Polygon':\r\n geometry.coordinates\r\n .forEach((polygon) => parsedCoordinates.push(polygon.map((elem) => elem.reverse())));\r\n return new this.leaflet.Polygon(parsedCoordinates, objectOptions);\r\n case 'LineString':\r\n parsedCoordinates = geometry.coordinates.map((elem) => elem.reverse());\r\n return new this.leaflet.Polyline(parsedCoordinates, objectOptions);\r\n default:\r\n throw new Error('Unknown object shape.');\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-geojson.ts","import { MapEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\n\r\nexport default class LeafletMap {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public resizeMap(): void {\r\n this.map.invalidateSize();\r\n }\r\n\r\n public addEventMap(eventType: MapEventType, eventFunction: any) {\r\n const self = this;\r\n\r\n switch (eventType) {\r\n case MapEventType.Click:\r\n self.map.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param);\r\n });\r\n break;\r\n case MapEventType.ZoomChanged:\r\n self.map.on('zoomend', (event: any) => {\r\n const param = new EventReturn([event.target.getCenter().lat, event.target.getCenter().lng]);\r\n eventFunction(param);\r\n });\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n public removeEventMap(eventType: MapEventType) {\r\n const self = this;\r\n switch (eventType) {\r\n case MapEventType.Click: self.map.off('click'); break;\r\n case MapEventType.ZoomChanged: self.map.off('zoomend');\r\n default: break;\r\n }\r\n }\r\n\r\n public getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n public setZoom(zoom: number) {\r\n this.map.setZoom(zoom);\r\n }\r\n\r\n public getCenter(): number[] {\r\n const center = this.map.getCenter();\r\n return [center.lat, center.lng];\r\n }\r\n\r\n public setCenter(position: number[]) {\r\n this.map.panTo(position);\r\n }\r\n\r\n public pixelsToLatLng(offsetx: number, offsety: number) {\r\n const scale = Math.pow(2, this.map.getZoom());\r\n const worldCoordinateCenter = this.leaflet.CRS.Simple.project(this.map.getCenter())\r\n const pixelOffset = new this.leaflet.Point(offsetx / scale || 0, offsety / scale || 0);\r\n\r\n const worldCoordinateNewCenter = new this.leaflet.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n\r\n const latlng = this.leaflet.CRS.Simple.unproject(worldCoordinateNewCenter);\r\n return [latlng.lat, latlng.lng];\r\n }\r\n\r\n public fitBoundsElements(markers: any, circles: any, polygons: any, polylines: any): void {\r\n const group = [];\r\n\r\n if (markers && markers.length) {\r\n markers.forEach((marker: any) => group.push(marker));\r\n }\r\n\r\n if (circles && circles.length) {\r\n circles.forEach((circle: any) => group.push(circle));\r\n }\r\n\r\n if (polygons && polygons.length) {\r\n polygons.forEach((polygon: any) => group.push(polygon));\r\n }\r\n\r\n if (polylines && polylines.length) {\r\n polylines.forEach((polyline: any) => group.push(polyline));\r\n }\r\n\r\n if (group && group.length) {\r\n const bounds = this.leaflet.featureGroup(group).getBounds();\r\n this.map.fitBounds(bounds);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-map.ts","import { MarkerEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport MarkerClustererConfig from '../../features/marker-clusterer/marker-clusterer-config';\r\nimport CircleMarkerOptions from '../../features/marker/circle-marker-options';\r\nimport MarkerAlterOptions from '../../features/marker/marker-alter-options';\r\nimport MarkerOptions from '../../features/marker/marker-options';\r\n\r\nexport default class LeafletMarkers {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n /* Markers */\r\n public drawMarker(options: MarkerOptions, eventClick: any) {\r\n const newOptions: any = {\r\n draggable: options.draggable\r\n };\r\n\r\n if (options.icon) {\r\n newOptions.icon = new this.leaflet.Icon({\r\n iconUrl: options.icon.url\r\n });\r\n\r\n const size = options.icon.size;\r\n if (size) {\r\n newOptions.icon.options.iconSize = size;\r\n newOptions.icon.options.iconAnchor = [size[0] / 2, size[1]];\r\n newOptions.icon.options.popupAnchor = [0, -size[1]];\r\n }\r\n }\r\n\r\n const marker = new this.leaflet.Marker(options.latlng, newOptions);\r\n\r\n if (options.object) {\r\n marker.object = options.object;\r\n }\r\n\r\n if (eventClick) {\r\n marker.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap && !options.addClusterer) {\r\n marker.addTo(this.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const group = new this.leaflet.FeatureGroup([marker]);\r\n this.map.fitBounds(group.getBounds());\r\n }\r\n\r\n return marker;\r\n }\r\n\r\n public drawCircleMarker(options: CircleMarkerOptions, eventClick: any) {\r\n const self = this;\r\n const marker = new this.leaflet.circleMarker(options.latlng, options.style);\r\n\r\n if (eventClick) {\r\n marker.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n marker.addTo(self.map);\r\n }\r\n\r\n if (options.fitBounds) {\r\n const group = new this.leaflet.FeatureGroup([marker]);\r\n self.map.fitBounds(group.getBounds());\r\n }\r\n\r\n marker.object = options.object;\r\n return marker;\r\n }\r\n\r\n public toggleMarkers(markers: any[], show: boolean, markerClusterer?: any) {\r\n const self = this;\r\n markers.forEach((marker) => {\r\n if (markerClusterer) {\r\n if (show) {\r\n self.addMarkerOnClusterer(marker, markerClusterer);\r\n } else {\r\n self.removeMarkerFromClusterer(marker, markerClusterer);\r\n }\r\n } else {\r\n if (show) {\r\n self.map.addLayer(marker);\r\n } else {\r\n self.map.removeLayer(marker);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public alterMarkerOptions(markers: any[], options: MarkerAlterOptions) {\r\n markers.forEach((marker) => {\r\n if (marker.type === 'circle' && options.style) {\r\n const style = {\r\n fillColor: options.style.fillColor ? options.style.fillColor : marker.options.fillColor,\r\n fillOpacity: options.style.fillOpacity ? options.style.fillOpacity : marker.options.fillOpacity,\r\n radius: options.style.radius ? options.style.radius : marker.options.radius,\r\n strokeColor: options.style.color ? options.style.color : marker.options.strokeColor,\r\n strokeWeight: options.style.weight ? options.style.weight : marker.options.strokeWeight\r\n };\r\n\r\n marker.setStyle(style);\r\n }\r\n\r\n if (options.icon) {\r\n const icon = new this.leaflet.icon({ iconUrl: options.icon.url });\r\n const size = options.icon.size;\r\n\r\n if (size) {\r\n icon.options.iconSize = size;\r\n icon.options.iconAnchor = [size[0] / 2, size[1]];\r\n }\r\n\r\n marker.setIcon(icon);\r\n }\r\n\r\n if (options.latlng) {\r\n marker.setLatLng(options.latlng);\r\n }\r\n });\r\n }\r\n\r\n public alterMarkerPosition(markers: any[], position: number[], addTransition: boolean) {\r\n markers.forEach((marker) => {\r\n if (addTransition) {\r\n this.moveTransitionMarker(position, marker);\r\n } else {\r\n marker.setLatLng(position);\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPositions(markers: any[]) {\r\n const group = new this.leaflet.featureGroup(markers);\r\n this.map.fitBounds(group.getBounds());\r\n }\r\n\r\n public isMarkerOnMap(marker: any): boolean {\r\n return this.map.hasLayer(marker);\r\n }\r\n\r\n public setCenterMarker(marker: any) {\r\n this.map.panTo(marker.getLatLng());\r\n }\r\n\r\n public addMarkerEvent(markers: any, eventType: MarkerEventType, eventFunction: any) {\r\n markers.forEach((marker: any) => {\r\n switch (eventType) {\r\n case MarkerEventType.Click:\r\n marker.on('click', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.RightClick:\r\n marker.on('contextmenu', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n marker.on('dragend', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOver:\r\n marker.on('mouseover', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.MouseOut:\r\n marker.on('mouseout', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n marker.on('dragstart', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n eventFunction(param, marker.object);\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removeMarkerEvent(markers: any, event: MarkerEventType): void {\r\n markers.forEach((marker: any) => {\r\n switch (event) {\r\n case MarkerEventType.Click:\r\n marker.off('click');\r\n break;\r\n case MarkerEventType.RightClick:\r\n marker.off('contextmenu');\r\n break;\r\n case MarkerEventType.AfterDrag:\r\n marker.off('dragend');\r\n break;\r\n case MarkerEventType.MouseOver:\r\n marker.off('mouseover');\r\n break;\r\n case MarkerEventType.MouseOut:\r\n marker.off('mouseout');\r\n break;\r\n case MarkerEventType.BeforeDrag:\r\n marker.off('dragstart');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /* Marker Clusterer */\r\n public addMarkerClusterer(config: MarkerClustererConfig): any {\r\n const layer = this.leaflet.markerClusterGroup({\r\n maxClusterRadius: 50,\r\n showCoverageOnHover: false,\r\n zoomToBoundsOnClick: config.clusterZoomOnClick\r\n });\r\n\r\n this.map.addLayer(layer);\r\n return layer;\r\n }\r\n\r\n public alterMarkerClustererConfig(markerClusterer: any, config: MarkerClustererConfig): void {\r\n markerClusterer.options.zoomToBoundsOnClick = config.clusterZoomOnClick;\r\n }\r\n\r\n public refreshClusterer(markerClusterer: any): void {\r\n markerClusterer.refreshClusters();\r\n }\r\n\r\n public addMarkerOnClusterer(marker: any, markerClusterer: any): void {\r\n markerClusterer.addLayer(marker);\r\n }\r\n\r\n public removeMarkerFromClusterer(marker: any, markerClusterer: any): void {\r\n markerClusterer.removeLayer(marker);\r\n }\r\n\r\n public clearMarkersClusterer(markerClusterer: any): void {\r\n markerClusterer.clearLayers();\r\n }\r\n\r\n public countMarkersOnCluster(markerClusterer: any): number {\r\n return markerClusterer.getLayers().length;\r\n }\r\n\r\n private moveTransitionMarker(position: any, marker: any) {\r\n const numDeltas = 5;\r\n const reference = {\r\n deltaLat: (position[0] - marker.getLatLng().lat) / numDeltas,\r\n deltaLng: (position[1] - marker.getLatLng().lng) / numDeltas,\r\n i: 0,\r\n position: [marker.getLatLng().lat, marker.getLatLng().lng],\r\n lastPosition: position\r\n };\r\n\r\n this.moveMarker(marker, reference, numDeltas);\r\n }\r\n\r\n private moveMarker(marker: any, reference: any, numDeltas: number) {\r\n reference.position[0] += reference.deltaLat;\r\n reference.position[1] += reference.deltaLng;\r\n marker.setLatLng(reference.position);\r\n if (reference.i < numDeltas) {\r\n reference.i++;\r\n setTimeout(() => this.moveMarker(marker, reference, numDeltas), 20);\r\n } else if (reference.i === numDeltas) {\r\n setTimeout(() => marker.setLatLng(reference.lastPosition), 20);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-markers.ts","import EventReturn from '../../features/events/event-return';\r\nimport OverlayOptions from '../../features/overlay/overlay-options';\r\nimport LeafletPolygons from './leaflet-polygons';\r\n\r\nexport default class LeafletOverlay {\r\n private map = null;\r\n private leaflet = null;\r\n private leafletPolygons: LeafletPolygons;\r\n\r\n constructor(map: any, leaflet: any, leafletPolygons: LeafletPolygons) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n this.leafletPolygons = leafletPolygons;\r\n }\r\n\r\n public drawOverlay(options: OverlayOptions, polygons: any) {\r\n const html: string = options.divElement.outerHTML;\r\n const myIcon = new this.leaflet.DivIcon({ html });\r\n\r\n const position = polygons && polygons.length > 0 ?\r\n this.leafletPolygons.getBoundsPolygons(polygons).getCenter() : options.position;\r\n\r\n const overlay = new this.leaflet.Marker(position, { icon: myIcon, draggable: options.draggable });\r\n\r\n if (options.addToMap) {\r\n overlay.addTo(this.map);\r\n }\r\n\r\n overlay.object = options.object;\r\n\r\n if (options.draggable && options.afterEventDragHandler) {\r\n overlay.on('dragend', (event: any) => {\r\n const param = new EventReturn([event.target.getLatLng().lat, event.target.getLatLng().lng]);\r\n options.afterEventDragHandler(param, options.object);\r\n });\r\n }\r\n\r\n return overlay;\r\n }\r\n\r\n public toggleOverlay(overlays: any[], show: boolean) {\r\n const self = this;\r\n overlays.forEach((overlay) => show ? self.map.addLayer(overlay) : self.map.removeLayer(overlay));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-overlay.ts","import { PolygonEventType } from '../../dto/event-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport PolygonAlterOptions from '../../features/polygons/polygon-alter-options';\r\nimport PolygonOptions from '../../features/polygons/polygon-options';\r\n\r\nexport default class LeafletPolygons {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public drawPolygon(options: PolygonOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n color: options.color || '#000',\r\n draggable: options.draggable,\r\n fillColor: options.fillColor || '#fff',\r\n fillOpacity: options.fillOpacity || 1,\r\n opacity: options.opacity || 1,\r\n weight: options.weight || 2\r\n };\r\n const polygon = new this.leaflet.Polygon(options.path, newOptions);\r\n\r\n if (eventClick) {\r\n polygon.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polygon.addTo(self.map);\r\n\r\n if (options.editable) {\r\n polygon.enableEdit();\r\n }\r\n }\r\n\r\n if (options.object) {\r\n polygon.object = options.object;\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(polygon.getBounds());\r\n }\r\n\r\n return polygon;\r\n }\r\n\r\n public togglePolygons(polygons: any[], show: boolean) {\r\n const self = this;\r\n polygons.forEach((polygon) => show ? self.map.addLayer(polygon) : self.map.removeLayer(polygon));\r\n }\r\n\r\n public alterPolygonOptions(polygons: any[], options: PolygonAlterOptions) {\r\n polygons.forEach((polygon) => {\r\n const style = {\r\n color: options.color ? options.color : polygon.options.color,\r\n draggable: options.draggable ? options.draggable : polygon.options.draggable,\r\n fillColor: options.fillColor ? options.fillColor : polygon.options.fillColor,\r\n fillOpacity: options.fillOpacity ? options.fillOpacity : polygon.options.fillOpacity,\r\n opacity: options.opacity ? options.opacity : polygon.options.opacity,\r\n weight: options.weight ? options.weight : polygon.options.weight\r\n };\r\n\r\n if (options.path) {\r\n polygon.setLatLngs(options.path);\r\n }\r\n\r\n polygon.setStyle(style);\r\n\r\n if (options.editable !== null && options.editable !== undefined) {\r\n polygon.disableEdit();\r\n\r\n if (options.editable) {\r\n polygon.enableEdit();\r\n }\r\n }\r\n\r\n if (options.object) {\r\n polygon.object = options.object;\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPolygons(polygons: any): void {\r\n this.map.fitBounds(this.getBoundsPolygons(polygons));\r\n }\r\n\r\n public setCenterPolygons(polygons: any): void {\r\n this.map.panTo(this.getBoundsPolygons(polygons).getCenter());\r\n }\r\n\r\n public isPolygonOnMap(polygon: any): boolean {\r\n return this.map.hasLayer(polygon);\r\n }\r\n\r\n public getPolygonPath(polygon: any): number[][] {\r\n return polygon.getLatLngs()[0].map((x: any) => [x.lat, x.lng]);\r\n }\r\n\r\n public addPolygonEvent(polygons: any, eventType: PolygonEventType, eventFunction: any): void {\r\n const self = this;\r\n polygons.forEach((polygon: any) => {\r\n switch (eventType) {\r\n case PolygonEventType.SetAt:\r\n this.addPolygonEventMove(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.InsertAt:\r\n this.addPolygonEventInsertAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n this.addPolygonEventRemoveAt(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n this.addPolygonEventDragPolygon(polygon, eventFunction);\r\n break;\r\n case PolygonEventType.Click:\r\n this.addPolygonEventClick(polygon, eventFunction, self);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolygonEvent(polygons: any, event: PolygonEventType): void {\r\n polygons.forEach((polygon: any) => {\r\n switch (event) {\r\n case PolygonEventType.SetAt:\r\n polygon.off('editable:vertex:dragstart');\r\n break;\r\n case PolygonEventType.InsertAt:\r\n polygon.off('editable:vertex:new');\r\n break;\r\n case PolygonEventType.RemoveAt:\r\n polygon.off('editable:vertex:clicked');\r\n polygon.off('editable:vertex:deleted');\r\n break;\r\n case PolygonEventType.DragPolygon:\r\n polygon.off('dragend');\r\n break;\r\n case PolygonEventType.Click:\r\n polygon.off('click');\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public getBoundsPolygons(polygons) {\r\n const group = new this.leaflet.FeatureGroup(polygons);\r\n return group.getBounds();\r\n }\r\n\r\n private addPolygonEventMove(polygon: any, eventFunction: any) {\r\n polygon.on('editable:vertex:dragstart', (eventStart: any) => {\r\n const lastPosition = new EventReturn([eventStart.vertex.latlng.lat, eventStart.vertex.latlng.lng]);\r\n\r\n polygon.on('editable:vertex:dragend', (eventEnd: any) => {\r\n const newPosition = new EventReturn([eventEnd.vertex.latlng.lat, eventEnd.vertex.latlng.lng]);\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(newPosition, lastPosition, eventEnd.target.object, eventEnd.vertex.getIndex(), path[0]);\r\n polygon.off('editable:vertex:dragend');\r\n });\r\n });\r\n }\r\n\r\n private addPolygonEventInsertAt(polygon: any, eventFunction: any) {\r\n polygon.on('editable:vertex:new', (eventNew: any) => {\r\n const latlngs = eventNew.vertex.latlngs;\r\n const previous = latlngs[latlngs.findIndex((x: any) => x === eventNew.vertex.latlng) - 1];\r\n\r\n if (previous) {\r\n const previousPoint = new EventReturn([previous.lat, previous.lng]);\r\n\r\n polygon.on('editable:vertex:dragend', (event: any) => {\r\n const newPoint = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(newPoint, previousPoint, event.target.object, event.vertex.getIndex(), path[0]);\r\n polygon.off('editable:vertex:dragend');\r\n });\r\n }\r\n });\r\n }\r\n\r\n private addPolygonEventRemoveAt(polygon: any, eventFunction: any) {\r\n polygon.on('editable:vertex:deleted', (event: any) => {\r\n const param = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(param, path[0], event.target.object);\r\n });\r\n }\r\n\r\n private addPolygonEventDragPolygon(polygon: any, eventFunction: any) {\r\n polygon.on('dragend', (event: any) => {\r\n const path = polygon.getLatLngs().map((x: any) => {\r\n if (Array.isArray(x[0])) {\r\n return x.map((y: any) => y.map(z => new EventReturn([z.lat, z.lng])));\r\n } else {\r\n return [x.map((y: any) => new EventReturn([y.lat, y.lng]))];\r\n }\r\n });\r\n\r\n eventFunction(path[0], event.target.object);\r\n });\r\n }\r\n\r\n private addPolygonEventClick(polygon: any, eventFunction: any, self: any) {\r\n polygon.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-polygons.ts","import { Polyline } from 'leaflet';\r\nimport { PolylineEventType } from '../../dto/event-type';\r\nimport { PolylineType } from '../../dto/polyline-type';\r\nimport EventReturn from '../../features/events/event-return';\r\nimport NavigationOptions from '../../features/polyline/navigations-options';\r\nimport PolylineOptions from '../../features/polyline/polyline-options';\r\nimport LeafletPopup from './leaflet-popup';\r\n\r\nexport default class LeafletPolylines {\r\n private map = null;\r\n private leaflet = null;\r\n private leafletPopup: LeafletPopup;\r\n\r\n private selectedPolyline = null;\r\n private selectedPath = null;\r\n private navigateInfoWindow = null;\r\n private directionForward = false;\r\n private multiSelectionForward = false;\r\n private multiSelection = false;\r\n private navigateByPoint: boolean;\r\n private navigationOptions: NavigationOptions;\r\n\r\n constructor(map: any, leaflet: any, leafletPopup: LeafletPopup) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n this.leafletPopup = leafletPopup;\r\n }\r\n\r\n public drawPolyline(options: PolylineOptions, eventClick: any) {\r\n const self = this;\r\n const newOptions = {\r\n color: options.color || '#000000',\r\n dashArray: null,\r\n draggable: options.draggable,\r\n editable: options.editable,\r\n infowindows: options.infowindows,\r\n opacity: options.opacity || 1,\r\n weight: options.weight || 3,\r\n zIndex: options.zIndex\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.opacity = .7;\r\n newOptions.dashArray = '20,15';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const polyline = new this.leaflet.Polyline(options.path || [], newOptions);\r\n polyline.on('editable:vertex:rawclick', (e) => e.cancel());\r\n\r\n if (eventClick) {\r\n polyline.on('click', (event: any) => {\r\n self.leaflet.DomEvent.stopPropagation(event);\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n\r\n polyline.on('editable:vertex:rawclick', (event) => {\r\n event.cancel()\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventClick(param, event.target.object);\r\n });\r\n\r\n }\r\n\r\n if (options.style && options.style === PolylineType.Arrow) {\r\n const pathOptions = { fillOpacity: 1, weight: 0, color: polyline.options.color };\r\n\r\n polyline.decorator = self.leaflet.polylineDecorator(polyline, {\r\n patterns: [{\r\n offset: '20%',\r\n repeat: '90px',\r\n symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions })\r\n },\r\n { offset: '0%', symbol: self.leaflet.Symbol.arrowHead({ pathOptions, pixelSize: 20 }) },\r\n { offset: '100%', symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) }]\r\n });\r\n }\r\n\r\n if (options.addToMap) {\r\n polyline.addTo(self.map);\r\n if (polyline.decorator) { polyline.decorator.addTo(self.map); }\r\n if (options.editable) { polyline.enableEdit(); }\r\n }\r\n\r\n if (options.object) {\r\n polyline.object = options.object;\r\n }\r\n\r\n if (options.fitBounds) {\r\n self.map.fitBounds(polyline.getBounds());\r\n }\r\n\r\n return polyline;\r\n }\r\n\r\n public drawPolylineWithNavigation(options: PolylineOptions, eventClick?: any) {\r\n const polyline = this.drawPolyline(options, null);\r\n\r\n polyline.navigationHandlerClick = eventClick;\r\n this.navigationOptions = options.navigateOptions;\r\n this.navigateByPoint = this.navigationOptions ? this.navigationOptions.navigateByPoint : true;\r\n this.addNavigation(polyline);\r\n return polyline;\r\n }\r\n\r\n public togglePolylines(polylines: any, show: boolean) {\r\n const self = this;\r\n polylines.forEach((polyline: any) => {\r\n if (show) {\r\n self.map.addLayer(polyline);\r\n if (polyline.options.editable) {\r\n polyline.enableEdit();\r\n }\r\n if (polyline.decorator) { self.map.addLayer(polyline.decorator); }\r\n } else {\r\n self.map.removeLayer(polyline);\r\n if (polyline.options.editable) {\r\n polyline.disableEdit();\r\n }\r\n if (polyline.decorator) { self.map.removeLayer(polyline.decorator); }\r\n }\r\n });\r\n }\r\n\r\n public alterPolylineOptions(polylines: any, options: PolylineOptions) {\r\n const self = this;\r\n\r\n polylines.forEach((polyline: any) => {\r\n const style: any = {\r\n color: options.color ? options.color : polyline.options.color,\r\n draggable: options.draggable ? options.draggable : polyline.options.draggable,\r\n opacity: options.opacity ? options.opacity : polyline.options.opacity,\r\n weight: options.weight ? options.weight : polyline.options.weight,\r\n zIndex: options.zIndex ? options.zIndex : polyline.options.zIndex\r\n };\r\n\r\n if (options.path) {\r\n polyline.setLatLngs(options.path);\r\n }\r\n\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n style.dashArray = '20,15';\r\n break;\r\n case PolylineType.Arrow:\r\n const pathOptions = { fillOpacity: 1, weight: 0, color: style.color };\r\n\r\n if (polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n }\r\n\r\n polyline.decorator = self.leaflet.polylineDecorator(polyline, {\r\n patterns: [{\r\n offset: '20%',\r\n repeat: '90px',\r\n symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions })\r\n },\r\n { offset: '0%', symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) },\r\n { offset: '100%', symbol: self.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) }]\r\n });\r\n\r\n if (self.map.hasLayer(polyline)) {\r\n polyline.decorator.addTo(self.map);\r\n }\r\n break;\r\n default:\r\n if (polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n polyline.decorator = null;\r\n }\r\n break;\r\n }\r\n\r\n polyline.setStyle(style);\r\n\r\n if (options.object) {\r\n polyline.object = options.object;\r\n }\r\n\r\n if (options.editable) {\r\n polyline.disableEdit();\r\n polyline.enableEdit();\r\n }\r\n });\r\n }\r\n\r\n public fitBoundsPolylines(polylines: any) {\r\n const self = this;\r\n self.map.fitBounds(self.getBoundsPolylines(polylines));\r\n }\r\n\r\n public isPolylineOnMap(polyline: any): boolean {\r\n return this.map.hasLayer(polyline);\r\n }\r\n\r\n public addPolylinePath(polylines: any, position: number[]) {\r\n polylines.forEach((polyline: any) => {\r\n const path = polyline.getLatLngs();\r\n\r\n path.push(new this.leaflet.LatLng(position[0], position[1]));\r\n polyline.setLatLngs(path);\r\n\r\n if (polyline.editEnabled && polyline.editEnabled()) {\r\n polyline.disableEdit();\r\n polyline.enableEdit();\r\n }\r\n });\r\n }\r\n\r\n public getPolylinePath(polyline: any): number[][] {\r\n return polyline.getLatLngs().map((x: any) => [x.lat, x.lng]);\r\n }\r\n\r\n public removePolylineHighlight() {\r\n const self = this;\r\n\r\n if (self.selectedPath) {\r\n if (this.selectedPath.decorator) {\r\n this.map.removeLayer(this.selectedPath.decorator);\r\n }\r\n\r\n this.map.removeLayer(self.selectedPath);\r\n self.selectedPath = null;\r\n }\r\n\r\n if (self.navigateInfoWindow) {\r\n self.navigateInfoWindow.remove();\r\n }\r\n\r\n document.onkeyup = null;\r\n document.onkeydown = null;\r\n }\r\n\r\n public addPolylineEvent(polylines: any, eventType: PolylineEventType, eventFunction: any) {\r\n polylines.forEach((polyline: any) => {\r\n switch (eventType) {\r\n case PolylineEventType.SetAt:\r\n this.addPolylineEventMove(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.RightClick:\r\n this.addPolylineEventRightClick(polyline, eventFunction)\r\n break;\r\n case PolylineEventType.InsertAt:\r\n this.addPolylineEventInsertAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n this.addPolylineEventRemoveAt(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOver:\r\n this.addPolylineEventMouseOver(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.MouseOut:\r\n this.addPolylineEventMouseOut(polyline, eventFunction);\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n this.addPolylineEventDragPolyline(polyline, eventFunction);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public removePolylineEvent(polylines: any, event: PolylineEventType) {\r\n polylines.forEach((polyline: any) => {\r\n switch (event) {\r\n case PolylineEventType.SetAt:\r\n polyline.off('editable:vertex:dragstart');\r\n break;\r\n case PolylineEventType.RightClick:\r\n polyline.off('contextmenu');\r\n polyline.off('editable:vertex:contextmenu');\r\n break;\r\n case PolylineEventType.InsertAt:\r\n polyline.off('editable:vertex:new');\r\n break;\r\n case PolylineEventType.RemoveAt:\r\n polyline.off('editable:vertex:deleted');\r\n break;\r\n case PolylineEventType.DragPolyline:\r\n polyline.off('dragend');\r\n break;\r\n case PolylineEventType.MouseOver:\r\n polyline.off('mouseover');\r\n break;\r\n case PolylineEventType.MouseOut:\r\n polyline.off('mouseout');\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public setIndexPolylineHighlight(polyline: any, index: number) {\r\n this.directionForward = false;\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n document.onkeydown = this.onKeyUp.bind(this);\r\n } else {\r\n document.onkeyup = this.onKeyUp.bind(this);\r\n }\r\n\r\n }\r\n\r\n public getObjectPolyline(polyline: any): object {\r\n return polyline.object;\r\n }\r\n\r\n public getObjectPolylineHighlight(): object {\r\n if (this.selectedPath) {\r\n return this.selectedPath.object;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public addPolylineHighlightEvent(eventType: PolylineEventType, eventFunction: any) {\r\n if (this.selectedPolyline) {\r\n this.addPolylineEvent([this.selectedPath], eventType, eventFunction);\r\n }\r\n }\r\n\r\n public getPolylineHighlightIndex() {\r\n if (this.selectedPath) {\r\n return [this.selectedPath.initialIdx, this.selectedPath.finalIdx];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /* Private methods */\r\n private addNavigation(polyline: any) {\r\n polyline.clearAllEventListeners();\r\n polyline.on('click', this.onClickPolyline.bind(this, polyline));\r\n }\r\n\r\n private onClickPolyline(polyline: any, event: any) {\r\n const index = this.checkIdx(polyline, event.latlng);\r\n\r\n polyline.initialIdx = index;\r\n polyline.finalIdx = index + 1;\r\n\r\n this.moveSelectedPath(polyline, this.navigationOptions);\r\n this.selectedPolyline = polyline;\r\n\r\n if (this.navigationOptions.navegateOnKeyPress) {\r\n document.onkeydown = this.onKeyUp.bind(this);\r\n } else {\r\n document.onkeyup = this.onKeyUp.bind(this);\r\n }\r\n\r\n if (polyline.navigationHandlerClick) {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n polyline.navigationHandlerClick(param, event.target.object);\r\n }\r\n }\r\n\r\n private onKeyUp(event: any) {\r\n const self = this;\r\n\r\n if (self.selectedPath) {\r\n if (event.ctrlKey) {\r\n console.warn('Deprecated: CTRL is not needed in navigation anymore');\r\n }\r\n\r\n switch (event.which ? event.which : event.keyCode) {\r\n case 38: case 39:\r\n // up arrow or right arrow\r\n self.moveFowards(event.shiftKey);\r\n break;\r\n case 37: case 40:\r\n // left arrow or down arrow\r\n self.moveBackwards(event.shiftKey);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private moveFowards(multiselection: boolean) {\r\n const polyline = this.selectedPolyline;\r\n\r\n if ((!this.navigateByPoint || this.directionForward) && polyline.finalIdx < polyline.getLatLngs().length - 1) {\r\n this.navigateFoward(multiselection, polyline);\r\n }\r\n this.directionForward = true;\r\n this.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateFoward(multiSelection: boolean, polyline: any) {\r\n if (!multiSelection) {\r\n polyline.finalIdx++;\r\n polyline.initialIdx = this.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n this.multiSelection = false;\r\n } else {\r\n this.multiSelection = true;\r\n if (this.multiSelectionForward) {\r\n polyline.finalIdx++;\r\n }\r\n this.multiSelectionForward = true;\r\n }\r\n }\r\n\r\n private moveBackwards(multiSelection: boolean) {\r\n const polyline = this.selectedPolyline;\r\n\r\n if ((!this.navigateByPoint || !this.directionForward) && polyline.initialIdx > 0) {\r\n this.navigateBackward(multiSelection, polyline);\r\n }\r\n this.directionForward = false;\r\n this.moveSelectedPath(polyline, null);\r\n }\r\n\r\n private navigateBackward(multiSelection: boolean, polyline: any) {\r\n const self = this;\r\n if (!multiSelection) {\r\n polyline.initialIdx--;\r\n polyline.finalIdx = !self.multiSelection ? polyline.finalIdx - 1 : polyline.initialIdx + 1;\r\n self.multiSelection = false;\r\n } else {\r\n self.multiSelection = true;\r\n if (!self.multiSelectionForward) {\r\n polyline.initialIdx--;\r\n }\r\n self.multiSelectionForward = false;\r\n }\r\n }\r\n\r\n private moveSelectedPath(polyline: any, options: NavigationOptions) {\r\n const self = this;\r\n const pathSelected = polyline.getLatLngs().map((x: any) => [x.lat, x.lng])\r\n .slice(polyline.initialIdx, polyline.finalIdx + 1);\r\n\r\n if (self.selectedPath) {\r\n self.selectedPath.setLatLngs(pathSelected);\r\n this.selectedPath.object = polyline.object;\r\n } else {\r\n this.addNewSelectedPath(pathSelected, options, polyline.object);\r\n this.selectedPath.addTo(this.map);\r\n }\r\n\r\n if (this.selectedPath.decorator) {\r\n this.map.removeLayer(this.selectedPath.decorator);\r\n this.setArrowSelectedPath();\r\n }\r\n\r\n if ((options && options.editable) ||\r\n (this.selectedPath.editEnabled && this.selectedPath.editEnabled())) {\r\n this.selectedPath.disableEdit();\r\n this.selectedPath.enableEdit();\r\n }\r\n\r\n this.selectedPath.initialIdx = polyline.initialIdx;\r\n this.selectedPath.finalIdx = polyline.finalIdx;\r\n\r\n let idx = self.directionForward ? polyline.finalIdx : polyline.initialIdx;\r\n if (!this.navigateByPoint) {\r\n idx = polyline.finalIdx > polyline.initialIdx ? polyline.finalIdx : polyline.initialIdx;\r\n }\r\n\r\n const infowindow = polyline.options.infowindows ? polyline.options.infowindows[idx] : null;\r\n if (infowindow) {\r\n const point = polyline.getLatLngs()[idx];\r\n\r\n if (self.navigateInfoWindow) {\r\n self.leafletPopup.alterPopup(self.navigateInfoWindow, {\r\n content: infowindow,\r\n latlng: [point.lat, point.lng]\r\n });\r\n } else {\r\n self.navigateInfoWindow = self.leafletPopup.drawPopup({\r\n content: infowindow,\r\n latlng: [point.lat, point.lng]\r\n });\r\n }\r\n }\r\n }\r\n\r\n private setArrowSelectedPath() {\r\n const pathOptions = { fillOpacity: 1, weight: 0, color: this.selectedPath.options.color };\r\n this.selectedPath.decorator = this.leaflet.polylineDecorator(this.selectedPath, {\r\n patterns: [{ offset: '100%', symbol: this.leaflet.Symbol.arrowHead({ pixelSize: 20, pathOptions }) }]\r\n });\r\n\r\n this.selectedPath.decorator.addTo(this.map);\r\n }\r\n\r\n private addNewSelectedPath(pathSelected, options, object) {\r\n const newOptions: any = {\r\n color: options && options.color || '#FF0000',\r\n draggable: false,\r\n editable: options.editable,\r\n opacity: options && options.opacity || 1,\r\n weight: options && options.weight || 10,\r\n zIndex: 9999\r\n };\r\n\r\n if (options.style !== null) {\r\n switch (options.style) {\r\n case PolylineType.Dotted:\r\n console.warn('PolylineType.Dotted is deprecated, instead use PolylineType.Dashed.');\r\n case PolylineType.Dashed:\r\n newOptions.opacity = .7;\r\n newOptions.dashArray = '20,15';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n this.selectedPath = new this.leaflet.Polyline(pathSelected, newOptions);\r\n this.selectedPath.on('editable:vertex:rawclick', (e: any) => e.cancel());\r\n\r\n if (options.style && options.style === PolylineType.Arrow) {\r\n this.setArrowSelectedPath();\r\n }\r\n\r\n this.selectedPath.object = object;\r\n this.selectedPath.highlight = true;\r\n }\r\n\r\n private checkIdx(polyline: any, point: any) {\r\n const self = this;\r\n const path = polyline.getLatLngs();\r\n let distance = 0;\r\n let minDistance = Number.MAX_VALUE;\r\n let returnValue = -1;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n distance = self.distanceToLine(path[i], path[i + 1], point);\r\n\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n returnValue = i;\r\n }\r\n }\r\n return returnValue;\r\n }\r\n\r\n private distanceToLine(pt1: any, pt2: any, pt: any) {\r\n const self = this;\r\n const deltaX = pt2.lng - pt1.lng;\r\n const deltaY = pt2.lat - pt1.lat;\r\n let incIntersect = (pt.lng - pt1.lng) * deltaX;\r\n const deltaSum = (deltaX * deltaX) + (deltaY * deltaY);\r\n\r\n incIntersect += (pt.lat - pt1.lat) * deltaY;\r\n if (deltaSum > 0) {\r\n incIntersect /= deltaSum;\r\n } else {\r\n incIntersect = -1;\r\n }\r\n\r\n // The intersection occurs outside the line segment, 'before' pt1.\r\n if (incIntersect < 0) {\r\n return self.kmTo(pt, pt1);\r\n } else if (incIntersect > 1) {\r\n return self.kmTo(pt, pt2);\r\n }\r\n\r\n // Intersection point calculation.\r\n const intersect = new this.leaflet.LatLng(pt1.lat + incIntersect * deltaY, pt1.lng + incIntersect * deltaX);\r\n\r\n return self.kmTo(pt, intersect);\r\n }\r\n\r\n private kmTo(pt1: any, pt2: any) {\r\n const e = Math;\r\n const ra = e.PI / 180;\r\n const b = pt1.lat * ra;\r\n const c = pt2.lat * ra;\r\n const d = b - c;\r\n const g = pt1.lng * ra - pt2.lng * ra;\r\n const f = 2 * e.asin(e.sqrt(e.pow(e.sin(d / 2), 2) + e.cos(b) * e.cos(c) * e.pow(e.sin(g / 2), 2)));\r\n\r\n return f * 6378.137 * 1000;\r\n }\r\n\r\n private getBoundsPolylines(polylines: any) {\r\n const group = new this.leaflet.FeatureGroup(polylines);\r\n return group.getBounds();\r\n }\r\n\r\n private addPolylineEventMove(polyline: any, eventFunction: any) {\r\n const self = this;\r\n polyline.on('editable:vertex:dragstart', (eventStart: any) => {\r\n const lastPosition = new EventReturn([eventStart.vertex.latlng.lat, eventStart.vertex.latlng.lng]);\r\n\r\n polyline.on('editable:vertex:dragend', (eventEnd: any) => {\r\n if (polyline.highlight && polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n self.setArrowSelectedPath();\r\n }\r\n\r\n const newPosition = new EventReturn([eventEnd.vertex.latlng.lat, eventEnd.vertex.latlng.lng]);\r\n eventFunction(newPosition, lastPosition, eventEnd.target.object, eventEnd.vertex.getIndex(), polyline.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng])));\r\n polyline.off('editable:vertex:dragend');\r\n });\r\n });\r\n }\r\n\r\n private addPolylineEventInsertAt(polyline: any, eventFunction: any) {\r\n const self = this;\r\n polyline.on('editable:vertex:new', (eventNew: any) => {\r\n const latlngs = eventNew.vertex.latlngs;\r\n const previous = latlngs[latlngs.findIndex((x: any) => x === eventNew.vertex.latlng) - 1];\r\n const previousPoint = new EventReturn([previous.lat, previous.lng]);\r\n\r\n polyline.on('editable:vertex:dragend', (event: any) => {\r\n if (polyline.highlight && polyline.decorator) {\r\n self.map.removeLayer(polyline.decorator);\r\n self.setArrowSelectedPath();\r\n }\r\n\r\n const newPoint = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n eventFunction(newPoint, previousPoint, event.target.object, event.vertex.getIndex(), polyline.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng])));\r\n polyline.off('editable:vertex:dragend');\r\n });\r\n });\r\n }\r\n\r\n private addPolylineEventRemoveAt(polyline: any, eventFunction: any) {\r\n polyline.on('editable:vertex:deleted', (event: any) => {\r\n const param = new EventReturn([event.vertex.latlng.lat, event.vertex.latlng.lng]);\r\n eventFunction(param, event.target.object, polyline.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng])));\r\n });\r\n }\r\n\r\n private addPolylineEventRightClick(polyline: any, eventFunction: any) {\r\n polyline.on('contextmenu', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, polyline.object);\r\n });\r\n polyline.on('editable:vertex:contextmenu', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, polyline.object);\r\n });\r\n }\r\n\r\n private addPolylineEventMouseOver(polyline: any, eventFunction: any) {\r\n polyline.on('mouseover', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n\r\n private addPolylineEventMouseOut(polyline: any, eventFunction: any) {\r\n polyline.on('mouseout', (event: any) => {\r\n const param = new EventReturn([event.latlng.lat, event.latlng.lng]);\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n\r\n private addPolylineEventDragPolyline(polyline: any, eventFunction: any) {\r\n polyline.on('dragend', (event: any) => {\r\n const param = event.target.getLatLngs().map((x: any) => new EventReturn([x.lat, x.lng]));\r\n eventFunction(param, event.target.object);\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-polylines.ts","import PopupOptions from '../../features/popup/popup-options';\r\n\r\nexport default class LeafletPopup {\r\n private map = null;\r\n private leaflet = null;\r\n\r\n constructor(map: any, leaflet: any) {\r\n this.map = map;\r\n this.leaflet = leaflet;\r\n }\r\n\r\n public drawPopup(options: PopupOptions, marker?: any) {\r\n const self = this;\r\n let popup = null;\r\n\r\n if (!marker) {\r\n popup = new this.leaflet.Popup();\r\n popup.setLatLng(options.latlng);\r\n popup.setContent(options.content);\r\n popup.openOn(self.map);\r\n\r\n } else {\r\n popup = self.drawPopupOnMarker(marker, options);\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n return popup;\r\n }\r\n\r\n public alterPopup(popup: any, options: PopupOptions, marker?: any) {\r\n const self = this;\r\n\r\n if (marker && !marker.getPopup()) {\r\n popup = self.drawPopup(options, marker);\r\n } else {\r\n self.alterPopupContent(popup, options, marker);\r\n\r\n if (!popup.isOpen()) {\r\n if (!marker) {\r\n popup.openOn(self.map);\r\n } else if (options.notCalledByMap) {\r\n marker.openPopup();\r\n }\r\n }\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n\r\n return popup;\r\n }\r\n\r\n public alterPopupContent(popup: any, options: PopupOptions, marker?: any) {\r\n if (marker) {\r\n popup = marker._popup;\r\n }\r\n\r\n if (popup) {\r\n if (options.content) {\r\n popup.setContent(options.content);\r\n }\r\n\r\n if (options.latlng) {\r\n popup.setLatLng(options.latlng);\r\n }\r\n }\r\n\r\n if (options.object) {\r\n popup.object = options.object;\r\n }\r\n }\r\n\r\n public closePopup(popup: any) {\r\n popup.remove();\r\n }\r\n\r\n private drawPopupOnMarker(marker: any, options: PopupOptions) {\r\n marker.bindPopup(options.content);\r\n const popup = marker.getPopup();\r\n\r\n marker.openPopup();\r\n return popup;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/apis/leaflet/leaflet-popup.ts","export default class CircleAlterOptions {\r\n public center: number[];\r\n public radius: number;\r\n public weight: number;\r\n public fillOpacity?: number;\r\n public fillColor?: string;\r\n public color?: string;\r\n public opacity?: number;\r\n public editable?: boolean;\r\n public draggable?: boolean;\r\n\r\n constructor(center: number[], radius: number, weight: number, fillOpacity?: number,\r\n fillColor?: string, color?: string, opacity?: number) {\r\n\r\n this.center = center;\r\n this.radius = radius;\r\n this.weight = weight;\r\n this.fillOpacity = fillOpacity;\r\n this.fillColor = fillColor;\r\n this.color = color;\r\n this.opacity = opacity;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/circle/circle-alter-options.ts","export default class CircleOptions {\r\n public center: number[];\r\n public radius: number;\r\n public weight: number;\r\n public addToMap?: boolean;\r\n public fillOpacity?: number;\r\n public fillColor?: string;\r\n public color?: string;\r\n public opacity?: number;\r\n public draggable?: boolean;\r\n public editable?: boolean;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n\r\n constructor(center: number[], radius: number, weight: number, addToMap?: boolean, fillOpacity?: number,\r\n fillColor?: string, color?: string, opacity?: number, draggable?: boolean, editable?: boolean,\r\n fitBounds?: boolean, object?: object) {\r\n\r\n this.center = center;\r\n this.radius = radius;\r\n this.weight = weight;\r\n this.addToMap = addToMap;\r\n this.fillOpacity = fillOpacity;\r\n this.fillColor = fillColor;\r\n this.color = color;\r\n this.opacity = opacity;\r\n this.draggable = draggable;\r\n this.editable = editable;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/circle/circle-options.ts","\r\nexport default class GeoJsonOptions {\r\n public draggable?: boolean;\r\n public editable?: boolean;\r\n\r\n constructor(draggable?: boolean, editable?: boolean) {\r\n this.draggable = draggable;\r\n this.editable = editable;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/geojson/geojson-options.ts","import CircleMarkerStyle from './circle-marker-style';\r\n\r\nexport default class CircleMarkerOptions {\r\n public latlng: number[];\r\n public addToMap?: boolean;\r\n public style: CircleMarkerStyle;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n\r\n constructor(latlng: number[], style: CircleMarkerStyle, addToMap?: boolean, fitBounds?: boolean, object?: object) {\r\n this.latlng = latlng;\r\n this.addToMap = addToMap;\r\n this.style = style;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/circle-marker-options.ts","export default class CircleMarkerStyle {\r\n public radius: number;\r\n public weight?: number;\r\n public color?: string;\r\n public fillColor?: string;\r\n public fillOpacity?: number;\r\n\r\n constructor(radius: number, weight?: number, color?: string, fillColor?: string, fillOpacity?: number) {\r\n this.radius = radius;\r\n this.weight = weight;\r\n this.color = color;\r\n this.fillColor = fillColor;\r\n this.fillOpacity = fillOpacity;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/circle-marker-style.ts","import CircleMarkerStyle from './circle-marker-style';\r\nimport MarkerIcon from './marker-icon';\r\n\r\nexport default class MarkerAlterOptions {\r\n public latlng?: number[];\r\n public icon?: MarkerIcon;\r\n public style?: CircleMarkerStyle;\r\n\r\n constructor(latlng?: number[], icon?: MarkerIcon, style?: CircleMarkerStyle) {\r\n this.latlng = latlng;\r\n this.icon = icon;\r\n this.style = style;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/marker-alter-options.ts","export default class MarkerIcon {\r\n public url: string;\r\n public size?: number[];\r\n\r\n constructor(url: string, size?: number[]) {\r\n this.url = url;\r\n this.size = size;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/marker-icon.ts","import MarkerIcon from './marker-icon';\r\n\r\nexport default class MarkerOptions {\r\n public latlng: number[];\r\n public addToMap?: boolean;\r\n public draggable?: boolean;\r\n public icon?: MarkerIcon;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n public addClusterer?: boolean;\r\n\r\n constructor(latlng: number[], addToMap: boolean = false, draggable: boolean = false, icon?: MarkerIcon,\r\n fitBounds: boolean = false, object?: object, addClusterer = false) {\r\n\r\n this.latlng = latlng;\r\n this.addToMap = addToMap;\r\n this.draggable = draggable;\r\n this.icon = icon;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n this.addClusterer = addClusterer;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/marker/marker-options.ts","export default class OverlayOptions {\r\n public position: number[];\r\n public divElement: HTMLDivElement;\r\n public addToMap: boolean;\r\n public object: any;\r\n public polygon: string;\r\n public conditionPolygon: any;\r\n public draggable: boolean;\r\n public afterEventDragHandler: any;\r\n\r\n constructor(divElement: HTMLDivElement, addToMap: boolean, position?: number[], object?: any,\r\n polygon?: string, conditionPolygon?: any, draggable: boolean = false) {\r\n this.position = position;\r\n this.divElement = divElement;\r\n this.addToMap = addToMap;\r\n this.object = object;\r\n this.polygon = polygon;\r\n this.conditionPolygon = conditionPolygon;\r\n this.draggable = draggable;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/overlay/overlay-options.ts","export default class PolygonAlterOptions {\r\n public weight: number;\r\n public color?: string;\r\n public opacity?: number;\r\n public fillColor?: string;\r\n public fillOpacity?: number;\r\n public addToMap: boolean;\r\n public object: any;\r\n public path: number[][];\r\n public editable?: boolean;\r\n public draggable?: boolean;\r\n\r\n constructor(addToMap: boolean, color?: string, opacity?: number, fillColor?: string, fillOpacity?: number,\r\n weight?: number) {\r\n this.addToMap = addToMap;\r\n this.color = color;\r\n this.opacity = opacity;\r\n this.fillColor = fillColor;\r\n this.fillOpacity = fillOpacity;\r\n this.weight = weight;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polygons/polygon-alter-options.ts","export default class PolygonOptions {\r\n public path: number[][];\r\n public weight: number;\r\n public addToMap?: boolean;\r\n public color?: string;\r\n public opacity?: number;\r\n public fillColor?: string;\r\n public fillOpacity?: number;\r\n public draggable?: boolean;\r\n public editable?: boolean;\r\n public fitBounds?: boolean;\r\n public object?: object;\r\n public zIndex: number;\r\n\r\n constructor(path: number[][], weight: number, addToMap?: boolean, color?: string, opacity?: number,\r\n fillColor?: string, fillOpacity?: number, draggable?: boolean, editable?: boolean, fitBounds?: boolean,\r\n object?: object) {\r\n\r\n this.path = path;\r\n this.weight = weight;\r\n this.addToMap = addToMap;\r\n this.color = color;\r\n this.opacity = opacity;\r\n this.fillColor = fillColor;\r\n this.fillOpacity = fillOpacity;\r\n this.draggable = draggable;\r\n this.editable = editable;\r\n this.fitBounds = fitBounds;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polygons/polygon-options.ts","import { PolylineType } from '../../dto/polyline-type';\r\n\r\nexport default class NavigationOptions {\r\n public color?: string;\r\n public weight?: number;\r\n public opacity?: number;\r\n public navigateByPoint: boolean; // Set to false when you want to navigate by stretch, and not by points\r\n public style: PolylineType;\r\n public editable: boolean;\r\n public navegateOnKeyPress: boolean;\r\n\r\n constructor(color?: string, weight?: number, navigateByPoint: boolean = true, opacity = 1) {\r\n this.color = color;\r\n this.weight = weight;\r\n this.opacity = opacity;\r\n this.navigateByPoint = navigateByPoint;\r\n this.navegateOnKeyPress = false\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/polyline/navigations-options.ts","export default class PopupOptions {\r\n public latlng: number[];\r\n public content: string;\r\n public marker?: string;\r\n public conditionMarker?: any;\r\n public notCalledByMap?: boolean; /* Property to set if open is called from map event or not, only used on leaflet */\r\n public object?: object;\r\n\r\n constructor(latlng: number[], content: string, marker?: string, conditionMarker?: any,\r\n notCalledByMap?: boolean, object?: object) {\r\n this.latlng = latlng;\r\n this.content = content;\r\n this.marker = marker;\r\n this.conditionMarker = conditionMarker;\r\n this.notCalledByMap = notCalledByMap;\r\n this.object = object;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/features/popup/popup-options.ts","/**\r\n * urlBuilder\r\n *\r\n * @param {object} params\r\n * @param {string} params.base the base url\r\n * @param {array} params.libraries an array of the libraries to be requested\r\n * @param {string} params.callback the callback function\r\n *\r\n * @return {string}\r\n */\r\nexport const urlBuilder = (params) => {\r\n let builtUrl = params.base;\r\n\r\n builtUrl += '?';\r\n\r\n if (params.apiKey) {\r\n builtUrl += 'key=' + params.apiKey + '&';\r\n }\r\n if (params.integrity) {\r\n builtUrl += 'integrity=' + params.integrity + '&';\r\n }\r\n\r\n if (params.client) {\r\n builtUrl += 'client=' + params.client + '&';\r\n }\r\n\r\n if (params.crossorigin) {\r\n builtUrl += 'crossorigin=' + params.crossorigin + '&';\r\n }\r\n\r\n if (params.libraries && params.libraries.length > 0) {\r\n builtUrl += 'libraries=';\r\n\r\n params.libraries.forEach(function (library, index) {\r\n builtUrl += library;\r\n\r\n if (index !== params.libraries.length - 1) {\r\n builtUrl += ',';\r\n }\r\n });\r\n\r\n builtUrl += '&';\r\n }\r\n\r\n if (params.language) {\r\n builtUrl += 'language=' + params.language + '&';\r\n }\r\n\r\n if (params.callback) {\r\n builtUrl += 'callback=' + params.callback + '&';\r\n }\r\n\r\n return builtUrl;\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/url-builder.ts"],"sourceRoot":""}
|