mapping-component-package-jp 0.0.2

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.
Files changed (50) hide show
  1. package/README.md +70 -0
  2. package/dist/index.d.ts +264 -0
  3. package/dist/index.js +54 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +54 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +48 -0
  8. package/public/favicon.ico +0 -0
  9. package/public/index.html +43 -0
  10. package/public/logo192.png +0 -0
  11. package/public/logo512.png +0 -0
  12. package/public/manifest.json +25 -0
  13. package/public/robots.txt +3 -0
  14. package/rollup.config.js +48 -0
  15. package/src/components/FabControl.tsx +63 -0
  16. package/src/components/GoogleSearchBar.tsx +182 -0
  17. package/src/components/Icons.tsx +20 -0
  18. package/src/components/JPMapComponent.tsx +96 -0
  19. package/src/components/SpeedDialTool.tsx +97 -0
  20. package/src/components/index.ts +22 -0
  21. package/src/hooks/useMapManager.ts +48 -0
  22. package/src/interfaces/AgnifyMapComponentProps.ts +18 -0
  23. package/src/interfaces/CustomMapOptions.ts +14 -0
  24. package/src/interfaces/Data/EnterpriseRegion.ts +12 -0
  25. package/src/interfaces/Data/Farm.ts +10 -0
  26. package/src/interfaces/Data/Field.ts +19 -0
  27. package/src/interfaces/Data/LocationData.ts +9 -0
  28. package/src/interfaces/Data/MapLocationFeature.ts +8 -0
  29. package/src/interfaces/Data/NDVI.ts +14 -0
  30. package/src/interfaces/GoogleMapsOptions.ts +39 -0
  31. package/src/interfaces/Message.ts +13 -0
  32. package/src/interfaces/Mode.ts +54 -0
  33. package/src/interfaces/Properties.ts +16 -0
  34. package/src/js/fieldEncapsulation/iql.field.js +8 -0
  35. package/src/js/fieldEncapsulation/iql.fieldupload.js +158 -0
  36. package/src/js/fieldEncapsulation/iql.fieldvalidator.js +574 -0
  37. package/src/js/mapEncapsulation/circle.functions.js +30 -0
  38. package/src/js/mapEncapsulation/field.geolocation.js +19 -0
  39. package/src/js/mapEncapsulation/map.common.js +96 -0
  40. package/src/js/mapEncapsulation/mapOverlayManager.d.ts +64 -0
  41. package/src/js/mapEncapsulation/mapOverlayManager.js +2753 -0
  42. package/src/js/mapEncapsulation/shapes/circle.full.js +789 -0
  43. package/src/js/mapEncapsulation/shapes/circle.sector.js +1099 -0
  44. package/src/js/mapEncapsulation/shapes/circle.segment.js +1109 -0
  45. package/src/js/mapEncapsulation/shapes/polygon.customedit.js +393 -0
  46. package/src/js/mapEncapsulation/shapes/polyline.customedit.js +478 -0
  47. package/src/utils/commonUtils.ts +5 -0
  48. package/src/utils/iconUtils.js +52 -0
  49. package/src/utils/mapUtils.ts +88 -0
  50. package/tsconfig.json +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/@react-google-maps/api/dist/esm.js","../src/js/mapEncapsulation/map.common.js","../src/utils/mapUtils.ts","../src/js/mapEncapsulation/circle.functions.js","../src/js/mapEncapsulation/shapes/polygon.customedit.js","../src/js/mapEncapsulation/field.geolocation.js","../node_modules/tinyqueue/index.js","../node_modules/polylabel/polylabel.js","../node_modules/@mapbox/polyline/src/polyline.js","../src/js/mapEncapsulation/shapes/circle.full.js","../src/js/mapEncapsulation/shapes/circle.sector.js","../src/js/mapEncapsulation/shapes/circle.segment.js","../node_modules/polyline/src/polyline.js","../src/js/mapEncapsulation/mapOverlayManager.js","../src/utils/iconUtils.js","../src/hooks/useMapManager.ts","../src/components/JPMapComponent.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","import { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport { createContext, useContext, memo, useState, useRef, useEffect, PureComponent, createRef, useMemo, Children, isValidElement, cloneElement } from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createPortal } from 'react-dom';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest$1(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter$1(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar NODE_ENV = process.env.NODE_ENV;\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nvar invariant_1 = invariant;\n\nvar invariant$1 = /*@__PURE__*/getDefaultExportFromCjs(invariant_1);\n\nvar MapContext = createContext(null);\nfunction useGoogleMap() {\n invariant$1(!!useContext, 'useGoogleMap is React hook and requires React version 16.8+');\n var map = useContext(MapContext);\n invariant$1(!!map, 'useGoogleMap needs a GoogleMap available up in the tree');\n return map;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction reduce(obj, fn, acc) {\n return Object.keys(obj).reduce(function reducer(newAcc, key) {\n return fn(newAcc, obj[key], key);\n }, acc);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction forEach(obj, fn) {\n Object.keys(obj).forEach(function (key) {\n return fn(obj[key], key);\n });\n}\n\n/* global google */\nfunction applyUpdaterToNextProps(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nupdaterMap, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nprevProps, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nnextProps, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninstance\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var map = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var iter = function (fn, key) {\n var nextValue = nextProps[key];\n if (nextValue !== prevProps[key]) {\n map[key] = nextValue;\n fn(instance, nextValue);\n }\n };\n forEach(updaterMap, iter);\n return map;\n}\nfunction registerEvents(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nprops, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninstance, eventMap) {\n var registeredList = reduce(eventMap, function reducer(acc, googleEventName, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onEventName) {\n if (typeof props[onEventName] === 'function') {\n acc.push(google.maps.event.addListener(instance, googleEventName, props[onEventName]));\n }\n return acc;\n }, []);\n return registeredList;\n}\nfunction unregisterEvent(registered) {\n google.maps.event.removeListener(registered);\n}\nfunction unregisterEvents(events) {\n if (events === void 0) { events = []; }\n events.forEach(unregisterEvent);\n}\nfunction applyUpdatersToPropsAndRegisterEvents(_a) {\n var updaterMap = _a.updaterMap, eventMap = _a.eventMap, prevProps = _a.prevProps, nextProps = _a.nextProps, instance = _a.instance;\n var registeredEvents = registerEvents(nextProps, instance, eventMap);\n applyUpdaterToNextProps(updaterMap, prevProps, nextProps, instance);\n return registeredEvents;\n}\n\nvar eventMap$i = {\n onDblClick: 'dblclick',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMapTypeIdChanged: 'maptypeid_changed',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseDown: 'mousedown',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n onTilesLoaded: 'tilesloaded',\n onBoundsChanged: 'bounds_changed',\n onCenterChanged: 'center_changed',\n onClick: 'click',\n onDrag: 'drag',\n onHeadingChanged: 'heading_changed',\n onIdle: 'idle',\n onProjectionChanged: 'projection_changed',\n onResize: 'resize',\n onTiltChanged: 'tilt_changed',\n onZoomChanged: 'zoom_changed',\n};\nvar updaterMap$i = {\n extraMapTypes: function (map, extra) {\n extra.forEach(function forEachExtra(it, i) {\n map.mapTypes.set(String(i), it);\n });\n },\n center: function (map, center) {\n map.setCenter(center);\n },\n clickableIcons: function (map, clickable) {\n map.setClickableIcons(clickable);\n },\n heading: function (map, heading) {\n map.setHeading(heading);\n },\n mapTypeId: function (map, mapTypeId) {\n map.setMapTypeId(mapTypeId);\n },\n options: function (map, options) {\n map.setOptions(options);\n },\n streetView: function (map, streetView) {\n map.setStreetView(streetView);\n },\n tilt: function (map, tilt) {\n map.setTilt(tilt);\n },\n zoom: function (map, zoom) {\n map.setZoom(zoom);\n },\n};\n// TODO: unfinished!\nfunction GoogleMapFunctional(_a) {\n var children = _a.children, options = _a.options, id = _a.id, mapContainerStyle = _a.mapContainerStyle, mapContainerClassName = _a.mapContainerClassName, center = _a.center, \n // clickableIcons,\n // extraMapTypes,\n // heading,\n // mapTypeId,\n onClick = _a.onClick, onDblClick = _a.onDblClick, onDrag = _a.onDrag, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseDown = _a.onMouseDown, onMouseUp = _a.onMouseUp, onRightClick = _a.onRightClick, \n // onMapTypeIdChanged,\n // onTilesLoaded,\n // onBoundsChanged,\n onCenterChanged = _a.onCenterChanged, \n // onHeadingChanged,\n // onIdle,\n // onProjectionChanged,\n // onResize,\n // onTiltChanged,\n // onZoomChanged,\n onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var _b = useState(null), map = _b[0], setMap = _b[1];\n var ref = useRef(null);\n // const [extraMapTypesListener, setExtraMapTypesListener] = useState<google.maps.MapsEventListener | null>(null)\n var _c = useState(null), centerChangedListener = _c[0], setCenterChangedListener = _c[1];\n var _d = useState(null), dblclickListener = _d[0], setDblclickListener = _d[1];\n var _e = useState(null), dragendListener = _e[0], setDragendListener = _e[1];\n var _f = useState(null), dragstartListener = _f[0], setDragstartListener = _f[1];\n var _g = useState(null), mousedownListener = _g[0], setMousedownListener = _g[1];\n var _h = useState(null), mousemoveListener = _h[0], setMousemoveListener = _h[1];\n var _j = useState(null), mouseoutListener = _j[0], setMouseoutListener = _j[1];\n var _k = useState(null), mouseoverListener = _k[0], setMouseoverListener = _k[1];\n var _l = useState(null), mouseupListener = _l[0], setMouseupListener = _l[1];\n var _m = useState(null), rightclickListener = _m[0], setRightclickListener = _m[1];\n var _o = useState(null), clickListener = _o[0], setClickListener = _o[1];\n var _p = useState(null), dragListener = _p[0], setDragListener = _p[1];\n // Order does matter\n useEffect(function () {\n if (options && map !== null) {\n map.setOptions(options);\n }\n }, [map, options]);\n useEffect(function () {\n if (map !== null && typeof center !== 'undefined') {\n map.setCenter(center);\n }\n }, [map, center]);\n useEffect(function () {\n if (map && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(map, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (map && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n setDragendListener(google.maps.event.addListener(map, 'dragend', onDragEnd));\n }\n }, [onDragEnd]);\n useEffect(function () {\n if (map && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n setDragstartListener(google.maps.event.addListener(map, 'dragstart', onDragStart));\n }\n }, [onDragStart]);\n useEffect(function () {\n if (map && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(map, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (map && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n setMousemoveListener(google.maps.event.addListener(map, 'mousemove', onMouseMove));\n }\n }, [onMouseMove]);\n useEffect(function () {\n if (map && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(map, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (map && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(map, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (map && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(map, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (map && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n setRightclickListener(google.maps.event.addListener(map, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (map && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(map, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (map && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n setDragListener(google.maps.event.addListener(map, 'drag', onDrag));\n }\n }, [onDrag]);\n useEffect(function () {\n if (map && onCenterChanged) {\n if (centerChangedListener !== null) {\n google.maps.event.removeListener(centerChangedListener);\n }\n setCenterChangedListener(google.maps.event.addListener(map, 'center_changed', onCenterChanged));\n }\n }, [onClick]);\n useEffect(function () {\n var map = ref.current === null\n ? null\n : new google.maps.Map(ref.current, options);\n setMap(map);\n if (map !== null && onLoad) {\n onLoad(map);\n }\n return function () {\n if (map !== null) {\n if (onUnmount) {\n onUnmount(map);\n }\n }\n };\n }, []);\n return (jsx(\"div\", { id: id, ref: ref, style: mapContainerStyle, className: mapContainerClassName, children: jsx(MapContext.Provider, { value: map, children: map !== null ? children : null }) }));\n}\nmemo(GoogleMapFunctional);\nvar GoogleMap = /** @class */ (function (_super) {\n __extends(GoogleMap, _super);\n function GoogleMap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n map: null,\n };\n _this.registeredEvents = [];\n _this.mapRef = null;\n _this.getInstance = function () {\n if (_this.mapRef === null) {\n return null;\n }\n return new google.maps.Map(_this.mapRef, _this.props.options);\n };\n _this.panTo = function (latLng) {\n var map = _this.getInstance();\n if (map) {\n map.panTo(latLng);\n }\n };\n _this.setMapCallback = function () {\n if (_this.state.map !== null) {\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.map);\n }\n }\n };\n _this.getRef = function (ref) {\n _this.mapRef = ref;\n };\n return _this;\n }\n GoogleMap.prototype.componentDidMount = function () {\n var map = this.getInstance();\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$i,\n eventMap: eventMap$i,\n prevProps: {},\n nextProps: this.props,\n instance: map,\n });\n this.setState(function setMap() {\n return {\n map: map,\n };\n }, this.setMapCallback);\n };\n GoogleMap.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.map !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$i,\n eventMap: eventMap$i,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.map,\n });\n }\n };\n GoogleMap.prototype.componentWillUnmount = function () {\n if (this.state.map !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.map);\n }\n unregisterEvents(this.registeredEvents);\n }\n };\n GoogleMap.prototype.render = function () {\n return (jsx(\"div\", { id: this.props.id, ref: this.getRef, style: this.props.mapContainerStyle, className: this.props.mapContainerClassName, children: jsx(MapContext.Provider, { value: this.state.map, children: this.state.map !== null ? this.props.children : null }) }));\n };\n return GoogleMap;\n}(PureComponent));\n\nvar isBrowser = typeof document !== 'undefined';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction injectScript(_a) {\n var url = _a.url, id = _a.id, nonce = _a.nonce;\n if (!isBrowser) {\n return Promise.reject(new Error('document is undefined'));\n }\n return new Promise(function injectScriptCallback(resolve, reject) {\n var existingScript = document.getElementById(id);\n var windowWithGoogleMap = window;\n if (existingScript) {\n // Same script id/url: keep same script\n var dataStateAttribute = existingScript.getAttribute('data-state');\n if (existingScript.src === url && dataStateAttribute !== 'error') {\n if (dataStateAttribute === 'ready') {\n return resolve(id);\n }\n else {\n var originalInitMap_1 = windowWithGoogleMap.initMap;\n var originalErrorCallback_1 = existingScript.onerror;\n windowWithGoogleMap.initMap = function initMap() {\n if (originalInitMap_1) {\n originalInitMap_1();\n }\n resolve(id);\n };\n existingScript.onerror = function (err) {\n if (originalErrorCallback_1) {\n originalErrorCallback_1(err);\n }\n reject(err);\n };\n return;\n }\n }\n // Same script id, but either\n // 1. requested URL is different\n // 2. script failed to load\n else {\n existingScript.remove();\n }\n }\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.id = id;\n script.async = true;\n script.nonce = nonce || '';\n script.onerror = function onerror(err) {\n script.setAttribute('data-state', 'error');\n reject(err);\n };\n windowWithGoogleMap.initMap = function onload() {\n script.setAttribute('data-state', 'ready');\n resolve(id);\n };\n document.head.appendChild(script);\n }).catch(function (err) {\n console.error('injectScript error: ', err);\n throw err;\n });\n}\n\nfunction isGoogleFontStyle(element) {\n // 'Roboto' or 'Google Sans Text' font download\n var href = element.href;\n if (href && (href.indexOf('https://fonts.googleapis.com/css?family=Roboto') === 0 ||\n href.indexOf('https://fonts.googleapis.com/css?family=Google+Sans+Text') === 0)) {\n return true;\n }\n // font style elements\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet.cssText &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet.cssText.replace('\\r\\n', '').indexOf('.gm-style') === 0) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet.cssText = '';\n return true;\n }\n // font style elements for other browsers\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.innerHTML &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.innerHTML.replace('\\r\\n', '').indexOf('.gm-style') === 0) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.innerHTML = '';\n return true;\n }\n // when google tries to add empty style\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n !element.styleSheet &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n !element.innerHTML) {\n return true;\n }\n return false;\n}\n// Preventing the Google Maps library from downloading an extra font\nfunction preventGoogleFonts() {\n // we override these methods only for one particular head element\n // default methods for other elements are not affected\n var head = document.getElementsByTagName('head')[0];\n if (head) {\n var trueInsertBefore_1 = head.insertBefore.bind(head);\n // TODO: adding return before reflect solves the TS issue\n head.insertBefore = function insertBefore(newElement, referenceElement) {\n if (!isGoogleFontStyle(newElement)) {\n Reflect.apply(trueInsertBefore_1, head, [newElement, referenceElement]);\n }\n return newElement;\n };\n var trueAppend_1 = head.appendChild.bind(head);\n // TODO: adding return before reflect solves the TS issue\n head.appendChild = function appendChild(textNode) {\n if (!isGoogleFontStyle(textNode)) {\n Reflect.apply(trueAppend_1, head, [textNode]);\n }\n return textNode;\n };\n }\n}\n\nfunction makeLoadScriptUrl(_a) {\n var googleMapsApiKey = _a.googleMapsApiKey, googleMapsClientId = _a.googleMapsClientId, _b = _a.version, version = _b === void 0 ? 'weekly' : _b, language = _a.language, region = _a.region, libraries = _a.libraries, channel = _a.channel, mapIds = _a.mapIds, authReferrerPolicy = _a.authReferrerPolicy;\n var params = [];\n invariant$1((googleMapsApiKey && googleMapsClientId) || !(googleMapsApiKey && googleMapsClientId), 'You need to specify either googleMapsApiKey or googleMapsClientId for @react-google-maps/api load script to work. You cannot use both at the same time.');\n if (googleMapsApiKey) {\n params.push(\"key=\".concat(googleMapsApiKey));\n }\n else if (googleMapsClientId) {\n params.push(\"client=\".concat(googleMapsClientId));\n }\n if (version) {\n params.push(\"v=\".concat(version));\n }\n if (language) {\n params.push(\"language=\".concat(language));\n }\n if (region) {\n params.push(\"region=\".concat(region));\n }\n if (libraries && libraries.length) {\n params.push(\"libraries=\".concat(libraries.sort().join(',')));\n }\n if (channel) {\n params.push(\"channel=\".concat(channel));\n }\n if (mapIds && mapIds.length) {\n params.push(\"map_ids=\".concat(mapIds.join(',')));\n }\n if (authReferrerPolicy) {\n params.push(\"auth_referrer_policy=\".concat(authReferrerPolicy));\n }\n params.push('callback=initMap');\n return \"https://maps.googleapis.com/maps/api/js?\".concat(params.join('&'));\n}\n\nvar cleaningUp = false;\nfunction DefaultLoadingElement() {\n return jsx(\"div\", { children: \"Loading...\" });\n}\nvar defaultLoadScriptProps = {\n id: 'script-loader',\n version: 'weekly',\n};\nvar LoadScript = /** @class */ (function (_super) {\n __extends(LoadScript, _super);\n function LoadScript() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.check = createRef();\n _this.state = {\n loaded: false,\n };\n _this.cleanupCallback = function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete window.google.maps;\n _this.injectScript();\n };\n _this.isCleaningUp = function () { return __awaiter$1(_this, void 0, void 0, function () {\n function promiseCallback(resolve) {\n if (!cleaningUp) {\n resolve();\n }\n else {\n if (isBrowser) {\n var timer_1 = window.setInterval(function interval() {\n if (!cleaningUp) {\n window.clearInterval(timer_1);\n resolve();\n }\n }, 1);\n }\n }\n return;\n }\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(promiseCallback)];\n });\n }); };\n _this.cleanup = function () {\n cleaningUp = true;\n var script = document.getElementById(_this.props.id);\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n Array.prototype.slice\n .call(document.getElementsByTagName('script'))\n .filter(function filter(script) {\n return typeof script.src === 'string' && script.src.includes('maps.googleapis');\n })\n .forEach(function forEach(script) {\n if (script.parentNode) {\n script.parentNode.removeChild(script);\n }\n });\n Array.prototype.slice\n .call(document.getElementsByTagName('link'))\n .filter(function filter(link) {\n return (link.href === 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Google+Sans');\n })\n .forEach(function forEach(link) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n });\n Array.prototype.slice\n .call(document.getElementsByTagName('style'))\n .filter(function filter(style) {\n return (style.innerText !== undefined &&\n style.innerText.length > 0 &&\n style.innerText.includes('.gm-'));\n })\n .forEach(function forEach(style) {\n if (style.parentNode) {\n style.parentNode.removeChild(style);\n }\n });\n };\n _this.injectScript = function () {\n if (_this.props.preventGoogleFontsLoading) {\n preventGoogleFonts();\n }\n invariant$1(!!_this.props.id, 'LoadScript requires \"id\" prop to be a string: %s', _this.props.id);\n var injectScriptOptions = {\n id: _this.props.id,\n nonce: _this.props.nonce,\n url: makeLoadScriptUrl(_this.props),\n };\n injectScript(injectScriptOptions)\n .then(function () {\n if (_this.props.onLoad) {\n _this.props.onLoad();\n }\n _this.setState(function setLoaded() {\n return {\n loaded: true,\n };\n });\n return;\n })\n .catch(function (err) {\n if (_this.props.onError) {\n _this.props.onError(err);\n }\n console.error(\"\\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (\".concat(_this\n .props.googleMapsApiKey || '-', \") or Client ID (\").concat(_this.props.googleMapsClientId ||\n '-', \") to <LoadScript />\\n Otherwise it is a Network issue.\\n \"));\n });\n };\n return _this;\n }\n LoadScript.prototype.componentDidMount = function () {\n if (isBrowser) {\n if (window.google && window.google.maps && !cleaningUp) {\n console.error('google api is already presented');\n return;\n }\n this.isCleaningUp()\n .then(this.injectScript)\n .catch(function error(err) {\n console.error('Error at injecting script after cleaning up: ', err);\n });\n }\n };\n LoadScript.prototype.componentDidUpdate = function (prevProps) {\n if (this.props.libraries !== prevProps.libraries) {\n console.warn('Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables');\n }\n if (isBrowser && prevProps.language !== this.props.language) {\n this.cleanup();\n // TODO: refactor to use gDSFP maybe... wait for hooks refactoring.\n this.setState(function setLoaded() {\n return {\n loaded: false,\n };\n }, this.cleanupCallback);\n }\n };\n LoadScript.prototype.componentWillUnmount = function () {\n var _this = this;\n if (isBrowser) {\n this.cleanup();\n var timeoutCallback = function () {\n if (!_this.check.current) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete window.google;\n cleaningUp = false;\n }\n };\n window.setTimeout(timeoutCallback, 1);\n if (this.props.onUnmount) {\n this.props.onUnmount();\n }\n }\n };\n LoadScript.prototype.render = function () {\n return (jsxs(Fragment, { children: [jsx(\"div\", { ref: this.check }), this.state.loaded\n ? this.props.children\n : this.props.loadingElement || jsx(DefaultLoadingElement, {})] }));\n };\n LoadScript.defaultProps = defaultLoadScriptProps;\n return LoadScript;\n}(PureComponent));\n\n/* eslint-disable filenames/match-regex */\nvar previouslyLoadedUrl;\nfunction useLoadScript(_a) {\n var _b = _a.id, id = _b === void 0 ? defaultLoadScriptProps.id : _b, _c = _a.version, version = _c === void 0 ? defaultLoadScriptProps.version : _c, nonce = _a.nonce, googleMapsApiKey = _a.googleMapsApiKey, googleMapsClientId = _a.googleMapsClientId, language = _a.language, region = _a.region, libraries = _a.libraries, preventGoogleFontsLoading = _a.preventGoogleFontsLoading, channel = _a.channel, mapIds = _a.mapIds, authReferrerPolicy = _a.authReferrerPolicy;\n var isMounted = useRef(false);\n var _d = useState(false), isLoaded = _d[0], setLoaded = _d[1];\n var _e = useState(undefined), loadError = _e[0], setLoadError = _e[1];\n useEffect(function trackMountedState() {\n isMounted.current = true;\n return function () {\n isMounted.current = false;\n };\n }, []);\n useEffect(function applyPreventGoogleFonts() {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts();\n }\n }, [preventGoogleFontsLoading]);\n useEffect(function validateLoadedState() {\n if (isLoaded) {\n invariant$1(!!window.google, 'useLoadScript was marked as loaded, but window.google is not present. Something went wrong.');\n }\n }, [isLoaded]);\n var url = makeLoadScriptUrl({\n version: version,\n googleMapsApiKey: googleMapsApiKey,\n googleMapsClientId: googleMapsClientId,\n language: language,\n region: region,\n libraries: libraries,\n channel: channel,\n mapIds: mapIds,\n authReferrerPolicy: authReferrerPolicy\n });\n useEffect(function loadScriptAndModifyLoadedState() {\n if (!isBrowser) {\n return;\n }\n function setLoadedIfMounted() {\n if (isMounted.current) {\n setLoaded(true);\n previouslyLoadedUrl = url;\n }\n }\n if (window.google && window.google.maps && previouslyLoadedUrl === url) {\n setLoadedIfMounted();\n return;\n }\n injectScript({ id: id, url: url, nonce: nonce })\n .then(setLoadedIfMounted)\n .catch(function handleInjectError(err) {\n if (isMounted.current) {\n setLoadError(err);\n }\n console.warn(\"\\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (\".concat(googleMapsApiKey ||\n '-', \") or Client ID (\").concat(googleMapsClientId || '-', \")\\n Otherwise it is a Network issue.\\n \"));\n console.error(err);\n });\n }, [id, url, nonce]);\n var prevLibraries = useRef();\n useEffect(function checkPerformance() {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn('Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables');\n }\n prevLibraries.current = libraries;\n }, [libraries]);\n return { isLoaded: isLoaded, loadError: loadError, url: url };\n}\n\nvar defaultLoadingElement = jsx(DefaultLoadingElement, {});\nfunction LoadScriptNext(_a) {\n var loadingElement = _a.loadingElement, onLoad = _a.onLoad, onError = _a.onError, onUnmount = _a.onUnmount, children = _a.children, hookOptions = __rest$1(_a, [\"loadingElement\", \"onLoad\", \"onError\", \"onUnmount\", \"children\"]);\n var _b = useLoadScript(hookOptions), isLoaded = _b.isLoaded, loadError = _b.loadError;\n useEffect(function handleOnLoad() {\n if (isLoaded && typeof onLoad === 'function') {\n onLoad();\n }\n }, [isLoaded, onLoad]);\n useEffect(function handleOnError() {\n if (loadError && typeof onError === 'function') {\n onError(loadError);\n }\n }, [loadError, onError]);\n useEffect(function handleOnUnmount() {\n return function () {\n if (onUnmount) {\n onUnmount();\n }\n };\n }, [onUnmount]);\n return isLoaded ? children : loadingElement || defaultLoadingElement;\n}\nvar LoadScriptNext$1 = memo(LoadScriptNext);\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual$1 = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\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 */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!fastDeepEqual$1(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `&region=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setScript();\n }\n }\n }\n}\n\nvar defaultLibraries = ['maps'];\nfunction useJsApiLoader(_a) {\n var _b = _a.id, id = _b === void 0 ? defaultLoadScriptProps.id : _b, _c = _a.version, version = _c === void 0 ? defaultLoadScriptProps.version : _c, nonce = _a.nonce, googleMapsApiKey = _a.googleMapsApiKey, \n // googleMapsClientId,\n language = _a.language, region = _a.region, _d = _a.libraries, libraries = _d === void 0 ? defaultLibraries : _d, preventGoogleFontsLoading = _a.preventGoogleFontsLoading, \n // channel,\n mapIds = _a.mapIds, authReferrerPolicy = _a.authReferrerPolicy;\n var isMounted = useRef(false);\n var _e = useState(false), isLoaded = _e[0], setLoaded = _e[1];\n var _f = useState(undefined), loadError = _f[0], setLoadError = _f[1];\n useEffect(function trackMountedState() {\n isMounted.current = true;\n return function () {\n isMounted.current = false;\n };\n }, []);\n var loader = useMemo(function () {\n return new Loader({\n id: id,\n apiKey: googleMapsApiKey,\n version: version,\n libraries: libraries,\n language: language || 'en',\n region: region || 'US',\n mapIds: mapIds || [],\n nonce: nonce || '',\n authReferrerPolicy: authReferrerPolicy || 'origin',\n });\n }, [id, googleMapsApiKey, version, libraries, language, region, mapIds, nonce, authReferrerPolicy]);\n useEffect(function effect() {\n if (isLoaded) {\n return;\n }\n else {\n loader.load().then(function () {\n if (isMounted.current) {\n setLoaded(true);\n }\n return;\n })\n .catch(function (error) {\n setLoadError(error);\n });\n }\n }, []);\n useEffect(function () {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts();\n }\n }, [preventGoogleFontsLoading]);\n var prevLibraries = useRef();\n useEffect(function () {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn('Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables');\n }\n prevLibraries.current = libraries;\n }, [libraries]);\n return { isLoaded: isLoaded, loadError: loadError };\n}\n\nvar eventMap$h = {};\nvar updaterMap$h = {\n options: function (instance, options) {\n instance.setOptions(options);\n },\n};\nfunction TrafficLayerFunctional(_a) {\n var options = _a.options, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (options && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n var trafficLayer = new google.maps.TrafficLayer(__assign(__assign({}, (options || {})), { map: map }));\n setInstance(trafficLayer);\n if (onLoad) {\n onLoad(trafficLayer);\n }\n return function () {\n if (instance !== null) {\n if (onUnmount) {\n onUnmount(instance);\n }\n instance.setMap(null);\n }\n };\n }, []);\n return null;\n}\nvar TrafficLayerF = memo(TrafficLayerFunctional);\nvar TrafficLayer = /** @class */ (function (_super) {\n __extends(TrafficLayer, _super);\n function TrafficLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n trafficLayer: null,\n };\n _this.setTrafficLayerCallback = function () {\n if (_this.state.trafficLayer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.trafficLayer);\n }\n };\n _this.registeredEvents = [];\n return _this;\n }\n TrafficLayer.prototype.componentDidMount = function () {\n var trafficLayer = new google.maps.TrafficLayer(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$h,\n eventMap: eventMap$h,\n prevProps: {},\n nextProps: this.props,\n instance: trafficLayer,\n });\n this.setState(function setTrafficLayer() {\n return {\n trafficLayer: trafficLayer,\n };\n }, this.setTrafficLayerCallback);\n };\n TrafficLayer.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.trafficLayer !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$h,\n eventMap: eventMap$h,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.trafficLayer,\n });\n }\n };\n TrafficLayer.prototype.componentWillUnmount = function () {\n if (this.state.trafficLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.trafficLayer);\n }\n unregisterEvents(this.registeredEvents);\n this.state.trafficLayer.setMap(null);\n }\n };\n TrafficLayer.prototype.render = function () {\n return null;\n };\n TrafficLayer.contextType = MapContext;\n return TrafficLayer;\n}(PureComponent));\n\nfunction BicyclingLayerFunctional(_a) {\n var onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n var bicyclingLayer = new google.maps.BicyclingLayer();\n setInstance(bicyclingLayer);\n bicyclingLayer.setMap(map);\n if (onLoad) {\n onLoad(bicyclingLayer);\n }\n return function () {\n if (bicyclingLayer !== null) {\n if (onUnmount) {\n onUnmount(bicyclingLayer);\n }\n bicyclingLayer.setMap(null);\n }\n };\n }, []);\n return null;\n}\nvar BicyclingLayerF = memo(BicyclingLayerFunctional);\nvar BicyclingLayer = /** @class */ (function (_super) {\n __extends(BicyclingLayer, _super);\n function BicyclingLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n bicyclingLayer: null,\n };\n _this.setBicyclingLayerCallback = function () {\n if (_this.state.bicyclingLayer !== null) {\n _this.state.bicyclingLayer.setMap(_this.context);\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.bicyclingLayer);\n }\n }\n };\n return _this;\n }\n BicyclingLayer.prototype.componentDidMount = function () {\n var bicyclingLayer = new google.maps.BicyclingLayer();\n this.setState(function () {\n return {\n bicyclingLayer: bicyclingLayer,\n };\n }, this.setBicyclingLayerCallback);\n };\n BicyclingLayer.prototype.componentWillUnmount = function () {\n if (this.state.bicyclingLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.bicyclingLayer);\n }\n this.state.bicyclingLayer.setMap(null);\n }\n };\n BicyclingLayer.prototype.render = function () {\n return null;\n };\n BicyclingLayer.contextType = MapContext;\n return BicyclingLayer;\n}(PureComponent));\n\nfunction TransitLayerFunctional(_a) {\n var onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n var transitLayer = new google.maps.TransitLayer();\n setInstance(transitLayer);\n transitLayer.setMap(map);\n if (onLoad) {\n onLoad(transitLayer);\n }\n return function () {\n if (instance !== null) {\n if (onUnmount) {\n onUnmount(instance);\n }\n instance.setMap(null);\n }\n };\n }, []);\n return null;\n}\nvar TransitLayerF = memo(TransitLayerFunctional);\nvar TransitLayer = /** @class */ (function (_super) {\n __extends(TransitLayer, _super);\n function TransitLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n transitLayer: null,\n };\n _this.setTransitLayerCallback = function () {\n if (_this.state.transitLayer !== null) {\n _this.state.transitLayer.setMap(_this.context);\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.transitLayer);\n }\n }\n };\n return _this;\n }\n TransitLayer.prototype.componentDidMount = function () {\n var transitLayer = new google.maps.TransitLayer();\n this.setState(function setTransitLayer() {\n return {\n transitLayer: transitLayer,\n };\n }, this.setTransitLayerCallback);\n };\n TransitLayer.prototype.componentWillUnmount = function () {\n if (this.state.transitLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.transitLayer);\n }\n this.state.transitLayer.setMap(null);\n }\n };\n TransitLayer.prototype.render = function () {\n return null;\n };\n TransitLayer.contextType = MapContext;\n return TransitLayer;\n}(PureComponent));\n\nvar eventMap$g = {\n onCircleComplete: 'circlecomplete',\n onMarkerComplete: 'markercomplete',\n onOverlayComplete: 'overlaycomplete',\n onPolygonComplete: 'polygoncomplete',\n onPolylineComplete: 'polylinecomplete',\n onRectangleComplete: 'rectanglecomplete',\n};\nvar updaterMap$g = {\n drawingMode: function (instance, drawingMode) {\n instance.setDrawingMode(drawingMode);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n};\nfunction DrawingManagerFunctional(_a) {\n var options = _a.options, drawingMode = _a.drawingMode, onCircleComplete = _a.onCircleComplete, onMarkerComplete = _a.onMarkerComplete, onOverlayComplete = _a.onOverlayComplete, onPolygonComplete = _a.onPolygonComplete, onPolylineComplete = _a.onPolylineComplete, onRectangleComplete = _a.onRectangleComplete, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), circlecompleteListener = _c[0], setCircleCompleteListener = _c[1];\n var _d = useState(null), markercompleteListener = _d[0], setMarkerCompleteListener = _d[1];\n var _e = useState(null), overlaycompleteListener = _e[0], setOverlayCompleteListener = _e[1];\n var _f = useState(null), polygoncompleteListener = _f[0], setPolygonCompleteListener = _f[1];\n var _g = useState(null), polylinecompleteListener = _g[0], setPolylineCompleteListener = _g[1];\n var _h = useState(null), rectanglecompleteListener = _h[0], setRectangleCompleteListener = _h[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (options && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (instance !== null) {\n instance.setDrawingMode(drawingMode !== null && drawingMode !== void 0 ? drawingMode : null);\n }\n }, [instance, drawingMode]);\n useEffect(function () {\n if (instance && onCircleComplete) {\n if (circlecompleteListener !== null) {\n google.maps.event.removeListener(circlecompleteListener);\n }\n setCircleCompleteListener(google.maps.event.addListener(instance, 'circlecomplete', onCircleComplete));\n }\n }, [instance, onCircleComplete]);\n useEffect(function () {\n if (instance && onMarkerComplete) {\n if (markercompleteListener !== null) {\n google.maps.event.removeListener(markercompleteListener);\n }\n setMarkerCompleteListener(google.maps.event.addListener(instance, 'markercomplete', onMarkerComplete));\n }\n }, [instance, onMarkerComplete]);\n useEffect(function () {\n if (instance && onOverlayComplete) {\n if (overlaycompleteListener !== null) {\n google.maps.event.removeListener(overlaycompleteListener);\n }\n setOverlayCompleteListener(google.maps.event.addListener(instance, 'overlaycomplete', onOverlayComplete));\n }\n }, [instance, onOverlayComplete]);\n useEffect(function () {\n if (instance && onPolygonComplete) {\n if (polygoncompleteListener !== null) {\n google.maps.event.removeListener(polygoncompleteListener);\n }\n setPolygonCompleteListener(google.maps.event.addListener(instance, 'polygoncomplete', onPolygonComplete));\n }\n }, [instance, onPolygonComplete]);\n useEffect(function () {\n if (instance && onPolylineComplete) {\n if (polylinecompleteListener !== null) {\n google.maps.event.removeListener(polylinecompleteListener);\n }\n setPolylineCompleteListener(google.maps.event.addListener(instance, 'polylinecomplete', onPolylineComplete));\n }\n }, [instance, onPolylineComplete]);\n useEffect(function () {\n if (instance && onRectangleComplete) {\n if (rectanglecompleteListener !== null) {\n google.maps.event.removeListener(rectanglecompleteListener);\n }\n setRectangleCompleteListener(google.maps.event.addListener(instance, 'rectanglecomplete', onRectangleComplete));\n }\n }, [instance, onRectangleComplete]);\n useEffect(function () {\n invariant$1(!!google.maps.drawing, \"Did you include prop libraries={['drawing']} in the URL? %s\", google.maps.drawing);\n var drawingManager = new google.maps.drawing.DrawingManager(__assign(__assign({}, (options || {})), { map: map }));\n if (drawingMode) {\n drawingManager.setDrawingMode(drawingMode);\n }\n if (onCircleComplete) {\n setCircleCompleteListener(google.maps.event.addListener(drawingManager, 'circlecomplete', onCircleComplete));\n }\n if (onMarkerComplete) {\n setMarkerCompleteListener(google.maps.event.addListener(drawingManager, 'markercomplete', onMarkerComplete));\n }\n if (onOverlayComplete) {\n setOverlayCompleteListener(google.maps.event.addListener(drawingManager, 'overlaycomplete', onOverlayComplete));\n }\n if (onPolygonComplete) {\n setPolygonCompleteListener(google.maps.event.addListener(drawingManager, 'polygoncomplete', onPolygonComplete));\n }\n if (onPolylineComplete) {\n setPolylineCompleteListener(google.maps.event.addListener(drawingManager, 'polylinecomplete', onPolylineComplete));\n }\n if (onRectangleComplete) {\n setRectangleCompleteListener(google.maps.event.addListener(drawingManager, 'rectanglecomplete', onRectangleComplete));\n }\n setInstance(drawingManager);\n if (onLoad) {\n onLoad(drawingManager);\n }\n return function () {\n if (instance !== null) {\n if (circlecompleteListener) {\n google.maps.event.removeListener(circlecompleteListener);\n }\n if (markercompleteListener) {\n google.maps.event.removeListener(markercompleteListener);\n }\n if (overlaycompleteListener) {\n google.maps.event.removeListener(overlaycompleteListener);\n }\n if (polygoncompleteListener) {\n google.maps.event.removeListener(polygoncompleteListener);\n }\n if (polylinecompleteListener) {\n google.maps.event.removeListener(polylinecompleteListener);\n }\n if (rectanglecompleteListener) {\n google.maps.event.removeListener(rectanglecompleteListener);\n }\n if (onUnmount) {\n onUnmount(instance);\n }\n instance.setMap(null);\n }\n };\n }, []);\n return null;\n}\nvar DrawingManagerF = memo(DrawingManagerFunctional);\nvar DrawingManager = /** @class */ (function (_super) {\n __extends(DrawingManager, _super);\n function DrawingManager(props) {\n var _this = _super.call(this, props) || this;\n _this.registeredEvents = [];\n _this.state = {\n drawingManager: null,\n };\n _this.setDrawingManagerCallback = function () {\n if (_this.state.drawingManager !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.drawingManager);\n }\n };\n invariant$1(!!google.maps.drawing, \"Did you include prop libraries={['drawing']} in the URL? %s\", google.maps.drawing);\n return _this;\n }\n DrawingManager.prototype.componentDidMount = function () {\n var drawingManager = new google.maps.drawing.DrawingManager(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$g,\n eventMap: eventMap$g,\n prevProps: {},\n nextProps: this.props,\n instance: drawingManager,\n });\n this.setState(function setDrawingManager() {\n return {\n drawingManager: drawingManager,\n };\n }, this.setDrawingManagerCallback);\n };\n DrawingManager.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.drawingManager !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$g,\n eventMap: eventMap$g,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.drawingManager,\n });\n }\n };\n DrawingManager.prototype.componentWillUnmount = function () {\n if (this.state.drawingManager !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.drawingManager);\n }\n unregisterEvents(this.registeredEvents);\n this.state.drawingManager.setMap(null);\n }\n };\n DrawingManager.prototype.render = function () {\n return null;\n };\n DrawingManager.contextType = MapContext;\n return DrawingManager;\n}(PureComponent));\n\nvar eventMap$f = {\n onAnimationChanged: 'animation_changed',\n onClick: 'click',\n onClickableChanged: 'clickable_changed',\n onCursorChanged: 'cursor_changed',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDraggableChanged: 'draggable_changed',\n onDragStart: 'dragstart',\n onFlatChanged: 'flat_changed',\n onIconChanged: 'icon_changed',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onPositionChanged: 'position_changed',\n onRightClick: 'rightclick',\n onShapeChanged: 'shape_changed',\n onTitleChanged: 'title_changed',\n onVisibleChanged: 'visible_changed',\n onZindexChanged: 'zindex_changed',\n};\nvar updaterMap$f = {\n animation: function (instance, animation) {\n instance.setAnimation(animation);\n },\n clickable: function (instance, clickable) {\n instance.setClickable(clickable);\n },\n cursor: function (instance, cursor) {\n instance.setCursor(cursor);\n },\n draggable: function (instance, draggable) {\n instance.setDraggable(draggable);\n },\n icon: function (instance, icon) {\n instance.setIcon(icon);\n },\n label: function (instance, label) {\n instance.setLabel(label);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n opacity: function (instance, opacity) {\n instance.setOpacity(opacity);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n position: function (instance, position) {\n instance.setPosition(position);\n },\n shape: function (instance, shape) {\n instance.setShape(shape);\n },\n title: function (instance, title) {\n instance.setTitle(title);\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n zIndex: function (instance, zIndex) {\n instance.setZIndex(zIndex);\n },\n};\nvar defaultOptions$5 = {};\nfunction MarkerFunctional(_a) {\n var position = _a.position, options = _a.options, clusterer = _a.clusterer, noClustererRedraw = _a.noClustererRedraw, children = _a.children, draggable = _a.draggable, visible = _a.visible, animation = _a.animation, clickable = _a.clickable, cursor = _a.cursor, icon = _a.icon, label = _a.label, opacity = _a.opacity, shape = _a.shape, title = _a.title, zIndex = _a.zIndex, onClick = _a.onClick, onDblClick = _a.onDblClick, onDrag = _a.onDrag, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseUp = _a.onMouseUp, onMouseDown = _a.onMouseDown, onRightClick = _a.onRightClick, onClickableChanged = _a.onClickableChanged, onCursorChanged = _a.onCursorChanged, onAnimationChanged = _a.onAnimationChanged, onDraggableChanged = _a.onDraggableChanged, onFlatChanged = _a.onFlatChanged, onIconChanged = _a.onIconChanged, onPositionChanged = _a.onPositionChanged, onShapeChanged = _a.onShapeChanged, onTitleChanged = _a.onTitleChanged, onVisibleChanged = _a.onVisibleChanged, onZindexChanged = _a.onZindexChanged, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), dblclickListener = _c[0], setDblclickListener = _c[1];\n var _d = useState(null), dragendListener = _d[0], setDragendListener = _d[1];\n var _e = useState(null), dragstartListener = _e[0], setDragstartListener = _e[1];\n var _f = useState(null), mousedownListener = _f[0], setMousedownListener = _f[1];\n var _g = useState(null), mouseoutListener = _g[0], setMouseoutListener = _g[1];\n var _h = useState(null), mouseoverListener = _h[0], setMouseoverListener = _h[1];\n var _j = useState(null), mouseupListener = _j[0], setMouseupListener = _j[1];\n var _k = useState(null), rightclickListener = _k[0], setRightclickListener = _k[1];\n var _l = useState(null), clickListener = _l[0], setClickListener = _l[1];\n var _m = useState(null), dragListener = _m[0], setDragListener = _m[1];\n var _o = useState(null), clickableChangedListener = _o[0], setClickableChangedListener = _o[1];\n var _p = useState(null), cursorChangedListener = _p[0], setCursorChangedListener = _p[1];\n var _q = useState(null), animationChangedListener = _q[0], setAnimationChangedListener = _q[1];\n var _r = useState(null), draggableChangedListener = _r[0], setDraggableChangedListener = _r[1];\n var _s = useState(null), flatChangedListener = _s[0], setFlatChangedListener = _s[1];\n var _t = useState(null), iconChangedListener = _t[0], setIconChangedListener = _t[1];\n var _u = useState(null), positionChangedListener = _u[0], setPositionChangedListener = _u[1];\n var _v = useState(null), shapeChangedListener = _v[0], setShapeChangedListener = _v[1];\n var _w = useState(null), titleChangedListener = _w[0], setTitleChangedListener = _w[1];\n var _x = useState(null), visibleChangedListener = _x[0], setVisibleChangedListener = _x[1];\n var _y = useState(null), zIndexChangedListener = _y[0], setZindexChangedListener = _y[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable);\n }\n }, [instance, draggable]);\n useEffect(function () {\n if (position && instance !== null) {\n instance.setPosition(position);\n }\n }, [instance, position]);\n useEffect(function () {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible);\n }\n }, [instance, visible]);\n useEffect(function () {\n instance === null || instance === void 0 ? void 0 : instance.setAnimation(animation);\n }, [instance, animation]);\n useEffect(function () {\n if (instance && clickable !== undefined) {\n instance.setClickable(clickable);\n }\n }, [instance, clickable]);\n useEffect(function () {\n if (instance && cursor !== undefined) {\n instance.setCursor(cursor);\n }\n }, [instance, cursor]);\n useEffect(function () {\n if (instance && icon !== undefined) {\n instance.setIcon(icon);\n }\n }, [instance, icon]);\n useEffect(function () {\n if (instance && label !== undefined) {\n instance.setLabel(label);\n }\n }, [instance, label]);\n useEffect(function () {\n if (instance && opacity !== undefined) {\n instance.setOpacity(opacity);\n }\n }, [instance, opacity]);\n useEffect(function () {\n if (instance && shape !== undefined) {\n instance.setShape(shape);\n }\n }, [instance, shape]);\n useEffect(function () {\n if (instance && title !== undefined) {\n instance.setTitle(title);\n }\n }, [instance, title]);\n useEffect(function () {\n if (instance && zIndex !== undefined) {\n instance.setZIndex(zIndex);\n }\n }, [instance, zIndex]);\n useEffect(function () {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(instance, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n setDragendListener(google.maps.event.addListener(instance, 'dragend', onDragEnd));\n }\n }, [onDragEnd]);\n useEffect(function () {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n setDragstartListener(google.maps.event.addListener(instance, 'dragstart', onDragStart));\n }\n }, [onDragStart]);\n useEffect(function () {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(instance, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(instance, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n setRightclickListener(google.maps.event.addListener(instance, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n setDragListener(google.maps.event.addListener(instance, 'drag', onDrag));\n }\n }, [onDrag]);\n useEffect(function () {\n if (instance && onClickableChanged) {\n if (clickableChangedListener !== null) {\n google.maps.event.removeListener(clickableChangedListener);\n }\n setClickableChangedListener(google.maps.event.addListener(instance, 'clickable_changed', onClickableChanged));\n }\n }, [onClickableChanged]);\n useEffect(function () {\n if (instance && onCursorChanged) {\n if (cursorChangedListener !== null) {\n google.maps.event.removeListener(cursorChangedListener);\n }\n setCursorChangedListener(google.maps.event.addListener(instance, 'cursor_changed', onCursorChanged));\n }\n }, [onCursorChanged]);\n useEffect(function () {\n if (instance && onAnimationChanged) {\n if (animationChangedListener !== null) {\n google.maps.event.removeListener(animationChangedListener);\n }\n setAnimationChangedListener(google.maps.event.addListener(instance, 'animation_changed', onAnimationChanged));\n }\n }, [onAnimationChanged]);\n useEffect(function () {\n if (instance && onDraggableChanged) {\n if (draggableChangedListener !== null) {\n google.maps.event.removeListener(draggableChangedListener);\n }\n setDraggableChangedListener(google.maps.event.addListener(instance, 'draggable_changed', onDraggableChanged));\n }\n }, [onDraggableChanged]);\n useEffect(function () {\n if (instance && onFlatChanged) {\n if (flatChangedListener !== null) {\n google.maps.event.removeListener(flatChangedListener);\n }\n setFlatChangedListener(google.maps.event.addListener(instance, 'flat_changed', onFlatChanged));\n }\n }, [onFlatChanged]);\n useEffect(function () {\n if (instance && onIconChanged) {\n if (iconChangedListener !== null) {\n google.maps.event.removeListener(iconChangedListener);\n }\n setIconChangedListener(google.maps.event.addListener(instance, 'icon_changed', onIconChanged));\n }\n }, [onIconChanged]);\n useEffect(function () {\n if (instance && onPositionChanged) {\n if (positionChangedListener !== null) {\n google.maps.event.removeListener(positionChangedListener);\n }\n setPositionChangedListener(google.maps.event.addListener(instance, 'position_changed', onPositionChanged));\n }\n }, [onPositionChanged]);\n useEffect(function () {\n if (instance && onShapeChanged) {\n if (shapeChangedListener !== null) {\n google.maps.event.removeListener(shapeChangedListener);\n }\n setShapeChangedListener(google.maps.event.addListener(instance, 'shape_changed', onShapeChanged));\n }\n }, [onShapeChanged]);\n useEffect(function () {\n if (instance && onTitleChanged) {\n if (titleChangedListener !== null) {\n google.maps.event.removeListener(titleChangedListener);\n }\n setTitleChangedListener(google.maps.event.addListener(instance, 'title_changed', onTitleChanged));\n }\n }, [onTitleChanged]);\n useEffect(function () {\n if (instance && onVisibleChanged) {\n if (visibleChangedListener !== null) {\n google.maps.event.removeListener(visibleChangedListener);\n }\n setVisibleChangedListener(google.maps.event.addListener(instance, 'visible_changed', onVisibleChanged));\n }\n }, [onVisibleChanged]);\n useEffect(function () {\n if (instance && onZindexChanged) {\n if (zIndexChangedListener !== null) {\n google.maps.event.removeListener(zIndexChangedListener);\n }\n setZindexChangedListener(google.maps.event.addListener(instance, 'zindex_changed', onZindexChanged));\n }\n }, [onZindexChanged]);\n useEffect(function () {\n var markerOptions = __assign(__assign(__assign({}, (options || defaultOptions$5)), (clusterer ? defaultOptions$5 : { map: map })), { position: position });\n var marker = new google.maps.Marker(markerOptions);\n if (clusterer) {\n clusterer.addMarker(marker, !!noClustererRedraw);\n }\n else {\n marker.setMap(map);\n }\n if (position) {\n marker.setPosition(position);\n }\n if (typeof visible !== 'undefined') {\n marker.setVisible(visible);\n }\n if (typeof draggable !== 'undefined') {\n marker.setDraggable(draggable);\n }\n if (typeof clickable !== 'undefined') {\n marker.setClickable(clickable);\n }\n if (typeof cursor === 'string') {\n marker.setCursor(cursor);\n }\n if (icon) {\n marker.setIcon(icon);\n }\n if (typeof label !== 'undefined') {\n marker.setLabel(label);\n }\n if (typeof opacity !== 'undefined') {\n marker.setOpacity(opacity);\n }\n if (shape) {\n marker.setShape(shape);\n }\n if (typeof title === 'string') {\n marker.setTitle(title);\n }\n if (typeof zIndex === 'number') {\n marker.setZIndex(zIndex);\n }\n if (onDblClick) {\n setDblclickListener(google.maps.event.addListener(marker, 'dblclick', onDblClick));\n }\n if (onDragEnd) {\n setDragendListener(google.maps.event.addListener(marker, 'dragend', onDragEnd));\n }\n if (onDragStart) {\n setDragstartListener(google.maps.event.addListener(marker, 'dragstart', onDragStart));\n }\n if (onMouseDown) {\n setMousedownListener(google.maps.event.addListener(marker, 'mousedown', onMouseDown));\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(marker, 'mouseout', onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(marker, 'mouseover', onMouseOver));\n }\n if (onMouseUp) {\n setMouseupListener(google.maps.event.addListener(marker, 'mouseup', onMouseUp));\n }\n if (onRightClick) {\n setRightclickListener(google.maps.event.addListener(marker, 'rightclick', onRightClick));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(marker, 'click', onClick));\n }\n if (onDrag) {\n setDragListener(google.maps.event.addListener(marker, 'drag', onDrag));\n }\n if (onClickableChanged) {\n setClickableChangedListener(google.maps.event.addListener(marker, 'clickable_changed', onClickableChanged));\n }\n if (onCursorChanged) {\n setCursorChangedListener(google.maps.event.addListener(marker, 'cursor_changed', onCursorChanged));\n }\n if (onAnimationChanged) {\n setAnimationChangedListener(google.maps.event.addListener(marker, 'animation_changed', onAnimationChanged));\n }\n if (onDraggableChanged) {\n setDraggableChangedListener(google.maps.event.addListener(marker, 'draggable_changed', onDraggableChanged));\n }\n if (onFlatChanged) {\n setFlatChangedListener(google.maps.event.addListener(marker, 'flat_changed', onFlatChanged));\n }\n if (onIconChanged) {\n setIconChangedListener(google.maps.event.addListener(marker, 'icon_changed', onIconChanged));\n }\n if (onPositionChanged) {\n setPositionChangedListener(google.maps.event.addListener(marker, 'position_changed', onPositionChanged));\n }\n if (onShapeChanged) {\n setShapeChangedListener(google.maps.event.addListener(marker, 'shape_changed', onShapeChanged));\n }\n if (onTitleChanged) {\n setTitleChangedListener(google.maps.event.addListener(marker, 'title_changed', onTitleChanged));\n }\n if (onVisibleChanged) {\n setVisibleChangedListener(google.maps.event.addListener(marker, 'visible_changed', onVisibleChanged));\n }\n if (onZindexChanged) {\n setZindexChangedListener(google.maps.event.addListener(marker, 'zindex_changed', onZindexChanged));\n }\n setInstance(marker);\n if (onLoad) {\n onLoad(marker);\n }\n return function () {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (clickableChangedListener !== null) {\n google.maps.event.removeListener(clickableChangedListener);\n }\n if (cursorChangedListener !== null) {\n google.maps.event.removeListener(cursorChangedListener);\n }\n if (animationChangedListener !== null) {\n google.maps.event.removeListener(animationChangedListener);\n }\n if (draggableChangedListener !== null) {\n google.maps.event.removeListener(draggableChangedListener);\n }\n if (flatChangedListener !== null) {\n google.maps.event.removeListener(flatChangedListener);\n }\n if (iconChangedListener !== null) {\n google.maps.event.removeListener(iconChangedListener);\n }\n if (positionChangedListener !== null) {\n google.maps.event.removeListener(positionChangedListener);\n }\n if (titleChangedListener !== null) {\n google.maps.event.removeListener(titleChangedListener);\n }\n if (visibleChangedListener !== null) {\n google.maps.event.removeListener(visibleChangedListener);\n }\n if (zIndexChangedListener !== null) {\n google.maps.event.removeListener(zIndexChangedListener);\n }\n if (onUnmount) {\n onUnmount(marker);\n }\n if (clusterer) {\n clusterer.removeMarker(marker, !!noClustererRedraw);\n }\n else if (marker) {\n marker.setMap(null);\n }\n };\n }, []);\n var chx = useMemo(function () {\n return children\n ? Children.map(children, function (child) {\n if (!isValidElement(child)) {\n return child;\n }\n var elementChild = child;\n return cloneElement(elementChild, { anchor: instance });\n })\n : null;\n }, [children, instance]);\n return jsx(Fragment, { children: chx }) || null;\n}\nvar MarkerF = memo(MarkerFunctional);\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n function Marker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n return _this;\n }\n Marker.prototype.componentDidMount = function () {\n var markerOptions = __assign(__assign(__assign({}, (this.props.options || defaultOptions$5)), (this.props.clusterer ? defaultOptions$5 : { map: this.context })), { position: this.props.position });\n // Unfortunately we can't just do this in the contstructor, because the\n // `MapContext` might not be filled in yet.\n this.marker = new google.maps.Marker(markerOptions);\n if (this.props.clusterer) {\n this.props.clusterer.addMarker(this.marker, !!this.props.noClustererRedraw);\n }\n else {\n this.marker.setMap(this.context);\n }\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$f,\n eventMap: eventMap$f,\n prevProps: {},\n nextProps: this.props,\n instance: this.marker,\n });\n if (this.props.onLoad) {\n this.props.onLoad(this.marker);\n }\n };\n Marker.prototype.componentDidUpdate = function (prevProps) {\n if (this.marker) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$f,\n eventMap: eventMap$f,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.marker,\n });\n }\n };\n Marker.prototype.componentWillUnmount = function () {\n if (this.marker) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.marker);\n }\n unregisterEvents(this.registeredEvents);\n if (this.props.clusterer) {\n this.props.clusterer.removeMarker(this.marker, !!this.props.noClustererRedraw);\n }\n else {\n this.marker && this.marker.setMap(null);\n }\n }\n };\n Marker.prototype.render = function () {\n var _this = this;\n var children = null;\n if (this.props.children) {\n children = Children.map(this.props.children, function (child) {\n if (!isValidElement(child)) {\n return child;\n }\n var elementChild = child;\n return cloneElement(elementChild, { anchor: _this.marker });\n });\n }\n return children || null;\n };\n Marker.contextType = MapContext;\n return Marker;\n}(PureComponent));\n\nvar ClusterIcon = /** @class */ (function () {\n function ClusterIcon(cluster, styles) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView);\n this.cluster = cluster;\n this.clusterClassName = this.cluster.getClusterer().getClusterClass();\n this.className = this.clusterClassName;\n this.styles = styles;\n this.center = undefined;\n this.div = null;\n this.sums = null;\n this.visible = false;\n this.boundsChangedListener = null;\n this.url = '';\n this.height = 0;\n this.width = 0;\n this.anchorText = [0, 0];\n this.anchorIcon = [0, 0];\n this.textColor = 'black';\n this.textSize = 11;\n this.textDecoration = 'none';\n this.fontWeight = 'bold';\n this.fontStyle = 'normal';\n this.fontFamily = 'Arial,sans-serif';\n this.backgroundPosition = '0 0';\n this.cMouseDownInCluster = null;\n this.cDraggingMapByCluster = null;\n this.timeOut = null;\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n this.onBoundsChanged = this.onBoundsChanged.bind(this);\n this.onMouseDown = this.onMouseDown.bind(this);\n this.onClick = this.onClick.bind(this);\n this.onMouseOver = this.onMouseOver.bind(this);\n this.onMouseOut = this.onMouseOut.bind(this);\n this.onAdd = this.onAdd.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.draw = this.draw.bind(this);\n this.hide = this.hide.bind(this);\n this.show = this.show.bind(this);\n this.useStyle = this.useStyle.bind(this);\n this.setCenter = this.setCenter.bind(this);\n this.getPosFromLatLng = this.getPosFromLatLng.bind(this);\n }\n ClusterIcon.prototype.onBoundsChanged = function () {\n this.cDraggingMapByCluster = this.cMouseDownInCluster;\n };\n ClusterIcon.prototype.onMouseDown = function () {\n this.cMouseDownInCluster = true;\n this.cDraggingMapByCluster = false;\n };\n ClusterIcon.prototype.onClick = function (event) {\n this.cMouseDownInCluster = false;\n if (!this.cDraggingMapByCluster) {\n var markerClusterer_1 = this.cluster.getClusterer();\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(markerClusterer_1, 'click', this.cluster);\n google.maps.event.trigger(markerClusterer_1, 'clusterclick', this.cluster); // deprecated name\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer_1.getZoomOnClick()) {\n // Zoom into the cluster.\n var maxZoom_1 = markerClusterer_1.getMaxZoom();\n var bounds_1 = this.cluster.getBounds();\n var map = markerClusterer_1.getMap();\n if (map !== null && 'fitBounds' in map) {\n map.fitBounds(bounds_1);\n }\n // There is a fix for Issue 170 here:\n this.timeOut = window.setTimeout(function () {\n var map = markerClusterer_1.getMap();\n if (map !== null) {\n if ('fitBounds' in map) {\n map.fitBounds(bounds_1);\n }\n var zoom = map.getZoom() || 0;\n // Don't zoom beyond the max zoom level\n if (maxZoom_1 !== null &&\n zoom > maxZoom_1) {\n map.setZoom(maxZoom_1 + 1);\n }\n }\n }, 100);\n }\n // Prevent event propagation to the map:\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n };\n ClusterIcon.prototype.onMouseOver = function () {\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(this.cluster.getClusterer(), 'mouseover', this.cluster);\n };\n ClusterIcon.prototype.onMouseOut = function () {\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(this.cluster.getClusterer(), 'mouseout', this.cluster);\n };\n ClusterIcon.prototype.onAdd = function () {\n var _a;\n this.div = document.createElement('div');\n this.div.className = this.className;\n if (this.visible) {\n this.show();\n }\n (_a = this.getPanes()) === null || _a === void 0 ? void 0 : _a.overlayMouseTarget.appendChild(this.div);\n var map = this.getMap();\n if (map !== null) {\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(map, 'bounds_changed', this.onBoundsChanged);\n this.div.addEventListener('mousedown', this.onMouseDown);\n this.div.addEventListener('click', this.onClick);\n this.div.addEventListener('mouseover', this.onMouseOver);\n this.div.addEventListener('mouseout', this.onMouseOut);\n }\n };\n ClusterIcon.prototype.onRemove = function () {\n if (this.div && this.div.parentNode) {\n this.hide();\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener);\n }\n this.div.removeEventListener('mousedown', this.onMouseDown);\n this.div.removeEventListener('click', this.onClick);\n this.div.removeEventListener('mouseover', this.onMouseOver);\n this.div.removeEventListener('mouseout', this.onMouseOut);\n this.div.parentNode.removeChild(this.div);\n if (this.timeOut !== null) {\n window.clearTimeout(this.timeOut);\n this.timeOut = null;\n }\n this.div = null;\n }\n };\n ClusterIcon.prototype.draw = function () {\n if (this.visible && this.div !== null && this.center) {\n var pos = this.getPosFromLatLng(this.center);\n this.div.style.top = pos !== null ? \"\".concat(pos.y, \"px\") : '0';\n this.div.style.left = pos !== null ? \"\".concat(pos.x, \"px\") : '0';\n }\n };\n ClusterIcon.prototype.hide = function () {\n if (this.div) {\n this.div.style.display = 'none';\n }\n this.visible = false;\n };\n ClusterIcon.prototype.show = function () {\n var _a, _b, _c, _d, _e, _f;\n if (this.div && this.center) {\n var divTitle = this.sums === null ||\n typeof this.sums.title === 'undefined' ||\n this.sums.title === '' ? this.cluster.getClusterer().getTitle() : this.sums.title;\n // NOTE: values must be specified in px units\n var bp = this.backgroundPosition.split(' ');\n var spriteH = parseInt(((_a = bp[0]) === null || _a === void 0 ? void 0 : _a.replace(/^\\s+|\\s+$/g, '')) || '0', 10);\n var spriteV = parseInt(((_b = bp[1]) === null || _b === void 0 ? void 0 : _b.replace(/^\\s+|\\s+$/g, '')) || '0', 10);\n var pos = this.getPosFromLatLng(this.center);\n this.div.className = this.className;\n this.div.setAttribute('style', \"cursor: pointer; position: absolute; top: \".concat(pos !== null ? \"\".concat(pos.y, \"px\") : '0', \"; left: \").concat(pos !== null ? \"\".concat(pos.x, \"px\") : '0', \"; width: \").concat(this.width, \"px; height: \").concat(this.height, \"px; \"));\n var img = document.createElement('img');\n img.alt = divTitle;\n img.src = this.url;\n img.width = this.width;\n img.height = this.height;\n img.setAttribute('style', \"position: absolute; top: \".concat(spriteV, \"px; left: \").concat(spriteH, \"px\"));\n if (!this.cluster.getClusterer().enableRetinaIcons) {\n img.style.clip = \"rect(-\".concat(spriteV, \"px, -\").concat(spriteH + this.width, \"px, -\").concat(spriteV + this.height, \", -\").concat(spriteH, \")\");\n }\n var textElm = document.createElement('div');\n textElm.setAttribute('style', \"position: absolute; top: \".concat(this.anchorText[0], \"px; left: \").concat(this.anchorText[1], \"px; color: \").concat(this.textColor, \"; font-size: \").concat(this.textSize, \"px; font-family: \").concat(this.fontFamily, \"; font-weight: \").concat(this.fontWeight, \"; fontStyle: \").concat(this.fontStyle, \"; text-decoration: \").concat(this.textDecoration, \"; text-align: center; width: \").concat(this.width, \"px; line-height: \").concat(this.height, \"px\"));\n if ((_c = this.sums) === null || _c === void 0 ? void 0 : _c.text)\n textElm.innerText = \"\".concat((_d = this.sums) === null || _d === void 0 ? void 0 : _d.text);\n if ((_e = this.sums) === null || _e === void 0 ? void 0 : _e.html)\n textElm.innerHTML = \"\".concat((_f = this.sums) === null || _f === void 0 ? void 0 : _f.html);\n this.div.innerHTML = '';\n this.div.appendChild(img);\n this.div.appendChild(textElm);\n this.div.title = divTitle;\n this.div.style.display = '';\n }\n this.visible = true;\n };\n ClusterIcon.prototype.useStyle = function (sums) {\n this.sums = sums;\n var styles = this.cluster.getClusterer().getStyles();\n var style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))];\n if (style) {\n this.url = style.url;\n this.height = style.height;\n this.width = style.width;\n if (style.className) {\n this.className = \"\".concat(this.clusterClassName, \" \").concat(style.className);\n }\n this.anchorText = style.anchorText || [0, 0];\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2];\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 ClusterIcon.prototype.setCenter = function (center) {\n this.center = center;\n };\n ClusterIcon.prototype.getPosFromLatLng = function (latlng) {\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n if (pos !== null) {\n pos.x -= this.anchorIcon[1];\n pos.y -= this.anchorIcon[0];\n }\n return pos;\n };\n return ClusterIcon;\n}());\n\n/* global google */\nvar Cluster$1 = /** @class */ (function () {\n function Cluster(markerClusterer) {\n this.markerClusterer = markerClusterer;\n this.map = this.markerClusterer.getMap();\n this.gridSize = this.markerClusterer.getGridSize();\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize();\n this.averageCenter = this.markerClusterer.getAverageCenter();\n this.markers = [];\n this.center = undefined;\n this.bounds = null;\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles());\n this.getSize = this.getSize.bind(this);\n this.getMarkers = this.getMarkers.bind(this);\n this.getCenter = this.getCenter.bind(this);\n this.getMap = this.getMap.bind(this);\n this.getClusterer = this.getClusterer.bind(this);\n this.getBounds = this.getBounds.bind(this);\n this.remove = this.remove.bind(this);\n this.addMarker = this.addMarker.bind(this);\n this.isMarkerInClusterBounds = this.isMarkerInClusterBounds.bind(this);\n this.calculateBounds = this.calculateBounds.bind(this);\n this.updateIcon = this.updateIcon.bind(this);\n this.isMarkerAlreadyAdded = this.isMarkerAlreadyAdded.bind(this);\n }\n Cluster.prototype.getSize = function () {\n return this.markers.length;\n };\n Cluster.prototype.getMarkers = function () {\n return this.markers;\n };\n Cluster.prototype.getCenter = function () {\n return this.center;\n };\n Cluster.prototype.getMap = function () {\n return this.map;\n };\n Cluster.prototype.getClusterer = function () {\n return this.markerClusterer;\n };\n Cluster.prototype.getBounds = function () {\n var bounds = new google.maps.LatLngBounds(this.center, this.center);\n var markers = this.getMarkers();\n for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {\n var marker = markers_1[_i];\n var position = marker.getPosition();\n if (position) {\n bounds.extend(position);\n }\n }\n return bounds;\n };\n Cluster.prototype.remove = function () {\n this.clusterIcon.setMap(null);\n this.markers = [];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete this.markers;\n };\n Cluster.prototype.addMarker = function (marker) {\n var _a;\n if (this.isMarkerAlreadyAdded(marker)) {\n return false;\n }\n if (!this.center) {\n var position = marker.getPosition();\n if (position) {\n this.center = position;\n this.calculateBounds();\n }\n }\n else {\n if (this.averageCenter) {\n var position = marker.getPosition();\n if (position) {\n var length_1 = this.markers.length + 1;\n this.center = new google.maps.LatLng((this.center.lat() * (length_1 - 1) + position.lat()) / length_1, (this.center.lng() * (length_1 - 1) + position.lng()) / length_1);\n this.calculateBounds();\n }\n }\n }\n marker.isAdded = true;\n this.markers.push(marker);\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n var zoom = (_a = this.map) === null || _a === void 0 ? void 0 : _a.getZoom();\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\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 }\n else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (var _i = 0, _b = this.markers; _i < _b.length; _i++) {\n var markerElement = _b[_i];\n markerElement.setMap(null);\n }\n }\n else {\n marker.setMap(null);\n }\n return true;\n };\n Cluster.prototype.isMarkerInClusterBounds = function (marker) {\n if (this.bounds !== null) {\n var position = marker.getPosition();\n if (position) {\n return this.bounds.contains(position);\n }\n }\n return false;\n };\n Cluster.prototype.calculateBounds = function () {\n this.bounds = this.markerClusterer.getExtendedBounds(new google.maps.LatLngBounds(this.center, this.center));\n };\n Cluster.prototype.updateIcon = function () {\n var _a;\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n var zoom = (_a = this.map) === null || _a === void 0 ? void 0 : _a.getZoom();\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide();\n return;\n }\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide();\n return;\n }\n if (this.center) {\n this.clusterIcon.setCenter(this.center);\n }\n this.clusterIcon.useStyle(this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length));\n this.clusterIcon.show();\n };\n Cluster.prototype.isMarkerAlreadyAdded = function (marker) {\n if (this.markers.includes) {\n return this.markers.includes(marker);\n }\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true;\n }\n }\n return false;\n };\n return Cluster;\n}());\n\n/* global google */\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nfunction CALCULATOR(markers, numStyles) {\n var count = markers.length;\n var numberOfDigits = count.toString().length;\n var index = Math.min(numberOfDigits, numStyles);\n return {\n text: count.toString(),\n index: index,\n title: '',\n };\n}\nvar BATCH_SIZE = 2000;\nvar BATCH_SIZE_IE = 500;\nvar IMAGE_PATH = 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m';\nvar IMAGE_EXTENSION = 'png';\nvar IMAGE_SIZES = [53, 56, 66, 78, 90];\nvar CLUSTERER_CLASS = 'cluster';\nvar Clusterer = /** @class */ (function () {\n function Clusterer(map, optMarkers, optOptions) {\n if (optMarkers === void 0) { optMarkers = []; }\n if (optOptions === void 0) { optOptions = {}; }\n this.getMinimumClusterSize = this.getMinimumClusterSize.bind(this);\n this.setMinimumClusterSize = this.setMinimumClusterSize.bind(this);\n this.getEnableRetinaIcons = this.getEnableRetinaIcons.bind(this);\n this.setEnableRetinaIcons = this.setEnableRetinaIcons.bind(this);\n this.addToClosestCluster = this.addToClosestCluster.bind(this);\n this.getImageExtension = this.getImageExtension.bind(this);\n this.setImageExtension = this.setImageExtension.bind(this);\n this.getExtendedBounds = this.getExtendedBounds.bind(this);\n this.getAverageCenter = this.getAverageCenter.bind(this);\n this.setAverageCenter = this.setAverageCenter.bind(this);\n this.getTotalClusters = this.getTotalClusters.bind(this);\n this.fitMapToMarkers = this.fitMapToMarkers.bind(this);\n this.getIgnoreHidden = this.getIgnoreHidden.bind(this);\n this.setIgnoreHidden = this.setIgnoreHidden.bind(this);\n this.getClusterClass = this.getClusterClass.bind(this);\n this.setClusterClass = this.setClusterClass.bind(this);\n this.getTotalMarkers = this.getTotalMarkers.bind(this);\n this.getZoomOnClick = this.getZoomOnClick.bind(this);\n this.setZoomOnClick = this.setZoomOnClick.bind(this);\n this.getBatchSizeIE = this.getBatchSizeIE.bind(this);\n this.setBatchSizeIE = this.setBatchSizeIE.bind(this);\n this.createClusters = this.createClusters.bind(this);\n this.onZoomChanged = this.onZoomChanged.bind(this);\n this.getImageSizes = this.getImageSizes.bind(this);\n this.setImageSizes = this.setImageSizes.bind(this);\n this.getCalculator = this.getCalculator.bind(this);\n this.setCalculator = this.setCalculator.bind(this);\n this.removeMarkers = this.removeMarkers.bind(this);\n this.resetViewport = this.resetViewport.bind(this);\n this.getImagePath = this.getImagePath.bind(this);\n this.setImagePath = this.setImagePath.bind(this);\n this.pushMarkerTo = this.pushMarkerTo.bind(this);\n this.removeMarker = this.removeMarker.bind(this);\n this.clearMarkers = this.clearMarkers.bind(this);\n this.setupStyles = this.setupStyles.bind(this);\n this.getGridSize = this.getGridSize.bind(this);\n this.setGridSize = this.setGridSize.bind(this);\n this.getClusters = this.getClusters.bind(this);\n this.getMaxZoom = this.getMaxZoom.bind(this);\n this.setMaxZoom = this.setMaxZoom.bind(this);\n this.getMarkers = this.getMarkers.bind(this);\n this.addMarkers = this.addMarkers.bind(this);\n this.getStyles = this.getStyles.bind(this);\n this.setStyles = this.setStyles.bind(this);\n this.addMarker = this.addMarker.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.getTitle = this.getTitle.bind(this);\n this.setTitle = this.setTitle.bind(this);\n this.repaint = this.repaint.bind(this);\n this.onIdle = this.onIdle.bind(this);\n this.redraw = this.redraw.bind(this);\n this.onAdd = this.onAdd.bind(this);\n this.draw = this.draw.bind(this);\n this.extend = this.extend.bind(this);\n this.extend(Clusterer, google.maps.OverlayView);\n this.markers = [];\n this.clusters = [];\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n this.gridSize = optOptions.gridSize || 60;\n this.minClusterSize = optOptions.minimumClusterSize || 2;\n this.maxZoom = optOptions.maxZoom || null;\n this.styles = optOptions.styles || [];\n this.title = optOptions.title || '';\n this.zoomOnClick = true;\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick;\n }\n this.averageCenter = false;\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter;\n }\n this.ignoreHidden = false;\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden;\n }\n this.enableRetinaIcons = false;\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons;\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH;\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION;\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES;\n this.calculator = optOptions.calculator || CALCULATOR;\n this.batchSize = optOptions.batchSize || BATCH_SIZE;\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE;\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS;\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 this.timerRefStatic = null;\n this.setupStyles();\n this.addMarkers(optMarkers, true);\n this.setMap(map); // Note: this causes onAdd to be called\n }\n Clusterer.prototype.onZoomChanged = function () {\n var _a, _b;\n this.resetViewport(false);\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (((_a = this.getMap()) === null || _a === void 0 ? void 0 : _a.getZoom()) === (this.get('minZoom') || 0) ||\n ((_b = this.getMap()) === null || _b === void 0 ? void 0 : _b.getZoom()) === this.get('maxZoom')) {\n google.maps.event.trigger(this, 'idle');\n }\n };\n Clusterer.prototype.onIdle = function () {\n this.redraw();\n };\n Clusterer.prototype.onAdd = function () {\n var map = this.getMap();\n this.activeMap = map;\n this.ready = true;\n this.repaint();\n if (map !== null) {\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(map, 'zoom_changed', this.onZoomChanged),\n google.maps.event.addListener(map, 'idle', this.onIdle),\n ];\n }\n };\n Clusterer.prototype.onRemove = function () {\n // Put all the managed markers back on the map:\n for (var _i = 0, _a = this.markers; _i < _a.length; _i++) {\n var marker = _a[_i];\n if (marker.getMap() !== this.activeMap) {\n marker.setMap(this.activeMap);\n }\n }\n // Remove all clusters:\n for (var _b = 0, _c = this.clusters; _b < _c.length; _b++) {\n var cluster = _c[_b];\n cluster.remove();\n }\n this.clusters = [];\n // Remove map event listeners:\n for (var _d = 0, _e = this.listeners; _d < _e.length; _d++) {\n var listener = _e[_d];\n google.maps.event.removeListener(listener);\n }\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n };\n Clusterer.prototype.draw = function () { return; };\n Clusterer.prototype.getMap = function () { return null; };\n Clusterer.prototype.getPanes = function () { return null; };\n Clusterer.prototype.getProjection = function () {\n return {\n fromContainerPixelToLatLng: function () { return null; },\n fromDivPixelToLatLng: function () { return null; },\n fromLatLngToContainerPixel: function () { return null; },\n fromLatLngToDivPixel: function () { return null; },\n getVisibleRegion: function () { return null; },\n getWorldWidth: function () { return 0; }\n };\n };\n Clusterer.prototype.setMap = function () { return; };\n Clusterer.prototype.addListener = function () {\n return {\n remove: function () { return; }\n };\n };\n Clusterer.prototype.bindTo = function () { return; };\n Clusterer.prototype.get = function () { return; };\n Clusterer.prototype.notify = function () { return; };\n Clusterer.prototype.set = function () { return; };\n Clusterer.prototype.setValues = function () { return; };\n Clusterer.prototype.unbind = function () { return; };\n Clusterer.prototype.unbindAll = function () { return; };\n Clusterer.prototype.setupStyles = function () {\n if (this.styles.length > 0) {\n return;\n }\n for (var i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: \"\".concat(this.imagePath + (i + 1), \".\").concat(this.imageExtension),\n height: this.imageSizes[i] || 0,\n width: this.imageSizes[i] || 0,\n });\n }\n };\n Clusterer.prototype.fitMapToMarkers = function () {\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {\n var marker = markers_1[_i];\n var position = marker.getPosition();\n if (position) {\n bounds.extend(position);\n }\n }\n var map = this.getMap();\n if (map !== null && 'fitBounds' in map) {\n map.fitBounds(bounds);\n }\n };\n Clusterer.prototype.getGridSize = function () {\n return this.gridSize;\n };\n Clusterer.prototype.setGridSize = function (gridSize) {\n this.gridSize = gridSize;\n };\n Clusterer.prototype.getMinimumClusterSize = function () {\n return this.minClusterSize;\n };\n Clusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {\n this.minClusterSize = minimumClusterSize;\n };\n Clusterer.prototype.getMaxZoom = function () {\n return this.maxZoom;\n };\n Clusterer.prototype.setMaxZoom = function (maxZoom) {\n this.maxZoom = maxZoom;\n };\n Clusterer.prototype.getStyles = function () {\n return this.styles;\n };\n Clusterer.prototype.setStyles = function (styles) {\n this.styles = styles;\n };\n Clusterer.prototype.getTitle = function () {\n return this.title;\n };\n Clusterer.prototype.setTitle = function (title) {\n this.title = title;\n };\n Clusterer.prototype.getZoomOnClick = function () {\n return this.zoomOnClick;\n };\n Clusterer.prototype.setZoomOnClick = function (zoomOnClick) {\n this.zoomOnClick = zoomOnClick;\n };\n Clusterer.prototype.getAverageCenter = function () {\n return this.averageCenter;\n };\n Clusterer.prototype.setAverageCenter = function (averageCenter) {\n this.averageCenter = averageCenter;\n };\n Clusterer.prototype.getIgnoreHidden = function () {\n return this.ignoreHidden;\n };\n Clusterer.prototype.setIgnoreHidden = function (ignoreHidden) {\n this.ignoreHidden = ignoreHidden;\n };\n Clusterer.prototype.getEnableRetinaIcons = function () {\n return this.enableRetinaIcons;\n };\n Clusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {\n this.enableRetinaIcons = enableRetinaIcons;\n };\n Clusterer.prototype.getImageExtension = function () {\n return this.imageExtension;\n };\n Clusterer.prototype.setImageExtension = function (imageExtension) {\n this.imageExtension = imageExtension;\n };\n Clusterer.prototype.getImagePath = function () {\n return this.imagePath;\n };\n Clusterer.prototype.setImagePath = function (imagePath) {\n this.imagePath = imagePath;\n };\n Clusterer.prototype.getImageSizes = function () {\n return this.imageSizes;\n };\n Clusterer.prototype.setImageSizes = function (imageSizes) {\n this.imageSizes = imageSizes;\n };\n Clusterer.prototype.getCalculator = function () {\n return this.calculator;\n };\n Clusterer.prototype.setCalculator = function (calculator) {\n this.calculator = calculator;\n };\n Clusterer.prototype.getBatchSizeIE = function () {\n return this.batchSizeIE;\n };\n Clusterer.prototype.setBatchSizeIE = function (batchSizeIE) {\n this.batchSizeIE = batchSizeIE;\n };\n Clusterer.prototype.getClusterClass = function () {\n return this.clusterClass;\n };\n Clusterer.prototype.setClusterClass = function (clusterClass) {\n this.clusterClass = clusterClass;\n };\n Clusterer.prototype.getMarkers = function () {\n return this.markers;\n };\n Clusterer.prototype.getTotalMarkers = function () {\n return this.markers.length;\n };\n Clusterer.prototype.getClusters = function () {\n return this.clusters;\n };\n Clusterer.prototype.getTotalClusters = function () {\n return this.clusters.length;\n };\n Clusterer.prototype.addMarker = function (marker, optNoDraw) {\n this.pushMarkerTo(marker);\n if (!optNoDraw) {\n this.redraw();\n }\n };\n Clusterer.prototype.addMarkers = function (markers, optNoDraw) {\n for (var key in markers) {\n if (Object.prototype.hasOwnProperty.call(markers, key)) {\n var marker = markers[key];\n if (marker) {\n this.pushMarkerTo(marker);\n }\n }\n }\n if (!optNoDraw) {\n this.redraw();\n }\n };\n Clusterer.prototype.pushMarkerTo = function (marker) {\n var _this = this;\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n google.maps.event.addListener(marker, 'dragend', function () {\n if (_this.ready) {\n marker.isAdded = false;\n _this.repaint();\n }\n });\n }\n marker.isAdded = false;\n this.markers.push(marker);\n };\n Clusterer.prototype.removeMarker_ = function (marker) {\n var index = -1;\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker);\n }\n else {\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i;\n break;\n }\n }\n }\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\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 Clusterer.prototype.removeMarker = function (marker, optNoDraw) {\n var removed = this.removeMarker_(marker);\n if (!optNoDraw && removed) {\n this.repaint();\n }\n return removed;\n };\n Clusterer.prototype.removeMarkers = function (markers, optNoDraw) {\n var removed = false;\n for (var _i = 0, markers_2 = markers; _i < markers_2.length; _i++) {\n var marker = markers_2[_i];\n removed = removed || this.removeMarker_(marker);\n }\n if (!optNoDraw && removed) {\n this.repaint();\n }\n return removed;\n };\n Clusterer.prototype.clearMarkers = function () {\n this.resetViewport(true);\n this.markers = [];\n };\n Clusterer.prototype.repaint = function () {\n var oldClusters = this.clusters.slice();\n this.clusters = [];\n this.resetViewport(false);\n this.redraw();\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (var _i = 0, oldClusters_1 = oldClusters; _i < oldClusters_1.length; _i++) {\n var oldCluster = oldClusters_1[_i];\n oldCluster.remove();\n }\n }, 0);\n };\n Clusterer.prototype.getExtendedBounds = function (bounds) {\n var projection = this.getProjection();\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()));\n if (trPix !== null) {\n trPix.x += this.gridSize;\n trPix.y -= this.gridSize;\n }\n var blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()));\n if (blPix !== null) {\n blPix.x -= this.gridSize;\n blPix.y += this.gridSize;\n }\n // Extend the bounds to contain the new bounds.\n if (trPix !== null) {\n // Convert the pixel points back to LatLng nw\n var point1 = projection.fromDivPixelToLatLng(trPix);\n if (point1 !== null) {\n bounds.extend(point1);\n }\n }\n if (blPix !== null) {\n // Convert the pixel points back to LatLng sw\n var point2 = projection.fromDivPixelToLatLng(blPix);\n if (point2 !== null) {\n bounds.extend(point2);\n }\n }\n return bounds;\n };\n Clusterer.prototype.redraw = function () {\n // Redraws all the clusters.\n this.createClusters(0);\n };\n Clusterer.prototype.resetViewport = function (optHide) {\n // Remove all the clusters\n for (var _i = 0, _a = this.clusters; _i < _a.length; _i++) {\n var cluster = _a[_i];\n cluster.remove();\n }\n this.clusters = [];\n // Reset the markers to not be added and to be removed from the map.\n for (var _b = 0, _c = this.markers; _b < _c.length; _b++) {\n var marker = _c[_b];\n marker.isAdded = false;\n if (optHide) {\n marker.setMap(null);\n }\n }\n };\n Clusterer.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) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));\n };\n Clusterer.prototype.isMarkerInBounds = function (marker, bounds) {\n var position = marker.getPosition();\n if (position) {\n return bounds.contains(position);\n }\n return false;\n };\n Clusterer.prototype.addToClosestCluster = function (marker) {\n var cluster;\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (var _i = 0, _a = this.clusters; _i < _a.length; _i++) {\n var clusterElement = _a[_i];\n cluster = clusterElement;\n var center = cluster.getCenter();\n var position = marker.getPosition();\n if (center && position) {\n var d = this.distanceBetweenPoints(center, position);\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n }\n else {\n cluster = new Cluster$1(this);\n cluster.addMarker(marker);\n this.clusters.push(cluster);\n }\n };\n Clusterer.prototype.createClusters = function (iFirst) {\n var _this = this;\n if (!this.ready) {\n return;\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>Clusterer</code> begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this);\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete this.timerRefStatic;\n }\n }\n var map = this.getMap();\n var bounds = map !== null && 'getBounds' in map ? map.getBounds() : null;\n var zoom = (map === null || map === void 0 ? void 0 : map.getZoom()) || 0;\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 var mapBounds = zoom > 3\n ? new google.maps.LatLngBounds(bounds === null || bounds === void 0 ? void 0 : bounds.getSouthWest(), bounds === null || bounds === void 0 ? void 0 : bounds.getNorthEast())\n : new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n var extendedMapBounds = this.getExtendedBounds(mapBounds);\n var iLast = Math.min(iFirst + this.batchSize, this.markers.length);\n for (var i = iFirst; i < iLast; i++) {\n var marker = this.markers[i];\n if (marker && !marker.isAdded && this.isMarkerInBounds(marker, extendedMapBounds) && (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible()))) {\n this.addToClosestCluster(marker);\n }\n }\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(function () {\n _this.createClusters(iLast);\n }, 0);\n }\n else {\n this.timerRefStatic = null;\n /**\n * This event is fired when the <code>Clusterer</code> stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this);\n for (var _i = 0, _a = this.clusters; _i < _a.length; _i++) {\n var cluster = _a[_i];\n cluster.updateIcon();\n }\n }\n };\n Clusterer.prototype.extend = function (obj1, obj2) {\n return function applyExtend(object) {\n for (var property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var prop = property;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.prototype[prop] = object.prototype[prop];\n }\n return this;\n }.apply(obj1, [obj2]);\n };\n return Clusterer;\n}());\n\nvar eventMap$e = {\n onClick: 'click',\n onClusteringBegin: 'clusteringbegin',\n onClusteringEnd: 'clusteringend',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n};\nvar updaterMap$e = {\n averageCenter: function (instance, averageCenter) {\n instance.setAverageCenter(averageCenter);\n },\n batchSizeIE: function (instance, batchSizeIE) {\n instance.setBatchSizeIE(batchSizeIE);\n },\n calculator: function (instance, calculator) {\n instance.setCalculator(calculator);\n },\n clusterClass: function (instance, clusterClass) {\n instance.setClusterClass(clusterClass);\n },\n enableRetinaIcons: function (instance, enableRetinaIcons) {\n instance.setEnableRetinaIcons(enableRetinaIcons);\n },\n gridSize: function (instance, gridSize) {\n instance.setGridSize(gridSize);\n },\n ignoreHidden: function (instance, ignoreHidden) {\n instance.setIgnoreHidden(ignoreHidden);\n },\n imageExtension: function (instance, imageExtension) {\n instance.setImageExtension(imageExtension);\n },\n imagePath: function (instance, imagePath) {\n instance.setImagePath(imagePath);\n },\n imageSizes: function (instance, imageSizes) {\n instance.setImageSizes(imageSizes);\n },\n maxZoom: function (instance, maxZoom) {\n instance.setMaxZoom(maxZoom);\n },\n minimumClusterSize: function (instance, minimumClusterSize) {\n instance.setMinimumClusterSize(minimumClusterSize);\n },\n styles: function (instance, styles) {\n instance.setStyles(styles);\n },\n title: function (instance, title) {\n instance.setTitle(title);\n },\n zoomOnClick: function (instance, zoomOnClick) {\n instance.setZoomOnClick(zoomOnClick);\n },\n};\nvar defaultOptions$4 = {};\nfunction MarkerClustererFunctional(props) {\n var children = props.children, options = props.options, averageCenter = props.averageCenter, batchSizeIE = props.batchSizeIE, calculator = props.calculator, clusterClass = props.clusterClass, enableRetinaIcons = props.enableRetinaIcons, gridSize = props.gridSize, ignoreHidden = props.ignoreHidden, imageExtension = props.imageExtension, imagePath = props.imagePath, imageSizes = props.imageSizes, maxZoom = props.maxZoom, minimumClusterSize = props.minimumClusterSize, styles = props.styles, title = props.title, zoomOnClick = props.zoomOnClick, onClick = props.onClick, onClusteringBegin = props.onClusteringBegin, onClusteringEnd = props.onClusteringEnd, onMouseOver = props.onMouseOver, onMouseOut = props.onMouseOut, onLoad = props.onLoad, onUnmount = props.onUnmount;\n var _a = useState(null), instance = _a[0], setInstance = _a[1];\n var map = useContext(MapContext);\n var _b = useState(null), clickListener = _b[0], setClickListener = _b[1];\n var _c = useState(null), clusteringBeginListener = _c[0], setClusteringBeginListener = _c[1];\n var _d = useState(null), clusteringEndListener = _d[0], setClusteringEndListener = _d[1];\n var _e = useState(null), mouseoutListener = _e[0], setMouseoutListener = _e[1];\n var _f = useState(null), mouseoverListener = _f[0], setMouseoverListener = _f[1];\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, eventMap$e.onMouseOut, onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, eventMap$e.onMouseOver, onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, eventMap$e.onClick, onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onClusteringBegin) {\n if (clusteringBeginListener !== null) {\n google.maps.event.removeListener(clusteringBeginListener);\n }\n setClusteringBeginListener(google.maps.event.addListener(instance, eventMap$e.onClusteringBegin, onClusteringBegin));\n }\n }, [onClusteringBegin]);\n useEffect(function () {\n if (instance && onClusteringEnd) {\n if (clusteringEndListener !== null) {\n google.maps.event.removeListener(clusteringEndListener);\n }\n setClusteringBeginListener(google.maps.event.addListener(instance, eventMap$e.onClusteringEnd, onClusteringEnd));\n }\n }, [onClusteringEnd]);\n useEffect(function () {\n if (typeof averageCenter !== 'undefined' && instance !== null) {\n updaterMap$e.averageCenter(instance, averageCenter);\n }\n }, [instance, averageCenter]);\n useEffect(function () {\n if (typeof batchSizeIE !== 'undefined' && instance !== null) {\n updaterMap$e.batchSizeIE(instance, batchSizeIE);\n }\n }, [instance, batchSizeIE]);\n useEffect(function () {\n if (typeof calculator !== 'undefined' && instance !== null) {\n updaterMap$e.calculator(instance, calculator);\n }\n }, [instance, calculator]);\n useEffect(function () {\n if (typeof clusterClass !== 'undefined' && instance !== null) {\n updaterMap$e.clusterClass(instance, clusterClass);\n }\n }, [instance, clusterClass]);\n useEffect(function () {\n if (typeof enableRetinaIcons !== 'undefined' && instance !== null) {\n updaterMap$e.enableRetinaIcons(instance, enableRetinaIcons);\n }\n }, [instance, enableRetinaIcons]);\n useEffect(function () {\n if (typeof gridSize !== 'undefined' && instance !== null) {\n updaterMap$e.gridSize(instance, gridSize);\n }\n }, [instance, gridSize]);\n useEffect(function () {\n if (typeof ignoreHidden !== 'undefined' && instance !== null) {\n updaterMap$e.ignoreHidden(instance, ignoreHidden);\n }\n }, [instance, ignoreHidden]);\n useEffect(function () {\n if (typeof imageExtension !== 'undefined' && instance !== null) {\n updaterMap$e.imageExtension(instance, imageExtension);\n }\n }, [instance, imageExtension]);\n useEffect(function () {\n if (typeof imagePath !== 'undefined' && instance !== null) {\n updaterMap$e.imagePath(instance, imagePath);\n }\n }, [instance, imagePath]);\n useEffect(function () {\n if (typeof imageSizes !== 'undefined' && instance !== null) {\n updaterMap$e.imageSizes(instance, imageSizes);\n }\n }, [instance, imageSizes]);\n useEffect(function () {\n if (typeof maxZoom !== 'undefined' && instance !== null) {\n updaterMap$e.maxZoom(instance, maxZoom);\n }\n }, [instance, maxZoom]);\n useEffect(function () {\n if (typeof minimumClusterSize !== 'undefined' && instance !== null) {\n updaterMap$e.minimumClusterSize(instance, minimumClusterSize);\n }\n }, [instance, minimumClusterSize]);\n useEffect(function () {\n if (typeof styles !== 'undefined' && instance !== null) {\n updaterMap$e.styles(instance, styles);\n }\n }, [instance, styles]);\n useEffect(function () {\n if (typeof title !== 'undefined' && instance !== null) {\n updaterMap$e.title(instance, title);\n }\n }, [instance, title]);\n useEffect(function () {\n if (typeof zoomOnClick !== 'undefined' && instance !== null) {\n updaterMap$e.zoomOnClick(instance, zoomOnClick);\n }\n }, [instance, zoomOnClick]);\n useEffect(function () {\n if (!map)\n return;\n var clustererOptions = __assign({}, (options || defaultOptions$4));\n var clusterer = new Clusterer(map, [], clustererOptions);\n if (averageCenter) {\n updaterMap$e.averageCenter(clusterer, averageCenter);\n }\n if (batchSizeIE) {\n updaterMap$e.batchSizeIE(clusterer, batchSizeIE);\n }\n if (calculator) {\n updaterMap$e.calculator(clusterer, calculator);\n }\n if (clusterClass) {\n updaterMap$e.clusterClass(clusterer, clusterClass);\n }\n if (enableRetinaIcons) {\n updaterMap$e.enableRetinaIcons(clusterer, enableRetinaIcons);\n }\n if (gridSize) {\n updaterMap$e.gridSize(clusterer, gridSize);\n }\n if (ignoreHidden) {\n updaterMap$e.ignoreHidden(clusterer, ignoreHidden);\n }\n if (imageExtension) {\n updaterMap$e.imageExtension(clusterer, imageExtension);\n }\n if (imagePath) {\n updaterMap$e.imagePath(clusterer, imagePath);\n }\n if (imageSizes) {\n updaterMap$e.imageSizes(clusterer, imageSizes);\n }\n if (maxZoom) {\n updaterMap$e.maxZoom(clusterer, maxZoom);\n }\n if (minimumClusterSize) {\n updaterMap$e.minimumClusterSize(clusterer, minimumClusterSize);\n }\n if (styles) {\n updaterMap$e.styles(clusterer, styles);\n }\n if (title) {\n updaterMap$e.title(clusterer, title);\n }\n if (zoomOnClick) {\n updaterMap$e.zoomOnClick(clusterer, zoomOnClick);\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(clusterer, eventMap$e.onMouseOut, onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(clusterer, eventMap$e.onMouseOver, onMouseOver));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(clusterer, eventMap$e.onClick, onClick));\n }\n if (onClusteringBegin) {\n setClusteringBeginListener(google.maps.event.addListener(clusterer, eventMap$e.onClusteringBegin, onClusteringBegin));\n }\n if (onClusteringEnd) {\n setClusteringEndListener(google.maps.event.addListener(clusterer, eventMap$e.onClusteringEnd, onClusteringEnd));\n }\n setInstance(clusterer);\n if (onLoad) {\n onLoad(clusterer);\n }\n return function () {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (clusteringBeginListener !== null) {\n google.maps.event.removeListener(clusteringBeginListener);\n }\n if (clusteringEndListener !== null) {\n google.maps.event.removeListener(clusteringEndListener);\n }\n if (onUnmount) {\n onUnmount(clusterer);\n }\n };\n }, []);\n return instance !== null ? children(instance) || null : null;\n}\nvar MarkerClustererF = memo(MarkerClustererFunctional);\nvar ClustererComponent = /** @class */ (function (_super) {\n __extends(ClustererComponent, _super);\n function ClustererComponent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n markerClusterer: null,\n };\n _this.setClustererCallback = function () {\n if (_this.state.markerClusterer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.markerClusterer);\n }\n };\n return _this;\n }\n ClustererComponent.prototype.componentDidMount = function () {\n if (this.context) {\n var markerClusterer_1 = new Clusterer(this.context, [], this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$e,\n eventMap: eventMap$e,\n prevProps: {},\n nextProps: this.props,\n instance: markerClusterer_1,\n });\n this.setState(function () {\n return {\n markerClusterer: markerClusterer_1,\n };\n }, this.setClustererCallback);\n }\n };\n ClustererComponent.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.markerClusterer) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$e,\n eventMap: eventMap$e,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.markerClusterer,\n });\n }\n };\n ClustererComponent.prototype.componentWillUnmount = function () {\n if (this.state.markerClusterer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.markerClusterer);\n }\n unregisterEvents(this.registeredEvents);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.state.markerClusterer.setMap(null);\n }\n };\n ClustererComponent.prototype.render = function () {\n return this.state.markerClusterer !== null\n ? this.props.children(this.state.markerClusterer)\n : null;\n };\n ClustererComponent.contextType = MapContext;\n return ClustererComponent;\n}(PureComponent));\n\n// This handler prevents an event in the InfoBox from being passed on to the map.\nfunction cancelHandler(event) {\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n}\nvar InfoBox = /** @class */ (function () {\n function InfoBox(options) {\n if (options === void 0) { options = {}; }\n this.getCloseClickHandler = this.getCloseClickHandler.bind(this);\n this.closeClickHandler = this.closeClickHandler.bind(this);\n this.createInfoBoxDiv = this.createInfoBoxDiv.bind(this);\n this.addClickHandler = this.addClickHandler.bind(this);\n this.getCloseBoxImg = this.getCloseBoxImg.bind(this);\n this.getBoxWidths = this.getBoxWidths.bind(this);\n this.setBoxStyle = this.setBoxStyle.bind(this);\n this.setPosition = this.setPosition.bind(this);\n this.getPosition = this.getPosition.bind(this);\n this.setOptions = this.setOptions.bind(this);\n this.setContent = this.setContent.bind(this);\n this.setVisible = this.setVisible.bind(this);\n this.getContent = this.getContent.bind(this);\n this.getVisible = this.getVisible.bind(this);\n this.setZIndex = this.setZIndex.bind(this);\n this.getZIndex = this.getZIndex.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.panBox = this.panBox.bind(this);\n this.extend = this.extend.bind(this);\n this.close = this.close.bind(this);\n this.draw = this.draw.bind(this);\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this.open = this.open.bind(this);\n this.extend(InfoBox, google.maps.OverlayView);\n // Standard options (in common with google.maps.InfoWindow):\n this.content = options.content || '';\n this.disableAutoPan = options.disableAutoPan || false;\n this.maxWidth = options.maxWidth || 0;\n this.pixelOffset = options.pixelOffset || new google.maps.Size(0, 0);\n this.position = options.position || new google.maps.LatLng(0, 0);\n this.zIndex = options.zIndex || null;\n // Additional options (unique to InfoBox):\n this.boxClass = options.boxClass || 'infoBox';\n this.boxStyle = options.boxStyle || {};\n this.closeBoxMargin = options.closeBoxMargin || '2px';\n this.closeBoxURL = options.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';\n if (options.closeBoxURL === '') {\n this.closeBoxURL = '';\n }\n this.infoBoxClearance = options.infoBoxClearance || new google.maps.Size(1, 1);\n if (typeof options.visible === 'undefined') {\n if (typeof options.isHidden === 'undefined') {\n options.visible = true;\n }\n else {\n options.visible = !options.isHidden;\n }\n }\n this.isHidden = !options.visible;\n this.alignBottom = options.alignBottom || false;\n this.pane = options.pane || 'floatPane';\n this.enableEventPropagation = options.enableEventPropagation || false;\n this.div = null;\n this.closeListener = null;\n this.moveListener = null;\n this.mapListener = null;\n this.contextListener = null;\n this.eventListeners = null;\n this.fixedWidthSet = null;\n }\n InfoBox.prototype.createInfoBoxDiv = function () {\n var _this = this;\n // This handler ignores the current event in the InfoBox and conditionally prevents\n // the event from being passed on to the map. It is used for the contextmenu event.\n var ignoreHandler = function (event) {\n event.returnValue = false;\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (!_this.enableEventPropagation) {\n cancelHandler(event);\n }\n };\n if (!this.div) {\n this.div = document.createElement('div');\n this.setBoxStyle();\n if (typeof this.content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + this.content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(this.content);\n }\n var panes = this.getPanes();\n if (panes !== null) {\n panes[this.pane].appendChild(this.div); // Add the InfoBox div to the DOM\n }\n this.addClickHandler();\n if (this.div.style.width) {\n this.fixedWidthSet = true;\n }\n else {\n if (this.maxWidth !== 0 && this.div.offsetWidth > this.maxWidth) {\n this.div.style.width = this.maxWidth + 'px';\n this.fixedWidthSet = true;\n }\n else {\n // The following code is needed to overcome problems with MSIE\n var bw = this.getBoxWidths();\n this.div.style.width = this.div.offsetWidth - bw.left - bw.right + 'px';\n this.fixedWidthSet = false;\n }\n }\n this.panBox(this.disableAutoPan);\n if (!this.enableEventPropagation) {\n this.eventListeners = [];\n // Cancel event propagation.\n // Note: mousemove not included (to resolve Issue 152)\n var events = [\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click',\n 'dblclick',\n 'touchstart',\n 'touchend',\n 'touchmove',\n ];\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n this.eventListeners.push(google.maps.event.addListener(this.div, event_1, cancelHandler));\n }\n // Workaround for Google bug that causes the cursor to change to a pointer\n // when the mouse moves over a marker underneath InfoBox.\n this.eventListeners.push(google.maps.event.addListener(this.div, 'mouseover', function () {\n if (_this.div) {\n _this.div.style.cursor = 'default';\n }\n }));\n }\n this.contextListener = google.maps.event.addListener(this.div, 'contextmenu', ignoreHandler);\n /**\n * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.\n * @name InfoBox#domready\n * @event\n */\n google.maps.event.trigger(this, 'domready');\n }\n };\n InfoBox.prototype.getCloseBoxImg = function () {\n var img = '';\n if (this.closeBoxURL !== '') {\n img = '<img alt=\"\"';\n img += ' aria-hidden=\"true\"';\n img += \" src='\" + this.closeBoxURL + \"'\";\n img += ' align=right'; // Do this because Opera chokes on style='float: right;'\n img += \" style='\";\n img += ' position: relative;'; // Required by MSIE\n img += ' cursor: pointer;';\n img += ' margin: ' + this.closeBoxMargin + ';';\n img += \"'>\";\n }\n return img;\n };\n InfoBox.prototype.addClickHandler = function () {\n this.closeListener = this.div && this.div.firstChild && this.closeBoxURL !== ''\n ? google.maps.event.addListener(this.div.firstChild, 'click', this.getCloseClickHandler())\n : null;\n };\n InfoBox.prototype.closeClickHandler = function (event) {\n // 1.0.3 fix: Always prevent propagation of a close box click to the map:\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n /**\n * This event is fired when the InfoBox's close box is clicked.\n * @name InfoBox#closeclick\n * @event\n */\n google.maps.event.trigger(this, 'closeclick');\n this.close();\n };\n InfoBox.prototype.getCloseClickHandler = function () {\n return this.closeClickHandler;\n };\n InfoBox.prototype.panBox = function (disablePan) {\n if (this.div && !disablePan) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var map = this.getMap();\n // Only pan if attached to map, not panorama\n if (map instanceof google.maps.Map) {\n var xOffset = 0;\n var yOffset = 0;\n var bounds = map.getBounds();\n if (bounds && !bounds.contains(this.position)) {\n // Marker not in visible area of map, so set center\n // of map to the marker position first.\n map.setCenter(this.position);\n }\n var mapDiv = map.getDiv();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var mapWidth = mapDiv.offsetWidth;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var mapHeight = mapDiv.offsetHeight;\n var iwOffsetX = this.pixelOffset.width;\n var iwOffsetY = this.pixelOffset.height;\n var iwWidth = this.div.offsetWidth;\n var iwHeight = this.div.offsetHeight;\n var padX = this.infoBoxClearance.width;\n var padY = this.infoBoxClearance.height;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToContainerPixel(this.position);\n if (pixPosition !== null) {\n if (pixPosition.x < -iwOffsetX + padX) {\n xOffset = pixPosition.x + iwOffsetX - padX;\n }\n else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {\n xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;\n }\n if (this.alignBottom) {\n if (pixPosition.y < -iwOffsetY + padY + iwHeight) {\n yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;\n }\n else if (pixPosition.y + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;\n }\n }\n else {\n if (pixPosition.y < -iwOffsetY + padY) {\n yOffset = pixPosition.y + iwOffsetY - padY;\n }\n else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;\n }\n }\n }\n if (!(xOffset === 0 && yOffset === 0)) {\n // Move the map to the shifted center.\n map.panBy(xOffset, yOffset);\n }\n }\n }\n };\n InfoBox.prototype.setBoxStyle = function () {\n if (this.div) {\n // Apply style values from the style sheet defined in the boxClass parameter:\n this.div.className = this.boxClass;\n // Clear existing inline style values:\n this.div.style.cssText = '';\n // Apply style values defined in the boxStyle parameter:\n var boxStyle = this.boxStyle;\n for (var i in boxStyle) {\n if (Object.prototype.hasOwnProperty.call(boxStyle, i)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.div.style[i] = boxStyle[i];\n }\n }\n // Fix for iOS disappearing InfoBox problem\n // See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad\n this.div.style.webkitTransform = 'translateZ(0)';\n // Fix up opacity style for benefit of MSIE\n if (typeof this.div.style.opacity !== 'undefined' && this.div.style.opacity !== '') {\n // See http://www.quirksmode.org/css/opacity.html\n var opacity = parseFloat(this.div.style.opacity || '');\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.div.style.msFilter =\n '\"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')\"';\n this.div.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n }\n // Apply required styles\n this.div.style.position = 'absolute';\n this.div.style.visibility = 'hidden';\n if (this.zIndex !== null) {\n this.div.style.zIndex = this.zIndex + '';\n }\n if (!this.div.style.overflow) {\n this.div.style.overflow = 'auto';\n }\n }\n };\n InfoBox.prototype.getBoxWidths = function () {\n var bw = { top: 0, bottom: 0, left: 0, right: 0 };\n if (!this.div) {\n return bw;\n }\n if (document.defaultView) {\n var ownerDocument = this.div.ownerDocument;\n var computedStyle = ownerDocument && ownerDocument.defaultView\n ? ownerDocument.defaultView.getComputedStyle(this.div, '')\n : null;\n if (computedStyle) {\n // The computed styles are always in pixel units (good!)\n bw.top = parseInt(computedStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(computedStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(computedStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(computedStyle.borderRightWidth || '', 10) || 0;\n }\n }\n else if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n document.documentElement.currentStyle // MSIE\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var currentStyle = this.div.currentStyle;\n if (currentStyle) {\n // The current styles may not be in pixel units, but assume they are (bad!)\n bw.top = parseInt(currentStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(currentStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(currentStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(currentStyle.borderRightWidth || '', 10) || 0;\n }\n }\n return bw;\n };\n InfoBox.prototype.onRemove = function () {\n if (this.div && this.div.parentNode) {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n InfoBox.prototype.draw = function () {\n this.createInfoBoxDiv();\n if (this.div) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToDivPixel(this.position);\n if (pixPosition !== null) {\n this.div.style.left = pixPosition.x + this.pixelOffset.width + 'px';\n if (this.alignBottom) {\n this.div.style.bottom = -(pixPosition.y + this.pixelOffset.height) + 'px';\n }\n else {\n this.div.style.top = pixPosition.y + this.pixelOffset.height + 'px';\n }\n }\n if (this.isHidden) {\n this.div.style.visibility = 'hidden';\n }\n else {\n this.div.style.visibility = 'visible';\n }\n }\n };\n InfoBox.prototype.setOptions = function (options) {\n if (options === void 0) { options = {}; }\n if (typeof options.boxClass !== 'undefined') {\n // Must be first\n this.boxClass = options.boxClass;\n this.setBoxStyle();\n }\n if (typeof options.boxStyle !== 'undefined') {\n // Must be second\n this.boxStyle = options.boxStyle;\n this.setBoxStyle();\n }\n if (typeof options.content !== 'undefined') {\n this.setContent(options.content);\n }\n if (typeof options.disableAutoPan !== 'undefined') {\n this.disableAutoPan = options.disableAutoPan;\n }\n if (typeof options.maxWidth !== 'undefined') {\n this.maxWidth = options.maxWidth;\n }\n if (typeof options.pixelOffset !== 'undefined') {\n this.pixelOffset = options.pixelOffset;\n }\n if (typeof options.alignBottom !== 'undefined') {\n this.alignBottom = options.alignBottom;\n }\n if (typeof options.position !== 'undefined') {\n this.setPosition(options.position);\n }\n if (typeof options.zIndex !== 'undefined') {\n this.setZIndex(options.zIndex);\n }\n if (typeof options.closeBoxMargin !== 'undefined') {\n this.closeBoxMargin = options.closeBoxMargin;\n }\n if (typeof options.closeBoxURL !== 'undefined') {\n this.closeBoxURL = options.closeBoxURL;\n }\n if (typeof options.infoBoxClearance !== 'undefined') {\n this.infoBoxClearance = options.infoBoxClearance;\n }\n if (typeof options.isHidden !== 'undefined') {\n this.isHidden = options.isHidden;\n }\n if (typeof options.visible !== 'undefined') {\n this.isHidden = !options.visible;\n }\n if (typeof options.enableEventPropagation !== 'undefined') {\n this.enableEventPropagation = options.enableEventPropagation;\n }\n if (this.div) {\n this.draw();\n }\n };\n InfoBox.prototype.setContent = function (content) {\n this.content = content;\n if (this.div) {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n // Odd code required to make things work with MSIE.\n if (!this.fixedWidthSet) {\n this.div.style.width = '';\n }\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n // Perverse code required to make things work with MSIE.\n // (Ensures the close box does, in fact, float to the right.)\n if (!this.fixedWidthSet) {\n this.div.style.width = this.div.offsetWidth + 'px';\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n }\n this.addClickHandler();\n }\n /**\n * This event is fired when the content of the InfoBox changes.\n * @name InfoBox#content_changed\n * @event\n */\n google.maps.event.trigger(this, 'content_changed');\n };\n InfoBox.prototype.setPosition = function (latLng) {\n this.position = latLng;\n if (this.div) {\n this.draw();\n }\n /**\n * This event is fired when the position of the InfoBox changes.\n * @name InfoBox#position_changed\n * @event\n */\n google.maps.event.trigger(this, 'position_changed');\n };\n InfoBox.prototype.setVisible = function (isVisible) {\n this.isHidden = !isVisible;\n if (this.div) {\n this.div.style.visibility = this.isHidden ? 'hidden' : 'visible';\n }\n };\n InfoBox.prototype.setZIndex = function (index) {\n this.zIndex = index;\n if (this.div) {\n this.div.style.zIndex = index + '';\n }\n /**\n * This event is fired when the zIndex of the InfoBox changes.\n * @name InfoBox#zindex_changed\n * @event\n */\n google.maps.event.trigger(this, 'zindex_changed');\n };\n InfoBox.prototype.getContent = function () {\n return this.content;\n };\n InfoBox.prototype.getPosition = function () {\n return this.position;\n };\n InfoBox.prototype.getZIndex = function () {\n return this.zIndex;\n };\n InfoBox.prototype.getVisible = function () {\n var map = this.getMap();\n return typeof map === 'undefined' || map === null ? false : !this.isHidden;\n };\n InfoBox.prototype.show = function () {\n this.isHidden = false;\n if (this.div) {\n this.div.style.visibility = 'visible';\n }\n };\n InfoBox.prototype.hide = function () {\n this.isHidden = true;\n if (this.div) {\n this.div.style.visibility = 'hidden';\n }\n };\n InfoBox.prototype.open = function (map, anchor) {\n var _this = this;\n if (anchor) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.position = anchor.getPosition();\n this.moveListener = google.maps.event.addListener(anchor, 'position_changed', function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var position = anchor.getPosition();\n _this.setPosition(position);\n });\n this.mapListener = google.maps.event.addListener(anchor, 'map_changed', function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n _this.setMap(anchor.map);\n });\n }\n this.setMap(map);\n if (this.div) {\n this.panBox();\n }\n };\n InfoBox.prototype.close = function () {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n if (this.eventListeners) {\n for (var _i = 0, _a = this.eventListeners; _i < _a.length; _i++) {\n var eventListener = _a[_i];\n google.maps.event.removeListener(eventListener);\n }\n this.eventListeners = null;\n }\n if (this.moveListener) {\n google.maps.event.removeListener(this.moveListener);\n this.moveListener = null;\n }\n if (this.mapListener) {\n google.maps.event.removeListener(this.mapListener);\n this.mapListener = null;\n }\n if (this.contextListener) {\n google.maps.event.removeListener(this.contextListener);\n this.contextListener = null;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.setMap(null);\n };\n InfoBox.prototype.extend = function (obj1, obj2) {\n return function applyExtend(object) {\n for (var property in object.prototype) {\n if (!Object.prototype.hasOwnProperty.call(this, property)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.prototype[property] = object.prototype[property];\n }\n }\n return this;\n }.apply(obj1, [obj2]);\n };\n return InfoBox;\n}());\n\nvar eventMap$d = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed',\n};\nvar updaterMap$d = {\n options: function (instance, options) {\n instance.setOptions(options);\n },\n position: function (instance, position) {\n if (position instanceof google.maps.LatLng) {\n instance.setPosition(position);\n }\n else {\n instance.setPosition(new google.maps.LatLng(position.lat, position.lng));\n }\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n zIndex: function (instance, zIndex) {\n instance.setZIndex(zIndex);\n },\n};\nvar defaultOptions$3 = {};\nfunction InfoBoxFunctional(_a) {\n var children = _a.children, anchor = _a.anchor, options = _a.options, position = _a.position, zIndex = _a.zIndex, onCloseClick = _a.onCloseClick, onDomReady = _a.onDomReady, onContentChanged = _a.onContentChanged, onPositionChanged = _a.onPositionChanged, onZindexChanged = _a.onZindexChanged, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), closeClickListener = _c[0], setCloseClickListener = _c[1];\n var _d = useState(null), domReadyClickListener = _d[0], setDomReadyClickListener = _d[1];\n var _e = useState(null), contentChangedClickListener = _e[0], setContentChangedClickListener = _e[1];\n var _f = useState(null), positionChangedClickListener = _f[0], setPositionChangedClickListener = _f[1];\n var _g = useState(null), zIndexChangedClickListener = _g[0], setZindexChangedClickListener = _g[1];\n var containerElementRef = useRef(null);\n // Order does matter\n useEffect(function () {\n if (map && instance !== null) {\n instance.close();\n if (anchor) {\n instance.open(map, anchor);\n }\n else if (instance.getPosition()) {\n instance.open(map);\n }\n }\n }, [map, instance, anchor]);\n useEffect(function () {\n if (options && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (position && instance !== null) {\n var positionLatLng = position instanceof google.maps.LatLng\n ? position\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n : new google.maps.LatLng(position.lat, position.lng);\n instance.setPosition(positionLatLng);\n }\n }, [position]);\n useEffect(function () {\n if (typeof zIndex === 'number' && instance !== null) {\n instance.setZIndex(zIndex);\n }\n }, [zIndex]);\n useEffect(function () {\n if (instance && onCloseClick) {\n if (closeClickListener !== null) {\n google.maps.event.removeListener(closeClickListener);\n }\n setCloseClickListener(google.maps.event.addListener(instance, 'closeclick', onCloseClick));\n }\n }, [onCloseClick]);\n useEffect(function () {\n if (instance && onDomReady) {\n if (domReadyClickListener !== null) {\n google.maps.event.removeListener(domReadyClickListener);\n }\n setDomReadyClickListener(google.maps.event.addListener(instance, 'domready', onDomReady));\n }\n }, [onDomReady]);\n useEffect(function () {\n if (instance && onContentChanged) {\n if (contentChangedClickListener !== null) {\n google.maps.event.removeListener(contentChangedClickListener);\n }\n setContentChangedClickListener(google.maps.event.addListener(instance, 'content_changed', onContentChanged));\n }\n }, [onContentChanged]);\n useEffect(function () {\n if (instance && onPositionChanged) {\n if (positionChangedClickListener !== null) {\n google.maps.event.removeListener(positionChangedClickListener);\n }\n setPositionChangedClickListener(google.maps.event.addListener(instance, 'position_changed', onPositionChanged));\n }\n }, [onPositionChanged]);\n useEffect(function () {\n if (instance && onZindexChanged) {\n if (zIndexChangedClickListener !== null) {\n google.maps.event.removeListener(zIndexChangedClickListener);\n }\n setZindexChangedClickListener(google.maps.event.addListener(instance, 'zindex_changed', onZindexChanged));\n }\n }, [onZindexChanged]);\n useEffect(function () {\n if (map) {\n var _a = options || defaultOptions$3, position_1 = _a.position, infoBoxOptions = __rest$1(_a, [\"position\"]);\n var positionLatLng = void 0;\n if (position_1 && !(position_1 instanceof google.maps.LatLng)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n positionLatLng = new google.maps.LatLng(position_1.lat, position_1.lng);\n }\n var infoBox = new InfoBox(__assign(__assign({}, infoBoxOptions), (positionLatLng ? { position: positionLatLng } : {})));\n containerElementRef.current = document.createElement('div');\n setInstance(infoBox);\n if (onCloseClick) {\n setCloseClickListener(google.maps.event.addListener(infoBox, 'closeclick', onCloseClick));\n }\n if (onDomReady) {\n setDomReadyClickListener(google.maps.event.addListener(infoBox, 'domready', onDomReady));\n }\n if (onContentChanged) {\n setContentChangedClickListener(google.maps.event.addListener(infoBox, 'content_changed', onContentChanged));\n }\n if (onPositionChanged) {\n setPositionChangedClickListener(google.maps.event.addListener(infoBox, 'position_changed', onPositionChanged));\n }\n if (onZindexChanged) {\n setZindexChangedClickListener(google.maps.event.addListener(infoBox, 'zindex_changed', onZindexChanged));\n }\n infoBox.setContent(containerElementRef.current);\n if (anchor) {\n infoBox.open(map, anchor);\n }\n else if (infoBox.getPosition()) {\n infoBox.open(map);\n }\n else {\n invariant$1(false, 'You must provide either an anchor or a position prop for <InfoBox>.');\n }\n if (onLoad) {\n onLoad(infoBox);\n }\n }\n return function () {\n if (instance !== null) {\n if (closeClickListener) {\n google.maps.event.removeListener(closeClickListener);\n }\n if (contentChangedClickListener) {\n google.maps.event.removeListener(contentChangedClickListener);\n }\n if (domReadyClickListener) {\n google.maps.event.removeListener(domReadyClickListener);\n }\n if (positionChangedClickListener) {\n google.maps.event.removeListener(positionChangedClickListener);\n }\n if (zIndexChangedClickListener) {\n google.maps.event.removeListener(zIndexChangedClickListener);\n }\n if (onUnmount) {\n onUnmount(instance);\n }\n instance.close();\n }\n };\n }, []);\n return containerElementRef.current ? createPortal(Children.only(children), containerElementRef.current) : null;\n}\nvar InfoBoxF = memo(InfoBoxFunctional);\nvar InfoBoxComponent = /** @class */ (function (_super) {\n __extends(InfoBoxComponent, _super);\n function InfoBoxComponent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = null;\n _this.state = {\n infoBox: null,\n };\n _this.open = function (infoBox, anchor) {\n if (anchor) {\n if (_this.context !== null) {\n infoBox.open(_this.context, anchor);\n }\n }\n else if (infoBox.getPosition()) {\n if (_this.context !== null) {\n infoBox.open(_this.context);\n }\n }\n else {\n invariant$1(false, 'You must provide either an anchor or a position prop for <InfoBox>.');\n }\n };\n _this.setInfoBoxCallback = function () {\n if (_this.state.infoBox !== null && _this.containerElement !== null) {\n _this.state.infoBox.setContent(_this.containerElement);\n _this.open(_this.state.infoBox, _this.props.anchor);\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.infoBox);\n }\n }\n };\n return _this;\n }\n InfoBoxComponent.prototype.componentDidMount = function () {\n var _a = this.props.options || {}, position = _a.position, infoBoxOptions = __rest$1(_a, [\"position\"]);\n var positionLatLng;\n if (position && !(position instanceof google.maps.LatLng)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n positionLatLng = new google.maps.LatLng(position.lat, position.lng);\n }\n var infoBox = new InfoBox(__assign(__assign({}, infoBoxOptions), (positionLatLng ? { position: positionLatLng } : {})));\n this.containerElement = document.createElement('div');\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$d,\n eventMap: eventMap$d,\n prevProps: {},\n nextProps: this.props,\n instance: infoBox,\n });\n this.setState({ infoBox: infoBox }, this.setInfoBoxCallback);\n };\n InfoBoxComponent.prototype.componentDidUpdate = function (prevProps) {\n var infoBox = this.state.infoBox;\n if (infoBox !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$d,\n eventMap: eventMap$d,\n prevProps: prevProps,\n nextProps: this.props,\n instance: infoBox,\n });\n }\n };\n InfoBoxComponent.prototype.componentWillUnmount = function () {\n var onUnmount = this.props.onUnmount;\n var infoBox = this.state.infoBox;\n if (infoBox !== null) {\n if (onUnmount) {\n onUnmount(infoBox);\n }\n unregisterEvents(this.registeredEvents);\n infoBox.close();\n }\n };\n InfoBoxComponent.prototype.render = function () {\n return this.containerElement ? createPortal(Children.only(this.props.children), this.containerElement) : null;\n };\n InfoBoxComponent.contextType = MapContext;\n return InfoBoxComponent;\n}(PureComponent));\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\nvar equal = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqual);\n\nconst ARRAY_TYPES = [\n Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nclass KDBush {\n\n /**\n * Creates an index from raw `ArrayBuffer` data.\n * @param {ArrayBuffer} data\n */\n static from(data) {\n if (!(data instanceof ArrayBuffer)) {\n throw new Error('Data must be an instance of ArrayBuffer.');\n }\n const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n if (magic !== 0xdb) {\n throw new Error('Data does not appear to be in a KDBush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, 2, 1);\n const [numItems] = new Uint32Array(data, 4, 1);\n\n return new KDBush(numItems, nodeSize, ArrayType, data);\n }\n\n /**\n * Creates an index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBuffer} [data] (For internal use only)\n */\n constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n if (isNaN(numItems) || numItems < 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.ArrayType = ArrayType;\n this.IndexArrayType = numItems < 65536 ? Uint16Array : Uint32Array;\n\n const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n const padCoords = (8 - idsByteSize % 8) % 8;\n\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n\n if (data && (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n this.data = data;\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = numItems * 2;\n this._finished = true;\n } else { // initialize a new index\n this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = 0;\n this._finished = false;\n\n // set header\n new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n new Uint32Array(this.data, 4, 1)[0] = numItems;\n }\n }\n\n /**\n * Add a point to the index.\n * @param {number} x\n * @param {number} y\n * @returns {number} An incremental index associated with the added item (starting from `0`).\n */\n add(x, y) {\n const index = this._pos >> 1;\n this.ids[index] = index;\n this.coords[this._pos++] = x;\n this.coords[this._pos++] = y;\n return index;\n }\n\n /**\n * Perform indexing of the added points.\n */\n finish() {\n const numAdded = this._pos >> 1;\n if (numAdded !== this.numItems) {\n throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n }\n // kd-sort both arrays for efficient search\n sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n this._finished = true;\n return this;\n }\n\n /**\n * Search the index for items within a given bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number[]} An array of indices correponding to the found items.\n */\n range(minX, minY, maxX, maxY) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n\n // recursively search for items in range in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n\n /**\n * Search the index for items within a given radius.\n * @param {number} qx\n * @param {number} qy\n * @param {number} r Query radius.\n * @returns {number[]} An array of indices correponding to the found items.\n */\n within(qx, qy, r) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n const r2 = r * r;\n\n // recursively search for items within radius in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n if (right - left <= nodeSize) return;\n\n const m = (left + right) >> 1; // middle index\n\n // sort ids and coords around the middle index so that the halves lie\n // either left/right or top/bottom correspondingly (taking turns)\n select(ids, coords, m, left, right, axis);\n\n // recursively kd-sort first half and second half on the opposite axis\n sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, axis);\n }\n\n const t = coords[2 * k + axis];\n let i = left;\n let j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + axis] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + axis] < t) i++;\n while (coords[2 * j + axis] > t) j--;\n }\n\n if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType<TypedArrayConstructor>} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nconst defaultOptions$2 = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: props => props // props => ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp => ((x) => { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\nclass Supercluster {\n constructor(options) {\n this.options = Object.assign(Object.create(defaultOptions$2), options);\n this.trees = new Array(this.options.maxZoom + 1);\n this.stride = this.options.reduce ? 7 : 6;\n this.clusterProps = [];\n }\n\n load(points) {\n const {log, minZoom, maxZoom} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${ points.length } points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n const data = [];\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n if (!p.geometry) continue;\n\n const [lng, lat] = p.geometry.coordinates;\n const x = fround(lngX(lng));\n const y = fround(latY(lat));\n // store internal point/cluster data in flat numeric arrays for performance\n data.push(\n x, y, // projected point coordinates\n Infinity, // the last zoom the point was processed at\n i, // index of the source feature in the original input array\n -1, // parent cluster id\n 1 // number of points in a cluster\n );\n if (this.options.reduce) data.push(0); // noop\n }\n let tree = this.trees[maxZoom + 1] = this._createTree(data);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n tree = this.trees[z] = this._createTree(this._cluster(tree, z));\n\n if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, +Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n\n return this;\n }\n\n getClusters(bbox, zoom) {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this._limitZoom(zoom)];\n const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n const data = tree.data;\n const clusters = [];\n for (const id of ids) {\n const k = this.stride * id;\n clusters.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n return clusters;\n }\n\n getChildren(clusterId) {\n const originId = this._getOriginId(clusterId);\n const originZoom = this._getOriginZoom(clusterId);\n const errorMsg = 'No cluster with the specified id.';\n\n const tree = this.trees[originZoom];\n if (!tree) throw new Error(errorMsg);\n\n const data = tree.data;\n if (originId * this.stride >= data.length) throw new Error(errorMsg);\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const x = data[originId * this.stride];\n const y = data[originId * this.stride + 1];\n const ids = tree.within(x, y, r);\n const children = [];\n for (const id of ids) {\n const k = id * this.stride;\n if (data[k + OFFSET_PARENT] === clusterId) {\n children.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n }\n\n if (children.length === 0) throw new Error(errorMsg);\n\n return children;\n }\n\n getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n getTile(z, x, y) {\n const tree = this.trees[this._limitZoom(z)];\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.data, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.data, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.data, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n }\n\n getClusterExpansionZoom(clusterId) {\n let expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n const children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) break;\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n }\n\n _appendLeaves(result, clusterId, limit, offset, skipped) {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n _createTree(data) {\n const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array);\n for (let i = 0; i < data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n tree.finish();\n tree.data = data;\n return tree;\n }\n\n _addTileFeatures(ids, data, x, y, z2, tile) {\n for (const i of ids) {\n const k = i * this.stride;\n const isCluster = data[k + OFFSET_NUM] > 1;\n\n let tags, px, py;\n if (isCluster) {\n tags = getClusterProperties(data, k, this.clusterProps);\n px = data[k];\n py = data[k + 1];\n } else {\n const p = this.points[data[k + OFFSET_ID]];\n tags = p.properties;\n const [lng, lat] = p.geometry.coordinates;\n px = lngX(lng);\n py = latY(lat);\n }\n\n const f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id;\n if (isCluster || this.options.generateId) {\n // optionally generate id for points\n id = data[k + OFFSET_ID];\n } else {\n // keep id if already assigned\n id = this.points[data[k + OFFSET_ID]].id;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n _cluster(tree, zoom) {\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n const data = tree.data;\n const nextData = [];\n const stride = this.stride;\n\n // loop through each point\n for (let i = 0; i < data.length; i += stride) {\n // if we've already visited the point at this zoom level, skip it\n if (data[i + OFFSET_ZOOM] <= zoom) continue;\n data[i + OFFSET_ZOOM] = zoom;\n\n // find all nearby points\n const x = data[i];\n const y = data[i + 1];\n const neighborIds = tree.within(data[i], data[i + 1], r);\n\n const numPointsOrigin = data[i + OFFSET_NUM];\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n // filter out neighbors that are already processed\n if (data[k + OFFSET_ZOOM] > zoom) numPoints += data[k + OFFSET_NUM];\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = x * numPointsOrigin;\n let wy = y * numPointsOrigin;\n\n let clusterProperties;\n let clusterPropIndex = -1;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = ((i / stride | 0) << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = data[k + OFFSET_NUM];\n wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n wy += data[k + 1] * numPoints2;\n\n data[k + OFFSET_PARENT] = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this._map(data, i, true);\n clusterPropIndex = this.clusterProps.length;\n this.clusterProps.push(clusterProperties);\n }\n reduce(clusterProperties, this._map(data, k));\n }\n }\n\n data[i + OFFSET_PARENT] = id;\n nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n if (reduce) nextData.push(clusterPropIndex);\n\n } else { // left points as unclustered\n for (let j = 0; j < stride; j++) nextData.push(data[i + j]);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom;\n for (let j = 0; j < stride; j++) nextData.push(data[k + j]);\n }\n }\n }\n }\n\n return nextData;\n }\n\n // get index of the point from which the cluster originated\n _getOriginId(clusterId) {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n _getOriginZoom(clusterId) {\n return (clusterId - this.points.length) % 32;\n }\n\n _map(data, i, clone) {\n if (data[i + OFFSET_NUM] > 1) {\n const props = this.clusterProps[data[i + OFFSET_PROP]];\n return clone ? Object.assign({}, props) : props;\n }\n const original = this.points[data[i + OFFSET_ID]].properties;\n const result = this.options.map(original);\n return clone && result === original ? Object.assign({}, result) : result;\n }\n}\n\nfunction getClusterJSON(data, i, clusterProps) {\n return {\n type: 'Feature',\n id: data[i + OFFSET_ID],\n properties: getClusterProperties(data, i, clusterProps),\n geometry: {\n type: 'Point',\n coordinates: [xLng(data[i]), yLat(data[i + 1])]\n }\n };\n}\n\nfunction getClusterProperties(data, i, clusterProps) {\n const count = data[i + OFFSET_NUM];\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n const propIndex = data[i + OFFSET_PROP];\n const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n return Object.assign(properties, {\n cluster: true,\n cluster_id: data[i + OFFSET_ID],\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n const sin = Math.sin(lat * Math.PI / 180);\n const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\n/**\n * Copyright 2023 Google LLC\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 * util class that creates a common set of convenience functions to wrap\n * shared behavior of Advanced Markers and Markers.\n */\nclass MarkerUtils {\n static isAdvancedMarkerAvailable(map) {\n return (google.maps.marker &&\n map.getMapCapabilities().isAdvancedMarkersAvailable === true);\n }\n static isAdvancedMarker(marker) {\n return (google.maps.marker &&\n marker instanceof google.maps.marker.AdvancedMarkerElement);\n }\n static setMap(marker, map) {\n if (this.isAdvancedMarker(marker)) {\n marker.map = map;\n }\n else {\n marker.setMap(map);\n }\n }\n static getPosition(marker) {\n // SuperClusterAlgorithm.calculate expects a LatLng instance so we fake it for Adv Markers\n if (this.isAdvancedMarker(marker)) {\n if (marker.position) {\n if (marker.position instanceof google.maps.LatLng) {\n return marker.position;\n }\n // since we can't cast to LatLngLiteral for reasons =(\n if (marker.position.lat && marker.position.lng) {\n return new google.maps.LatLng(marker.position.lat, marker.position.lng);\n }\n }\n return new google.maps.LatLng(null);\n }\n return marker.getPosition();\n }\n static getVisible(marker) {\n if (this.isAdvancedMarker(marker)) {\n /**\n * Always return true for Advanced Markers because the clusterer\n * uses getVisible as a way to count legacy markers not as an actual\n * indicator of visibility for some reason. Even when markers are hidden\n * Marker.getVisible returns `true` and this is used to set the marker count\n * on the cluster. See the behavior of Cluster.count\n */\n return true;\n }\n return marker.getVisible();\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 */\nclass Cluster {\n constructor({ markers, position }) {\n this.markers = markers;\n if (position) {\n if (position instanceof google.maps.LatLng) {\n this._position = position;\n }\n else {\n this._position = new google.maps.LatLng(position);\n }\n }\n }\n get bounds() {\n if (this.markers.length === 0 && !this._position) {\n return;\n }\n const bounds = new google.maps.LatLngBounds(this._position, this._position);\n for (const marker of this.markers) {\n bounds.extend(MarkerUtils.getPosition(marker));\n }\n return bounds;\n }\n get position() {\n return this._position || this.bounds.getCenter();\n }\n /**\n * Get the count of **visible** markers.\n */\n get count() {\n return this.markers.filter((m) => MarkerUtils.getVisible(m)).length;\n }\n /**\n * Add a marker to the cluster.\n */\n push(marker) {\n this.markers.push(marker);\n }\n /**\n * Cleanup references and remove marker from map.\n */\n delete() {\n if (this.marker) {\n MarkerUtils.setMap(this.marker, null);\n this.marker = undefined;\n }\n this.markers.length = 0;\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 * Returns the markers visible in a padded map viewport\n *\n * @param map\n * @param mapCanvasProjection\n * @param markers The list of marker to filter\n * @param viewportPaddingPixels The padding in pixel\n * @returns The list of markers in the padded viewport\n */\nconst filterMarkersToPaddedViewport = (map, mapCanvasProjection, markers, viewportPaddingPixels) => {\n const extendedMapBounds = extendBoundsToPaddedViewport(map.getBounds(), mapCanvasProjection, viewportPaddingPixels);\n return markers.filter((marker) => extendedMapBounds.contains(MarkerUtils.getPosition(marker)));\n};\n/**\n * Extends a bounds by a number of pixels in each direction\n */\nconst extendBoundsToPaddedViewport = (bounds, projection, numPixels) => {\n const { northEast, southWest } = latLngBoundsToPixelBounds(bounds, projection);\n const extendedPixelBounds = extendPixelBounds({ northEast, southWest }, numPixels);\n return pixelBoundsToLatLngBounds(extendedPixelBounds, projection);\n};\n/**\n * Gets the extended bounds as a bbox [westLng, southLat, eastLng, northLat]\n */\nconst getPaddedViewport = (bounds, projection, pixels) => {\n const extended = extendBoundsToPaddedViewport(bounds, projection, pixels);\n const ne = extended.getNorthEast();\n const sw = extended.getSouthWest();\n return [sw.lng(), sw.lat(), ne.lng(), ne.lat()];\n};\n/**\n * Returns the distance between 2 positions.\n *\n * @hidden\n */\nconst distanceBetweenPoints = (p1, p2) => {\n const R = 6371; // Radius of the Earth in km\n const dLat = ((p2.lat - p1.lat) * Math.PI) / 180;\n const dLon = ((p2.lng - p1.lng) * Math.PI) / 180;\n const sinDLat = Math.sin(dLat / 2);\n const sinDLon = Math.sin(dLon / 2);\n const a = sinDLat * sinDLat +\n Math.cos((p1.lat * Math.PI) / 180) *\n Math.cos((p2.lat * Math.PI) / 180) *\n sinDLon *\n sinDLon;\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n};\n/**\n * Converts a LatLng bound to pixels.\n *\n * @hidden\n */\nconst latLngBoundsToPixelBounds = (bounds, projection) => {\n return {\n northEast: projection.fromLatLngToDivPixel(bounds.getNorthEast()),\n southWest: projection.fromLatLngToDivPixel(bounds.getSouthWest()),\n };\n};\n/**\n * Extends a pixel bounds by numPixels in all directions.\n *\n * @hidden\n */\nconst extendPixelBounds = ({ northEast, southWest }, numPixels) => {\n northEast.x += numPixels;\n northEast.y -= numPixels;\n southWest.x -= numPixels;\n southWest.y += numPixels;\n return { northEast, southWest };\n};\n/**\n * @hidden\n */\nconst pixelBoundsToLatLngBounds = ({ northEast, southWest }, projection) => {\n const sw = projection.fromDivPixelToLatLng(southWest);\n const ne = projection.fromDivPixelToLatLng(northEast);\n return new google.maps.LatLngBounds(sw, ne);\n};\n\n/**\n * Copyright 2021 Google LLC\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 * @hidden\n */\nclass AbstractAlgorithm {\n constructor({ maxZoom = 16 }) {\n this.maxZoom = maxZoom;\n }\n /**\n * Helper function to bypass clustering based upon some map state such as\n * zoom, number of markers, etc.\n *\n * ```typescript\n * cluster({markers, map}: AlgorithmInput): Cluster[] {\n * if (shouldBypassClustering(map)) {\n * return this.noop({markers})\n * }\n * }\n * ```\n */\n noop({ markers, }) {\n return noop$1(markers);\n }\n}\n/**\n * Abstract viewport algorithm proves a class to filter markers by a padded\n * viewport. This is a common optimization.\n *\n * @hidden\n */\nclass AbstractViewportAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var { viewportPadding = 60 } = _a, options = __rest(_a, [\"viewportPadding\"]);\n super(options);\n this.viewportPadding = 60;\n this.viewportPadding = viewportPadding;\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n }),\n changed: false,\n };\n }\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\n map,\n mapCanvasProjection,\n }),\n };\n }\n}\n/**\n * @hidden\n */\nconst noop$1 = (markers) => {\n const clusters = markers.map((marker) => new Cluster({\n position: MarkerUtils.getPosition(marker),\n markers: [marker],\n }));\n return clusters;\n};\n\n/**\n * Copyright 2021 Google LLC\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 * The default Grid algorithm historically used in Google Maps marker\n * clustering.\n *\n * The Grid algorithm does not implement caching and markers may flash as the\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\n */\nclass GridAlgorithm extends AbstractViewportAlgorithm {\n constructor(_a) {\n var { maxDistance = 40000, gridSize = 40 } = _a, options = __rest(_a, [\"maxDistance\", \"gridSize\"]);\n super(options);\n this.clusters = [];\n this.state = { zoom: -1 };\n this.maxDistance = maxDistance;\n this.gridSize = gridSize;\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n const state = { zoom: map.getZoom() };\n let changed = false;\n if (this.state.zoom >= this.maxZoom && state.zoom >= this.maxZoom) ;\n else {\n changed = !equal(this.state, state);\n }\n this.state = state;\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n }),\n changed,\n };\n }\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\n map,\n mapCanvasProjection,\n }),\n };\n }\n cluster({ markers, map, mapCanvasProjection, }) {\n this.clusters = [];\n markers.forEach((marker) => {\n this.addToClosestCluster(marker, map, mapCanvasProjection);\n });\n return this.clusters;\n }\n addToClosestCluster(marker, map, projection) {\n let maxDistance = this.maxDistance; // Some large number\n let cluster = null;\n for (let i = 0; i < this.clusters.length; i++) {\n const candidate = this.clusters[i];\n const distance = distanceBetweenPoints(candidate.bounds.getCenter().toJSON(), MarkerUtils.getPosition(marker).toJSON());\n if (distance < maxDistance) {\n maxDistance = distance;\n cluster = candidate;\n }\n }\n if (cluster &&\n extendBoundsToPaddedViewport(cluster.bounds, projection, this.gridSize).contains(MarkerUtils.getPosition(marker))) {\n cluster.push(marker);\n }\n else {\n const cluster = new Cluster({ markers: [marker] });\n this.clusters.push(cluster);\n }\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 * Noop algorithm does not generate any clusters or filter markers by the an extended viewport.\n */\nclass NoopAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var options = __rest(_a, []);\n super(options);\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n return {\n clusters: this.cluster({ markers, map, mapCanvasProjection }),\n changed: false,\n };\n }\n cluster(input) {\n return this.noop(input);\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\n *\n * @see https://www.npmjs.com/package/supercluster for more information on options.\n */\nclass SuperClusterAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var { maxZoom, radius = 60 } = _a, options = __rest(_a, [\"maxZoom\", \"radius\"]);\n super({ maxZoom });\n this.state = { zoom: -1 };\n this.superCluster = new Supercluster(Object.assign({ maxZoom: this.maxZoom, radius }, options));\n }\n calculate(input) {\n let changed = false;\n const state = { zoom: input.map.getZoom() };\n if (!equal(input.markers, this.markers)) {\n changed = true;\n // TODO use proxy to avoid copy?\n this.markers = [...input.markers];\n const points = this.markers.map((marker) => {\n const position = MarkerUtils.getPosition(marker);\n const coordinates = [position.lng(), position.lat()];\n return {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates,\n },\n properties: { marker },\n };\n });\n this.superCluster.load(points);\n }\n if (!changed) {\n if (this.state.zoom <= this.maxZoom || state.zoom <= this.maxZoom) {\n changed = !equal(this.state, state);\n }\n }\n this.state = state;\n if (changed) {\n this.clusters = this.cluster(input);\n }\n return { clusters: this.clusters, changed };\n }\n cluster({ map }) {\n return this.superCluster\n .getClusters([-180, -90, 180, 90], Math.round(map.getZoom()))\n .map((feature) => this.transformCluster(feature));\n }\n transformCluster({ geometry: { coordinates: [lng, lat], }, properties, }) {\n if (properties.cluster) {\n return new Cluster({\n markers: this.superCluster\n .getLeaves(properties.cluster_id, Infinity)\n .map((leaf) => leaf.properties.marker),\n position: { lat, lng },\n });\n }\n const marker = properties.marker;\n return new Cluster({\n markers: [marker],\n position: MarkerUtils.getPosition(marker),\n });\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\n *\n * @see https://www.npmjs.com/package/supercluster for more information on options.\n */\nclass SuperClusterViewportAlgorithm extends AbstractViewportAlgorithm {\n constructor(_a) {\n var { maxZoom, radius = 60, viewportPadding = 60 } = _a, options = __rest(_a, [\"maxZoom\", \"radius\", \"viewportPadding\"]);\n super({ maxZoom, viewportPadding });\n this.superCluster = new Supercluster(Object.assign({ maxZoom: this.maxZoom, radius }, options));\n this.state = { zoom: -1, view: [0, 0, 0, 0] };\n }\n calculate(input) {\n const state = {\n zoom: Math.round(input.map.getZoom()),\n view: getPaddedViewport(input.map.getBounds(), input.mapCanvasProjection, this.viewportPadding),\n };\n let changed = !equal(this.state, state);\n if (!equal(input.markers, this.markers)) {\n changed = true;\n // TODO use proxy to avoid copy?\n this.markers = [...input.markers];\n const points = this.markers.map((marker) => {\n const position = MarkerUtils.getPosition(marker);\n const coordinates = [position.lng(), position.lat()];\n return {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates,\n },\n properties: { marker },\n };\n });\n this.superCluster.load(points);\n }\n if (changed) {\n this.clusters = this.cluster(input);\n this.state = state;\n }\n return { clusters: this.clusters, changed };\n }\n cluster({ map, mapCanvasProjection }) {\n /* recalculate new state because we can't use the cached version. */\n const state = {\n zoom: Math.round(map.getZoom()),\n view: getPaddedViewport(map.getBounds(), mapCanvasProjection, this.viewportPadding),\n };\n return this.superCluster\n .getClusters(state.view, state.zoom)\n .map((feature) => this.transformCluster(feature));\n }\n transformCluster({ geometry: { coordinates: [lng, lat], }, properties, }) {\n if (properties.cluster) {\n return new Cluster({\n markers: this.superCluster\n .getLeaves(properties.cluster_id, Infinity)\n .map((leaf) => leaf.properties.marker),\n position: { lat, lng },\n });\n }\n const marker = properties.marker;\n return new Cluster({\n markers: [marker],\n position: MarkerUtils.getPosition(marker),\n });\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 * Provides statistics on all clusters in the current render cycle for use in {@link Renderer.render}.\n */\nclass ClusterStats {\n constructor(markers, clusters) {\n this.markers = { sum: markers.length };\n const clusterMarkerCounts = clusters.map((a) => a.count);\n const clusterMarkerSum = clusterMarkerCounts.reduce((a, b) => a + b, 0);\n this.clusters = {\n count: clusters.length,\n markers: {\n mean: clusterMarkerSum / clusters.length,\n sum: clusterMarkerSum,\n min: Math.min(...clusterMarkerCounts),\n max: Math.max(...clusterMarkerCounts),\n },\n };\n }\n}\nclass DefaultRenderer {\n /**\n * The default render function for the library used by {@link MarkerClusterer}.\n *\n * Currently set to use the following:\n *\n * ```typescript\n * // change color if this cluster has more markers than the mean cluster\n * const color =\n * count > Math.max(10, stats.clusters.markers.mean)\n * ? \"#ff0000\"\n * : \"#0000ff\";\n *\n * // create svg url with fill color\n * const svg = window.btoa(`\n * <svg fill=\"${color}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\">\n * <circle cx=\"120\" cy=\"120\" opacity=\".6\" r=\"70\" />\n * <circle cx=\"120\" cy=\"120\" opacity=\".3\" r=\"90\" />\n * <circle cx=\"120\" cy=\"120\" opacity=\".2\" r=\"110\" />\n * <circle cx=\"120\" cy=\"120\" opacity=\".1\" r=\"130\" />\n * </svg>`);\n *\n * // create marker using svg icon\n * return new google.maps.Marker({\n * position,\n * icon: {\n * url: `data:image/svg+xml;base64,${svg}`,\n * scaledSize: new google.maps.Size(45, 45),\n * },\n * label: {\n * text: String(count),\n * color: \"rgba(255,255,255,0.9)\",\n * fontSize: \"12px\",\n * },\n * // adjust zIndex to be above other markers\n * zIndex: 1000 + count,\n * });\n * ```\n */\n render({ count, position }, stats, map) {\n // change color if this cluster has more markers than the mean cluster\n const color = count > Math.max(10, stats.clusters.markers.mean) ? \"#ff0000\" : \"#0000ff\";\n // create svg literal with fill color\n const svg = `<svg fill=\"${color}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"50\" height=\"50\">\n<circle cx=\"120\" cy=\"120\" opacity=\".6\" r=\"70\" />\n<circle cx=\"120\" cy=\"120\" opacity=\".3\" r=\"90\" />\n<circle cx=\"120\" cy=\"120\" opacity=\".2\" r=\"110\" />\n<text x=\"50%\" y=\"50%\" style=\"fill:#fff\" text-anchor=\"middle\" font-size=\"50\" dominant-baseline=\"middle\" font-family=\"roboto,arial,sans-serif\">${count}</text>\n</svg>`;\n const title = `Cluster of ${count} markers`, \n // adjust zIndex to be above other markers\n zIndex = Number(google.maps.Marker.MAX_ZINDEX) + count;\n if (MarkerUtils.isAdvancedMarkerAvailable(map)) {\n // create cluster SVG element\n const parser = new DOMParser();\n const svgEl = parser.parseFromString(svg, \"image/svg+xml\").documentElement;\n svgEl.setAttribute(\"transform\", \"translate(0 25)\");\n const clusterOptions = {\n map,\n position,\n zIndex,\n title,\n content: svgEl,\n };\n return new google.maps.marker.AdvancedMarkerElement(clusterOptions);\n }\n const clusterOptions = {\n position,\n zIndex,\n title,\n icon: {\n url: `data:image/svg+xml;base64,${btoa(svg)}`,\n anchor: new google.maps.Point(25, 25),\n },\n };\n return new google.maps.Marker(clusterOptions);\n }\n}\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Extends an object's prototype by another's.\n *\n * @param type1 The Type to be extended.\n * @param type2 The Type to extend with.\n * @ignore\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extend(type1, type2) {\n /* istanbul ignore next */\n // eslint-disable-next-line prefer-const\n for (let property in type2.prototype) {\n type1.prototype[property] = type2.prototype[property];\n }\n}\n/**\n * @ignore\n */\nclass OverlayViewSafe {\n constructor() {\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 extend(OverlayViewSafe, google.maps.OverlayView);\n }\n}\n\n/**\n * Copyright 2021 Google LLC\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 */\nvar MarkerClustererEvents;\n(function (MarkerClustererEvents) {\n MarkerClustererEvents[\"CLUSTERING_BEGIN\"] = \"clusteringbegin\";\n MarkerClustererEvents[\"CLUSTERING_END\"] = \"clusteringend\";\n MarkerClustererEvents[\"CLUSTER_CLICK\"] = \"click\";\n})(MarkerClustererEvents || (MarkerClustererEvents = {}));\nconst defaultOnClusterClickHandler = (_, cluster, map) => {\n map.fitBounds(cluster.bounds);\n};\n/**\n * MarkerClusterer creates and manages per-zoom-level clusters for large amounts\n * of markers. See {@link MarkerClustererOptions} for more details.\n *\n */\nclass MarkerClusterer extends OverlayViewSafe {\n constructor({ map, markers = [], algorithmOptions = {}, algorithm = new SuperClusterAlgorithm(algorithmOptions), renderer = new DefaultRenderer(), onClusterClick = defaultOnClusterClickHandler, }) {\n super();\n this.markers = [...markers];\n this.clusters = [];\n this.algorithm = algorithm;\n this.renderer = renderer;\n this.onClusterClick = onClusterClick;\n if (map) {\n this.setMap(map);\n }\n }\n addMarker(marker, noDraw) {\n if (this.markers.includes(marker)) {\n return;\n }\n this.markers.push(marker);\n if (!noDraw) {\n this.render();\n }\n }\n addMarkers(markers, noDraw) {\n markers.forEach((marker) => {\n this.addMarker(marker, true);\n });\n if (!noDraw) {\n this.render();\n }\n }\n removeMarker(marker, noDraw) {\n const index = this.markers.indexOf(marker);\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n MarkerUtils.setMap(marker, null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n if (!noDraw) {\n this.render();\n }\n return true;\n }\n removeMarkers(markers, noDraw) {\n let removed = false;\n markers.forEach((marker) => {\n removed = this.removeMarker(marker, true) || removed;\n });\n if (removed && !noDraw) {\n this.render();\n }\n return removed;\n }\n clearMarkers(noDraw) {\n this.markers.length = 0;\n if (!noDraw) {\n this.render();\n }\n }\n /**\n * Recalculates and draws all the marker clusters.\n */\n render() {\n const map = this.getMap();\n if (map instanceof google.maps.Map && map.getProjection()) {\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_BEGIN, this);\n const { clusters, changed } = this.algorithm.calculate({\n markers: this.markers,\n map,\n mapCanvasProjection: this.getProjection(),\n });\n // Allow algorithms to return flag on whether the clusters/markers have changed.\n if (changed || changed == undefined) {\n // Accumulate the markers of the clusters composed of a single marker.\n // Those clusters directly use the marker.\n // Clusters with more than one markers use a group marker generated by a renderer.\n const singleMarker = new Set();\n for (const cluster of clusters) {\n if (cluster.markers.length == 1) {\n singleMarker.add(cluster.markers[0]);\n }\n }\n const groupMarkers = [];\n // Iterate the clusters that are currently rendered.\n for (const cluster of this.clusters) {\n if (cluster.marker == null) {\n continue;\n }\n if (cluster.markers.length == 1) {\n if (!singleMarker.has(cluster.marker)) {\n // The marker:\n // - was previously rendered because it is from a cluster with 1 marker,\n // - should no more be rendered as it is not in singleMarker.\n MarkerUtils.setMap(cluster.marker, null);\n }\n }\n else {\n // Delay the removal of old group markers to avoid flickering.\n groupMarkers.push(cluster.marker);\n }\n }\n this.clusters = clusters;\n this.renderClusters();\n // Delayed removal of the markers of the former groups.\n requestAnimationFrame(() => groupMarkers.forEach((marker) => MarkerUtils.setMap(marker, null)));\n }\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_END, this);\n }\n }\n onAdd() {\n this.idleListener = this.getMap().addListener(\"idle\", this.render.bind(this));\n this.render();\n }\n onRemove() {\n google.maps.event.removeListener(this.idleListener);\n this.reset();\n }\n reset() {\n this.markers.forEach((marker) => MarkerUtils.setMap(marker, null));\n this.clusters.forEach((cluster) => cluster.delete());\n this.clusters = [];\n }\n renderClusters() {\n // Generate stats to pass to renderers.\n const stats = new ClusterStats(this.markers, this.clusters);\n const map = this.getMap();\n this.clusters.forEach((cluster) => {\n if (cluster.markers.length === 1) {\n cluster.marker = cluster.markers[0];\n }\n else {\n // Generate the marker to represent the group.\n cluster.marker = this.renderer.render(cluster, stats, map);\n // Make sure all individual markers are removed from the map.\n cluster.markers.forEach((marker) => MarkerUtils.setMap(marker, null));\n if (this.onClusterClick) {\n cluster.marker.addListener(\"click\", \n /* istanbul ignore next */\n (event) => {\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTER_CLICK, cluster);\n this.onClusterClick(event, cluster, map);\n });\n }\n }\n MarkerUtils.setMap(cluster.marker, map);\n });\n }\n}\n\nvar index_esm = /*#__PURE__*/Object.freeze({\n __proto__: null,\n AbstractAlgorithm: AbstractAlgorithm,\n AbstractViewportAlgorithm: AbstractViewportAlgorithm,\n Cluster: Cluster,\n ClusterStats: ClusterStats,\n DefaultRenderer: DefaultRenderer,\n GridAlgorithm: GridAlgorithm,\n MarkerClusterer: MarkerClusterer,\n get MarkerClustererEvents () { return MarkerClustererEvents; },\n MarkerUtils: MarkerUtils,\n NoopAlgorithm: NoopAlgorithm,\n SuperClusterAlgorithm: SuperClusterAlgorithm,\n SuperClusterViewportAlgorithm: SuperClusterViewportAlgorithm,\n defaultOnClusterClickHandler: defaultOnClusterClickHandler,\n distanceBetweenPoints: distanceBetweenPoints,\n extendBoundsToPaddedViewport: extendBoundsToPaddedViewport,\n extendPixelBounds: extendPixelBounds,\n filterMarkersToPaddedViewport: filterMarkersToPaddedViewport,\n getPaddedViewport: getPaddedViewport,\n noop: noop$1,\n pixelBoundsToLatLngBounds: pixelBoundsToLatLngBounds\n});\n\nfunction useGoogleMarkerClusterer(options) {\n var map = useGoogleMap();\n var _a = useState(null), markerClusterer = _a[0], setMarkerClusterer = _a[1];\n useEffect(function () {\n if (map && markerClusterer === null) {\n var markerCluster = new MarkerClusterer(__assign(__assign({}, options), { map: map }));\n setMarkerClusterer(markerCluster);\n }\n }, [map]);\n return markerClusterer;\n}\n/** Wrapper around [@googlemaps/markerclusterer](https://github.com/googlemaps/js-markerclusterer)\n *\n * Accepts {@link MarkerClustererOptionsSubset} which is a subset of {@link MarkerClustererOptions}\n */\nfunction GoogleMarkerClusterer(_a) {\n var children = _a.children, options = _a.options;\n var markerClusterer = useGoogleMarkerClusterer(options);\n return markerClusterer !== null ? children(markerClusterer) : null;\n}\nvar GoogleMarkerClusterer$1 = memo(GoogleMarkerClusterer);\n\nvar eventMap$c = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed',\n};\nvar updaterMap$c = {\n options: function (instance, options) {\n instance.setOptions(options);\n },\n position: function (instance, position) {\n instance.setPosition(position);\n },\n zIndex: function (instance, zIndex) {\n instance.setZIndex(zIndex);\n },\n};\nfunction InfoWindowFunctional(_a) {\n var children = _a.children, anchor = _a.anchor, options = _a.options, position = _a.position, zIndex = _a.zIndex, onCloseClick = _a.onCloseClick, onDomReady = _a.onDomReady, onContentChanged = _a.onContentChanged, onPositionChanged = _a.onPositionChanged, onZindexChanged = _a.onZindexChanged, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), closeclickListener = _c[0], setCloseClickListener = _c[1];\n var _d = useState(null), domreadyclickListener = _d[0], setDomReadyClickListener = _d[1];\n var _e = useState(null), contentchangedclickListener = _e[0], setContentChangedClickListener = _e[1];\n var _f = useState(null), positionchangedclickListener = _f[0], setPositionChangedClickListener = _f[1];\n var _g = useState(null), zindexchangedclickListener = _g[0], setZindexChangedClickListener = _g[1];\n var containerElementRef = useRef(null);\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.close();\n if (anchor) {\n instance.open(map, anchor);\n }\n else if (instance.getPosition()) {\n instance.open(map);\n }\n }\n }, [map, instance, anchor]);\n useEffect(function () {\n if (options && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (position && instance !== null) {\n instance.setPosition(position);\n }\n }, [position]);\n useEffect(function () {\n if (typeof zIndex === 'number' && instance !== null) {\n instance.setZIndex(zIndex);\n }\n }, [zIndex]);\n useEffect(function () {\n if (instance && onCloseClick) {\n if (closeclickListener !== null) {\n google.maps.event.removeListener(closeclickListener);\n }\n setCloseClickListener(google.maps.event.addListener(instance, 'closeclick', onCloseClick));\n }\n }, [onCloseClick]);\n useEffect(function () {\n if (instance && onDomReady) {\n if (domreadyclickListener !== null) {\n google.maps.event.removeListener(domreadyclickListener);\n }\n setDomReadyClickListener(google.maps.event.addListener(instance, 'domready', onDomReady));\n }\n }, [onDomReady]);\n useEffect(function () {\n if (instance && onContentChanged) {\n if (contentchangedclickListener !== null) {\n google.maps.event.removeListener(contentchangedclickListener);\n }\n setContentChangedClickListener(google.maps.event.addListener(instance, 'content_changed', onContentChanged));\n }\n }, [onContentChanged]);\n useEffect(function () {\n if (instance && onPositionChanged) {\n if (positionchangedclickListener !== null) {\n google.maps.event.removeListener(positionchangedclickListener);\n }\n setPositionChangedClickListener(google.maps.event.addListener(instance, 'position_changed', onPositionChanged));\n }\n }, [onPositionChanged]);\n useEffect(function () {\n if (instance && onZindexChanged) {\n if (zindexchangedclickListener !== null) {\n google.maps.event.removeListener(zindexchangedclickListener);\n }\n setZindexChangedClickListener(google.maps.event.addListener(instance, 'zindex_changed', onZindexChanged));\n }\n }, [onZindexChanged]);\n useEffect(function () {\n var infoWindow = new google.maps.InfoWindow(__assign({}, (options || {})));\n setInstance(infoWindow);\n containerElementRef.current = document.createElement('div');\n if (onCloseClick) {\n setCloseClickListener(google.maps.event.addListener(infoWindow, 'closeclick', onCloseClick));\n }\n if (onDomReady) {\n setDomReadyClickListener(google.maps.event.addListener(infoWindow, 'domready', onDomReady));\n }\n if (onContentChanged) {\n setContentChangedClickListener(google.maps.event.addListener(infoWindow, 'content_changed', onContentChanged));\n }\n if (onPositionChanged) {\n setPositionChangedClickListener(google.maps.event.addListener(infoWindow, 'position_changed', onPositionChanged));\n }\n if (onZindexChanged) {\n setZindexChangedClickListener(google.maps.event.addListener(infoWindow, 'zindex_changed', onZindexChanged));\n }\n infoWindow.setContent(containerElementRef.current);\n if (position) {\n infoWindow.setPosition(position);\n }\n if (zIndex) {\n infoWindow.setZIndex(zIndex);\n }\n if (anchor) {\n infoWindow.open(map, anchor);\n }\n else if (infoWindow.getPosition()) {\n infoWindow.open(map);\n }\n else {\n invariant$1(false, \"You must provide either an anchor (typically render it inside a <Marker>) or a position props for <InfoWindow>.\");\n }\n if (onLoad) {\n onLoad(infoWindow);\n }\n return function () {\n if (closeclickListener) {\n google.maps.event.removeListener(closeclickListener);\n }\n if (contentchangedclickListener) {\n google.maps.event.removeListener(contentchangedclickListener);\n }\n if (domreadyclickListener) {\n google.maps.event.removeListener(domreadyclickListener);\n }\n if (positionchangedclickListener) {\n google.maps.event.removeListener(positionchangedclickListener);\n }\n if (zindexchangedclickListener) {\n google.maps.event.removeListener(zindexchangedclickListener);\n }\n if (onUnmount) {\n onUnmount(infoWindow);\n }\n infoWindow.close();\n };\n }, []);\n return containerElementRef.current ? (createPortal(Children.only(children), containerElementRef.current)) : (null);\n}\nvar InfoWindowF = memo(InfoWindowFunctional);\nvar InfoWindow = /** @class */ (function (_super) {\n __extends(InfoWindow, _super);\n function InfoWindow() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = null;\n _this.state = {\n infoWindow: null,\n };\n _this.open = function (infoWindow, anchor) {\n if (anchor) {\n infoWindow.open(_this.context, anchor);\n }\n else if (infoWindow.getPosition()) {\n infoWindow.open(_this.context);\n }\n else {\n invariant$1(false, \"You must provide either an anchor (typically render it inside a <Marker>) or a position props for <InfoWindow>.\");\n }\n };\n _this.setInfoWindowCallback = function () {\n if (_this.state.infoWindow !== null && _this.containerElement !== null) {\n _this.state.infoWindow.setContent(_this.containerElement);\n _this.open(_this.state.infoWindow, _this.props.anchor);\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.infoWindow);\n }\n }\n };\n return _this;\n }\n InfoWindow.prototype.componentDidMount = function () {\n var infoWindow = new google.maps.InfoWindow(__assign({}, (this.props.options || {})));\n this.containerElement = document.createElement('div');\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$c,\n eventMap: eventMap$c,\n prevProps: {},\n nextProps: this.props,\n instance: infoWindow,\n });\n this.setState(function () {\n return {\n infoWindow: infoWindow,\n };\n }, this.setInfoWindowCallback);\n };\n InfoWindow.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$c,\n eventMap: eventMap$c,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.infoWindow,\n });\n }\n };\n InfoWindow.prototype.componentWillUnmount = function () {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents);\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.infoWindow);\n }\n this.state.infoWindow.close();\n }\n };\n InfoWindow.prototype.render = function () {\n return this.containerElement ? (createPortal(Children.only(this.props.children), this.containerElement)) : (null);\n };\n InfoWindow.contextType = MapContext;\n return InfoWindow;\n}(PureComponent));\n\nvar eventMap$b = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n};\nvar updaterMap$b = {\n draggable: function (instance, draggable) {\n instance.setDraggable(draggable);\n },\n editable: function (instance, editable) {\n instance.setEditable(editable);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n path: function (instance, path) {\n instance.setPath(path);\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n};\nvar defaultOptions$1 = {};\nfunction PolylineFunctional(_a) {\n var options = _a.options, draggable = _a.draggable, editable = _a.editable, visible = _a.visible, path = _a.path, onDblClick = _a.onDblClick, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onMouseDown = _a.onMouseDown, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseUp = _a.onMouseUp, onRightClick = _a.onRightClick, onClick = _a.onClick, onDrag = _a.onDrag, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), dblclickListener = _c[0], setDblclickListener = _c[1];\n var _d = useState(null), dragendListener = _d[0], setDragendListener = _d[1];\n var _e = useState(null), dragstartListener = _e[0], setDragstartListener = _e[1];\n var _f = useState(null), mousedownListener = _f[0], setMousedownListener = _f[1];\n var _g = useState(null), mousemoveListener = _g[0], setMousemoveListener = _g[1];\n var _h = useState(null), mouseoutListener = _h[0], setMouseoutListener = _h[1];\n var _j = useState(null), mouseoverListener = _j[0], setMouseoverListener = _j[1];\n var _k = useState(null), mouseupListener = _k[0], setMouseupListener = _k[1];\n var _l = useState(null), rightclickListener = _l[0], setRightclickListener = _l[1];\n var _m = useState(null), clickListener = _m[0], setClickListener = _m[1];\n var _o = useState(null), dragListener = _o[0], setDragListener = _o[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable);\n }\n }, [instance, draggable]);\n useEffect(function () {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable);\n }\n }, [instance, editable]);\n useEffect(function () {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible);\n }\n }, [instance, visible]);\n useEffect(function () {\n if (typeof path !== 'undefined' && instance !== null) {\n instance.setPath(path);\n }\n }, [instance, path]);\n useEffect(function () {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(instance, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n setDragendListener(google.maps.event.addListener(instance, 'dragend', onDragEnd));\n }\n }, [onDragEnd]);\n useEffect(function () {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n setDragstartListener(google.maps.event.addListener(instance, 'dragstart', onDragStart));\n }\n }, [onDragStart]);\n useEffect(function () {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(instance, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n setMousemoveListener(google.maps.event.addListener(instance, 'mousemove', onMouseMove));\n }\n }, [onMouseMove]);\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(instance, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n setRightclickListener(google.maps.event.addListener(instance, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n setDragListener(google.maps.event.addListener(instance, 'drag', onDrag));\n }\n }, [onDrag]);\n useEffect(function () {\n var polyline = new google.maps.Polyline(__assign(__assign({}, (options || defaultOptions$1)), { map: map }));\n if (path) {\n polyline.setPath(path);\n }\n if (typeof visible !== 'undefined') {\n polyline.setVisible(visible);\n }\n if (typeof editable !== 'undefined') {\n polyline.setEditable(editable);\n }\n if (typeof draggable !== 'undefined') {\n polyline.setDraggable(draggable);\n }\n if (onDblClick) {\n setDblclickListener(google.maps.event.addListener(polyline, 'dblclick', onDblClick));\n }\n if (onDragEnd) {\n setDragendListener(google.maps.event.addListener(polyline, 'dragend', onDragEnd));\n }\n if (onDragStart) {\n setDragstartListener(google.maps.event.addListener(polyline, 'dragstart', onDragStart));\n }\n if (onMouseDown) {\n setMousedownListener(google.maps.event.addListener(polyline, 'mousedown', onMouseDown));\n }\n if (onMouseMove) {\n setMousemoveListener(google.maps.event.addListener(polyline, 'mousemove', onMouseMove));\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(polyline, 'mouseout', onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(polyline, 'mouseover', onMouseOver));\n }\n if (onMouseUp) {\n setMouseupListener(google.maps.event.addListener(polyline, 'mouseup', onMouseUp));\n }\n if (onRightClick) {\n setRightclickListener(google.maps.event.addListener(polyline, 'rightclick', onRightClick));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(polyline, 'click', onClick));\n }\n if (onDrag) {\n setDragListener(google.maps.event.addListener(polyline, 'drag', onDrag));\n }\n setInstance(polyline);\n if (onLoad) {\n onLoad(polyline);\n }\n return function () {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (onUnmount) {\n onUnmount(polyline);\n }\n polyline.setMap(null);\n };\n }, []);\n return null;\n}\nvar PolylineF = memo(PolylineFunctional);\nvar Polyline = /** @class */ (function (_super) {\n __extends(Polyline, _super);\n function Polyline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n polyline: null,\n };\n _this.setPolylineCallback = function () {\n if (_this.state.polyline !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.polyline);\n }\n };\n return _this;\n }\n Polyline.prototype.componentDidMount = function () {\n var polyline = new google.maps.Polyline(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$b,\n eventMap: eventMap$b,\n prevProps: {},\n nextProps: this.props,\n instance: polyline,\n });\n this.setState(function setPolyline() {\n return {\n polyline: polyline,\n };\n }, this.setPolylineCallback);\n };\n Polyline.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.polyline !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$b,\n eventMap: eventMap$b,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.polyline,\n });\n }\n };\n Polyline.prototype.componentWillUnmount = function () {\n if (this.state.polyline !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polyline);\n }\n unregisterEvents(this.registeredEvents);\n this.state.polyline.setMap(null);\n }\n };\n Polyline.prototype.render = function () {\n return null;\n };\n Polyline.contextType = MapContext;\n return Polyline;\n}(PureComponent));\n\nvar eventMap$a = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n};\nvar updaterMap$a = {\n draggable: function (instance, draggable) {\n instance.setDraggable(draggable);\n },\n editable: function (instance, editable) {\n instance.setEditable(editable);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n path: function (instance, path) {\n instance.setPath(path);\n },\n paths: function (instance, paths) {\n instance.setPaths(paths);\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n};\nfunction PolygonFunctional(_a) {\n var options = _a.options, draggable = _a.draggable, editable = _a.editable, visible = _a.visible, path = _a.path, paths = _a.paths, onDblClick = _a.onDblClick, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onMouseDown = _a.onMouseDown, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseUp = _a.onMouseUp, onRightClick = _a.onRightClick, onClick = _a.onClick, onDrag = _a.onDrag, onLoad = _a.onLoad, onUnmount = _a.onUnmount, onEdit = _a.onEdit;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), dblclickListener = _c[0], setDblclickListener = _c[1];\n var _d = useState(null), dragendListener = _d[0], setDragendListener = _d[1];\n var _e = useState(null), dragstartListener = _e[0], setDragstartListener = _e[1];\n var _f = useState(null), mousedownListener = _f[0], setMousedownListener = _f[1];\n var _g = useState(null), mousemoveListener = _g[0], setMousemoveListener = _g[1];\n var _h = useState(null), mouseoutListener = _h[0], setMouseoutListener = _h[1];\n var _j = useState(null), mouseoverListener = _j[0], setMouseoverListener = _j[1];\n var _k = useState(null), mouseupListener = _k[0], setMouseupListener = _k[1];\n var _l = useState(null), rightclickListener = _l[0], setRightclickListener = _l[1];\n var _m = useState(null), clickListener = _m[0], setClickListener = _m[1];\n var _o = useState(null), dragListener = _o[0], setDragListener = _o[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable);\n }\n }, [instance, draggable]);\n useEffect(function () {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable);\n }\n }, [instance, editable]);\n useEffect(function () {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible);\n }\n }, [instance, visible]);\n useEffect(function () {\n if (typeof path !== 'undefined' && instance !== null) {\n instance.setPath(path);\n }\n }, [instance, path]);\n useEffect(function () {\n if (typeof paths !== 'undefined' && instance !== null) {\n instance.setPaths(paths);\n }\n }, [instance, paths]);\n useEffect(function () {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(instance, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (instance) {\n google.maps.event.addListener(instance.getPath(), 'insert_at', function () {\n onEdit === null || onEdit === void 0 ? void 0 : onEdit(instance);\n });\n google.maps.event.addListener(instance.getPath(), 'set_at', function () {\n onEdit === null || onEdit === void 0 ? void 0 : onEdit(instance);\n });\n }\n }, [instance, onEdit]);\n useEffect(function () {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n setDragendListener(google.maps.event.addListener(instance, 'dragend', onDragEnd));\n }\n }, [onDragEnd]);\n useEffect(function () {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n setDragstartListener(google.maps.event.addListener(instance, 'dragstart', onDragStart));\n }\n }, [onDragStart]);\n useEffect(function () {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(instance, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n setMousemoveListener(google.maps.event.addListener(instance, 'mousemove', onMouseMove));\n }\n }, [onMouseMove]);\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(instance, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n setRightclickListener(google.maps.event.addListener(instance, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n setDragListener(google.maps.event.addListener(instance, 'drag', onDrag));\n }\n }, [onDrag]);\n useEffect(function () {\n var polygon = new google.maps.Polygon(__assign(__assign({}, (options || {})), { map: map }));\n if (path) {\n polygon.setPath(path);\n }\n if (paths) {\n polygon.setPaths(paths);\n }\n if (typeof visible !== 'undefined') {\n polygon.setVisible(visible);\n }\n if (typeof editable !== 'undefined') {\n polygon.setEditable(editable);\n }\n if (typeof draggable !== 'undefined') {\n polygon.setDraggable(draggable);\n }\n if (onDblClick) {\n setDblclickListener(google.maps.event.addListener(polygon, 'dblclick', onDblClick));\n }\n if (onDragEnd) {\n setDragendListener(google.maps.event.addListener(polygon, 'dragend', onDragEnd));\n }\n if (onDragStart) {\n setDragstartListener(google.maps.event.addListener(polygon, 'dragstart', onDragStart));\n }\n if (onMouseDown) {\n setMousedownListener(google.maps.event.addListener(polygon, 'mousedown', onMouseDown));\n }\n if (onMouseMove) {\n setMousemoveListener(google.maps.event.addListener(polygon, 'mousemove', onMouseMove));\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(polygon, 'mouseout', onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(polygon, 'mouseover', onMouseOver));\n }\n if (onMouseUp) {\n setMouseupListener(google.maps.event.addListener(polygon, 'mouseup', onMouseUp));\n }\n if (onRightClick) {\n setRightclickListener(google.maps.event.addListener(polygon, 'rightclick', onRightClick));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(polygon, 'click', onClick));\n }\n if (onDrag) {\n setDragListener(google.maps.event.addListener(polygon, 'drag', onDrag));\n }\n setInstance(polygon);\n if (onLoad) {\n onLoad(polygon);\n }\n return function () {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (onUnmount) {\n onUnmount(polygon);\n }\n polygon.setMap(null);\n };\n }, []);\n return null;\n}\nvar PolygonF = memo(PolygonFunctional);\nvar Polygon = /** @class */ (function (_super) {\n __extends(Polygon, _super);\n function Polygon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n polygon: null,\n };\n _this.setPolygonCallback = function () {\n if (_this.state.polygon !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.polygon);\n }\n };\n return _this;\n }\n Polygon.prototype.componentDidMount = function () {\n var polygon = new google.maps.Polygon(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$a,\n eventMap: eventMap$a,\n prevProps: {},\n nextProps: this.props,\n instance: polygon,\n });\n this.setState(function setPolygon() {\n return {\n polygon: polygon,\n };\n }, this.setPolygonCallback);\n };\n Polygon.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.polygon !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$a,\n eventMap: eventMap$a,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.polygon,\n });\n }\n };\n Polygon.prototype.componentWillUnmount = function () {\n if (this.state.polygon !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polygon);\n }\n unregisterEvents(this.registeredEvents);\n this.state.polygon && this.state.polygon.setMap(null);\n }\n };\n Polygon.prototype.render = function () {\n return null;\n };\n Polygon.contextType = MapContext;\n return Polygon;\n}(PureComponent));\n\nvar eventMap$9 = {\n onBoundsChanged: 'bounds_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n};\nvar updaterMap$9 = {\n bounds: function (instance, bounds) {\n instance.setBounds(bounds);\n },\n draggable: function (instance, draggable) {\n instance.setDraggable(draggable);\n },\n editable: function (instance, editable) {\n instance.setEditable(editable);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n};\nfunction RectangleFunctional(_a) {\n var options = _a.options, bounds = _a.bounds, draggable = _a.draggable, editable = _a.editable, visible = _a.visible, onDblClick = _a.onDblClick, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onMouseDown = _a.onMouseDown, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseUp = _a.onMouseUp, onRightClick = _a.onRightClick, onClick = _a.onClick, onDrag = _a.onDrag, onBoundsChanged = _a.onBoundsChanged, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), dblclickListener = _c[0], setDblclickListener = _c[1];\n var _d = useState(null), dragendListener = _d[0], setDragendListener = _d[1];\n var _e = useState(null), dragstartListener = _e[0], setDragstartListener = _e[1];\n var _f = useState(null), mousedownListener = _f[0], setMousedownListener = _f[1];\n var _g = useState(null), mousemoveListener = _g[0], setMousemoveListener = _g[1];\n var _h = useState(null), mouseoutListener = _h[0], setMouseoutListener = _h[1];\n var _j = useState(null), mouseoverListener = _j[0], setMouseoverListener = _j[1];\n var _k = useState(null), mouseupListener = _k[0], setMouseupListener = _k[1];\n var _l = useState(null), rightClickListener = _l[0], setRightClickListener = _l[1];\n var _m = useState(null), clickListener = _m[0], setClickListener = _m[1];\n var _o = useState(null), dragListener = _o[0], setDragListener = _o[1];\n var _p = useState(null), boundsChangedListener = _p[0], setBoundsChangedListener = _p[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable);\n }\n }, [instance, draggable]);\n useEffect(function () {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable);\n }\n }, [instance, editable]);\n useEffect(function () {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible);\n }\n }, [instance, visible]);\n useEffect(function () {\n if (typeof bounds !== 'undefined' && instance !== null) {\n instance.setBounds(bounds);\n }\n }, [instance, bounds]);\n useEffect(function () {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(instance, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n setDragendListener(google.maps.event.addListener(instance, 'dragend', onDragEnd));\n }\n }, [onDragEnd]);\n useEffect(function () {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n setDragstartListener(google.maps.event.addListener(instance, 'dragstart', onDragStart));\n }\n }, [onDragStart]);\n useEffect(function () {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(instance, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n setMousemoveListener(google.maps.event.addListener(instance, 'mousemove', onMouseMove));\n }\n }, [onMouseMove]);\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(instance, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (instance && onRightClick) {\n if (rightClickListener !== null) {\n google.maps.event.removeListener(rightClickListener);\n }\n setRightClickListener(google.maps.event.addListener(instance, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n setDragListener(google.maps.event.addListener(instance, 'drag', onDrag));\n }\n }, [onDrag]);\n useEffect(function () {\n if (instance && onBoundsChanged) {\n if (boundsChangedListener !== null) {\n google.maps.event.removeListener(boundsChangedListener);\n }\n setBoundsChangedListener(google.maps.event.addListener(instance, 'bounds_changed', onBoundsChanged));\n }\n }, [onBoundsChanged]);\n useEffect(function () {\n var rectangle = new google.maps.Rectangle(__assign(__assign({}, (options || {})), { map: map }));\n if (typeof visible !== 'undefined') {\n rectangle.setVisible(visible);\n }\n if (typeof editable !== 'undefined') {\n rectangle.setEditable(editable);\n }\n if (typeof draggable !== 'undefined') {\n rectangle.setDraggable(draggable);\n }\n if (typeof bounds !== 'undefined') {\n rectangle.setBounds(bounds);\n }\n if (onDblClick) {\n setDblclickListener(google.maps.event.addListener(rectangle, 'dblclick', onDblClick));\n }\n if (onDragEnd) {\n setDragendListener(google.maps.event.addListener(rectangle, 'dragend', onDragEnd));\n }\n if (onDragStart) {\n setDragstartListener(google.maps.event.addListener(rectangle, 'dragstart', onDragStart));\n }\n if (onMouseDown) {\n setMousedownListener(google.maps.event.addListener(rectangle, 'mousedown', onMouseDown));\n }\n if (onMouseMove) {\n setMousemoveListener(google.maps.event.addListener(rectangle, 'mousemove', onMouseMove));\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(rectangle, 'mouseout', onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(rectangle, 'mouseover', onMouseOver));\n }\n if (onMouseUp) {\n setMouseupListener(google.maps.event.addListener(rectangle, 'mouseup', onMouseUp));\n }\n if (onRightClick) {\n setRightClickListener(google.maps.event.addListener(rectangle, 'rightclick', onRightClick));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(rectangle, 'click', onClick));\n }\n if (onDrag) {\n setDragListener(google.maps.event.addListener(rectangle, 'drag', onDrag));\n }\n if (onBoundsChanged) {\n setBoundsChangedListener(google.maps.event.addListener(rectangle, 'bounds_changed', onBoundsChanged));\n }\n setInstance(rectangle);\n if (onLoad) {\n onLoad(rectangle);\n }\n return function () {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n if (rightClickListener !== null) {\n google.maps.event.removeListener(rightClickListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n if (boundsChangedListener !== null) {\n google.maps.event.removeListener(boundsChangedListener);\n }\n if (onUnmount) {\n onUnmount(rectangle);\n }\n rectangle.setMap(null);\n };\n }, []);\n return null;\n}\nvar RectangleF = memo(RectangleFunctional);\nvar Rectangle = /** @class */ (function (_super) {\n __extends(Rectangle, _super);\n function Rectangle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n rectangle: null,\n };\n _this.setRectangleCallback = function () {\n if (_this.state.rectangle !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.rectangle);\n }\n };\n return _this;\n }\n Rectangle.prototype.componentDidMount = function () {\n var rectangle = new google.maps.Rectangle(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$9,\n eventMap: eventMap$9,\n prevProps: {},\n nextProps: this.props,\n instance: rectangle,\n });\n this.setState(function setRectangle() {\n return {\n rectangle: rectangle,\n };\n }, this.setRectangleCallback);\n };\n Rectangle.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.rectangle !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$9,\n eventMap: eventMap$9,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.rectangle,\n });\n }\n };\n Rectangle.prototype.componentWillUnmount = function () {\n if (this.state.rectangle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.rectangle);\n }\n unregisterEvents(this.registeredEvents);\n this.state.rectangle.setMap(null);\n }\n };\n Rectangle.prototype.render = function () {\n return null;\n };\n Rectangle.contextType = MapContext;\n return Rectangle;\n}(PureComponent));\n\nvar eventMap$8 = {\n onCenterChanged: 'center_changed',\n onRadiusChanged: 'radius_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n};\nvar updaterMap$8 = {\n center: function (instance, center) {\n instance.setCenter(center);\n },\n draggable: function (instance, draggable) {\n instance.setDraggable(draggable);\n },\n editable: function (instance, editable) {\n instance.setEditable(editable);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n radius: function (instance, radius) {\n instance.setRadius(radius);\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n};\nvar defaultOptions = {};\nfunction CircleFunctional(_a) {\n var options = _a.options, center = _a.center, radius = _a.radius, draggable = _a.draggable, editable = _a.editable, visible = _a.visible, onDblClick = _a.onDblClick, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onMouseDown = _a.onMouseDown, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseUp = _a.onMouseUp, onRightClick = _a.onRightClick, onClick = _a.onClick, onDrag = _a.onDrag, onCenterChanged = _a.onCenterChanged, onRadiusChanged = _a.onRadiusChanged, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), dblclickListener = _c[0], setDblclickListener = _c[1];\n var _d = useState(null), dragendListener = _d[0], setDragendListener = _d[1];\n var _e = useState(null), dragstartListener = _e[0], setDragstartListener = _e[1];\n var _f = useState(null), mousedownListener = _f[0], setMousedownListener = _f[1];\n var _g = useState(null), mousemoveListener = _g[0], setMousemoveListener = _g[1];\n var _h = useState(null), mouseoutListener = _h[0], setMouseoutListener = _h[1];\n var _j = useState(null), mouseoverListener = _j[0], setMouseoverListener = _j[1];\n var _k = useState(null), mouseupListener = _k[0], setMouseupListener = _k[1];\n var _l = useState(null), rightclickListener = _l[0], setRightclickListener = _l[1];\n var _m = useState(null), clickListener = _m[0], setClickListener = _m[1];\n var _o = useState(null), dragListener = _o[0], setDragListener = _o[1];\n var _p = useState(null), centerChangedListener = _p[0], setCenterChangedListener = _p[1];\n var _q = useState(null), radiusChangedListener = _q[0], setRadiusChangedListener = _q[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable);\n }\n }, [instance, draggable]);\n useEffect(function () {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable);\n }\n }, [instance, editable]);\n useEffect(function () {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible);\n }\n }, [instance, visible]);\n useEffect(function () {\n if (typeof radius === 'number' && instance !== null) {\n instance.setRadius(radius);\n }\n }, [instance, radius]);\n useEffect(function () {\n if (typeof center !== 'undefined' && instance !== null) {\n instance.setCenter(center);\n }\n }, [instance, center]);\n useEffect(function () {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(instance, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n setDragendListener(google.maps.event.addListener(instance, 'dragend', onDragEnd));\n }\n }, [onDragEnd]);\n useEffect(function () {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n setDragstartListener(google.maps.event.addListener(instance, 'dragstart', onDragStart));\n }\n }, [onDragStart]);\n useEffect(function () {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(instance, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n setMousemoveListener(google.maps.event.addListener(instance, 'mousemove', onMouseMove));\n }\n }, [onMouseMove]);\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(instance, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n setRightclickListener(google.maps.event.addListener(instance, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener);\n }\n setDragListener(google.maps.event.addListener(instance, 'drag', onDrag));\n }\n }, [onDrag]);\n useEffect(function () {\n if (instance && onCenterChanged) {\n if (centerChangedListener !== null) {\n google.maps.event.removeListener(centerChangedListener);\n }\n setCenterChangedListener(google.maps.event.addListener(instance, 'center_changed', onCenterChanged));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onRadiusChanged) {\n if (radiusChangedListener !== null) {\n google.maps.event.removeListener(radiusChangedListener);\n }\n setRadiusChangedListener(google.maps.event.addListener(instance, 'radius_changed', onRadiusChanged));\n }\n }, [onRadiusChanged]);\n useEffect(function () {\n var circle = new google.maps.Circle(__assign(__assign({}, (options || defaultOptions)), { map: map }));\n if (typeof radius === 'number') {\n circle.setRadius(radius);\n }\n if (typeof center !== 'undefined') {\n circle.setCenter(center);\n }\n if (typeof radius === 'number') {\n circle.setRadius(radius);\n }\n if (typeof visible !== 'undefined') {\n circle.setVisible(visible);\n }\n if (typeof editable !== 'undefined') {\n circle.setEditable(editable);\n }\n if (typeof draggable !== 'undefined') {\n circle.setDraggable(draggable);\n }\n if (onDblClick) {\n setDblclickListener(google.maps.event.addListener(circle, 'dblclick', onDblClick));\n }\n if (onDragEnd) {\n setDragendListener(google.maps.event.addListener(circle, 'dragend', onDragEnd));\n }\n if (onDragStart) {\n setDragstartListener(google.maps.event.addListener(circle, 'dragstart', onDragStart));\n }\n if (onMouseDown) {\n setMousedownListener(google.maps.event.addListener(circle, 'mousedown', onMouseDown));\n }\n if (onMouseMove) {\n setMousemoveListener(google.maps.event.addListener(circle, 'mousemove', onMouseMove));\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(circle, 'mouseout', onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(circle, 'mouseover', onMouseOver));\n }\n if (onMouseUp) {\n setMouseupListener(google.maps.event.addListener(circle, 'mouseup', onMouseUp));\n }\n if (onRightClick) {\n setRightclickListener(google.maps.event.addListener(circle, 'rightclick', onRightClick));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(circle, 'click', onClick));\n }\n if (onDrag) {\n setDragListener(google.maps.event.addListener(circle, 'drag', onDrag));\n }\n if (onCenterChanged) {\n setCenterChangedListener(google.maps.event.addListener(circle, 'center_changed', onCenterChanged));\n }\n if (onRadiusChanged) {\n setRadiusChangedListener(google.maps.event.addListener(circle, 'radius_changed', onRadiusChanged));\n }\n setInstance(circle);\n if (onLoad) {\n onLoad(circle);\n }\n return function () {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener);\n }\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener);\n }\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (centerChangedListener !== null) {\n google.maps.event.removeListener(centerChangedListener);\n }\n if (radiusChangedListener !== null) {\n google.maps.event.removeListener(radiusChangedListener);\n }\n if (onUnmount) {\n onUnmount(circle);\n }\n circle.setMap(null);\n };\n }, []);\n return null;\n}\nvar CircleF = memo(CircleFunctional);\nvar Circle = /** @class */ (function (_super) {\n __extends(Circle, _super);\n function Circle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n circle: null,\n };\n _this.setCircleCallback = function () {\n if (_this.state.circle !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.circle);\n }\n };\n return _this;\n }\n Circle.prototype.componentDidMount = function () {\n var circle = new google.maps.Circle(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$8,\n eventMap: eventMap$8,\n prevProps: {},\n nextProps: this.props,\n instance: circle,\n });\n this.setState(function setCircle() {\n return {\n circle: circle,\n };\n }, this.setCircleCallback);\n };\n Circle.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.circle !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$8,\n eventMap: eventMap$8,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.circle,\n });\n }\n };\n Circle.prototype.componentWillUnmount = function () {\n var _a;\n if (this.state.circle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.circle);\n }\n unregisterEvents(this.registeredEvents);\n (_a = this.state.circle) === null || _a === void 0 ? void 0 : _a.setMap(null);\n }\n };\n Circle.prototype.render = function () {\n return null;\n };\n Circle.contextType = MapContext;\n return Circle;\n}(PureComponent));\n\nvar eventMap$7 = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n onAddFeature: 'addfeature',\n onRemoveFeature: 'removefeature',\n onRemoveProperty: 'removeproperty',\n onSetGeometry: 'setgeometry',\n onSetProperty: 'setproperty',\n};\nvar updaterMap$7 = {\n add: function (instance, feature) {\n instance.add(feature);\n },\n addgeojson: function (instance, geojson, options) {\n instance.addGeoJson(geojson, options);\n },\n contains: function (instance, feature) {\n instance.contains(feature);\n },\n foreach: function (instance, callback) {\n instance.forEach(callback);\n },\n loadgeojson: function (instance, url, options, callback) {\n instance.loadGeoJson(url, options, callback);\n },\n overridestyle: function (instance, feature, style) {\n instance.overrideStyle(feature, style);\n },\n remove: function (instance, feature) {\n instance.remove(feature);\n },\n revertstyle: function (instance, feature) {\n instance.revertStyle(feature);\n },\n controlposition: function (instance, controlPosition) {\n instance.setControlPosition(controlPosition);\n },\n controls: function (instance, controls) {\n instance.setControls(controls);\n },\n drawingmode: function (instance, mode) {\n instance.setDrawingMode(mode);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n style: function (instance, style) {\n instance.setStyle(style);\n },\n togeojson: function (instance, callback) {\n instance.toGeoJson(callback);\n },\n};\nfunction DataFunctional(_a) {\n var options = _a.options, onClick = _a.onClick, onDblClick = _a.onDblClick, onMouseDown = _a.onMouseDown, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseOver = _a.onMouseOver, onMouseUp = _a.onMouseUp, onRightClick = _a.onRightClick, onAddFeature = _a.onAddFeature, onRemoveFeature = _a.onRemoveFeature, onRemoveProperty = _a.onRemoveProperty, onSetGeometry = _a.onSetGeometry, onSetProperty = _a.onSetProperty, onLoad = _a.onLoad, onUnmount = _a.onUnmount;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n var _c = useState(null), dblclickListener = _c[0], setDblclickListener = _c[1];\n var _d = useState(null), mousedownListener = _d[0], setMousedownListener = _d[1];\n var _e = useState(null), mousemoveListener = _e[0], setMousemoveListener = _e[1];\n var _f = useState(null), mouseoutListener = _f[0], setMouseoutListener = _f[1];\n var _g = useState(null), mouseoverListener = _g[0], setMouseoverListener = _g[1];\n var _h = useState(null), mouseupListener = _h[0], setMouseupListener = _h[1];\n var _j = useState(null), rightclickListener = _j[0], setRightclickListener = _j[1];\n var _k = useState(null), clickListener = _k[0], setClickListener = _k[1];\n var _l = useState(null), addFeatureListener = _l[0], setAddFeatureListener = _l[1];\n var _m = useState(null), removeFeatureListener = _m[0], setRemoveFeatureListener = _m[1];\n var _o = useState(null), removePropertyListener = _o[0], setRemovePropertyListener = _o[1];\n var _p = useState(null), setGeometryListener = _p[0], setSetGeometryListener = _p[1];\n var _q = useState(null), setPropertyListener = _q[0], setSetPropertyListener = _q[1];\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n setDblclickListener(google.maps.event.addListener(instance, 'dblclick', onDblClick));\n }\n }, [onDblClick]);\n useEffect(function () {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n setMousedownListener(google.maps.event.addListener(instance, 'mousedown', onMouseDown));\n }\n }, [onMouseDown]);\n useEffect(function () {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n setMousemoveListener(google.maps.event.addListener(instance, 'mousemove', onMouseMove));\n }\n }, [onMouseMove]);\n useEffect(function () {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n setMouseoutListener(google.maps.event.addListener(instance, 'mouseout', onMouseOut));\n }\n }, [onMouseOut]);\n useEffect(function () {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n setMouseoverListener(google.maps.event.addListener(instance, 'mouseover', onMouseOver));\n }\n }, [onMouseOver]);\n useEffect(function () {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n setMouseupListener(google.maps.event.addListener(instance, 'mouseup', onMouseUp));\n }\n }, [onMouseUp]);\n useEffect(function () {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n setRightclickListener(google.maps.event.addListener(instance, 'rightclick', onRightClick));\n }\n }, [onRightClick]);\n useEffect(function () {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n setClickListener(google.maps.event.addListener(instance, 'click', onClick));\n }\n }, [onClick]);\n useEffect(function () {\n if (instance && onAddFeature) {\n if (addFeatureListener !== null) {\n google.maps.event.removeListener(addFeatureListener);\n }\n setAddFeatureListener(google.maps.event.addListener(instance, 'addfeature', onAddFeature));\n }\n }, [onAddFeature]);\n useEffect(function () {\n if (instance && onRemoveFeature) {\n if (removeFeatureListener !== null) {\n google.maps.event.removeListener(removeFeatureListener);\n }\n setRemoveFeatureListener(google.maps.event.addListener(instance, 'removefeature', onRemoveFeature));\n }\n }, [onRemoveFeature]);\n useEffect(function () {\n if (instance && onRemoveProperty) {\n if (removePropertyListener !== null) {\n google.maps.event.removeListener(removePropertyListener);\n }\n setRemovePropertyListener(google.maps.event.addListener(instance, 'removeproperty', onRemoveProperty));\n }\n }, [onRemoveProperty]);\n useEffect(function () {\n if (instance && onSetGeometry) {\n if (setGeometryListener !== null) {\n google.maps.event.removeListener(setGeometryListener);\n }\n setSetGeometryListener(google.maps.event.addListener(instance, 'setgeometry', onSetGeometry));\n }\n }, [onSetGeometry]);\n useEffect(function () {\n if (instance && onSetProperty) {\n if (setPropertyListener !== null) {\n google.maps.event.removeListener(setPropertyListener);\n }\n setSetPropertyListener(google.maps.event.addListener(instance, 'setproperty', onSetProperty));\n }\n }, [onSetProperty]);\n useEffect(function () {\n if (map !== null) {\n var data = new google.maps.Data(__assign(__assign({}, (options || {})), { map: map }));\n if (onDblClick) {\n setDblclickListener(google.maps.event.addListener(data, 'dblclick', onDblClick));\n }\n if (onMouseDown) {\n setMousedownListener(google.maps.event.addListener(data, 'mousedown', onMouseDown));\n }\n if (onMouseMove) {\n setMousemoveListener(google.maps.event.addListener(data, 'mousemove', onMouseMove));\n }\n if (onMouseOut) {\n setMouseoutListener(google.maps.event.addListener(data, 'mouseout', onMouseOut));\n }\n if (onMouseOver) {\n setMouseoverListener(google.maps.event.addListener(data, 'mouseover', onMouseOver));\n }\n if (onMouseUp) {\n setMouseupListener(google.maps.event.addListener(data, 'mouseup', onMouseUp));\n }\n if (onRightClick) {\n setRightclickListener(google.maps.event.addListener(data, 'rightclick', onRightClick));\n }\n if (onClick) {\n setClickListener(google.maps.event.addListener(data, 'click', onClick));\n }\n if (onAddFeature) {\n setAddFeatureListener(google.maps.event.addListener(data, 'addfeature', onAddFeature));\n }\n if (onRemoveFeature) {\n setRemoveFeatureListener(google.maps.event.addListener(data, 'removefeature', onRemoveFeature));\n }\n if (onRemoveProperty) {\n setRemovePropertyListener(google.maps.event.addListener(data, 'removeproperty', onRemoveProperty));\n }\n if (onSetGeometry) {\n setSetGeometryListener(google.maps.event.addListener(data, 'setgeometry', onSetGeometry));\n }\n if (onSetProperty) {\n setSetPropertyListener(google.maps.event.addListener(data, 'setproperty', onSetProperty));\n }\n setInstance(data);\n if (onLoad) {\n onLoad(data);\n }\n }\n return function () {\n if (instance) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener);\n }\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener);\n }\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener);\n }\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener);\n }\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener);\n }\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener);\n }\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener);\n }\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener);\n }\n if (addFeatureListener !== null) {\n google.maps.event.removeListener(addFeatureListener);\n }\n if (removeFeatureListener !== null) {\n google.maps.event.removeListener(removeFeatureListener);\n }\n if (removePropertyListener !== null) {\n google.maps.event.removeListener(removePropertyListener);\n }\n if (setGeometryListener !== null) {\n google.maps.event.removeListener(setGeometryListener);\n }\n if (setPropertyListener !== null) {\n google.maps.event.removeListener(setPropertyListener);\n }\n if (onUnmount) {\n onUnmount(instance);\n }\n instance.setMap(null);\n }\n };\n }, []);\n return null;\n}\nvar DataF = memo(DataFunctional);\nvar Data = /** @class */ (function (_super) {\n __extends(Data, _super);\n function Data() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n data: null,\n };\n _this.setDataCallback = function () {\n if (_this.state.data !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.data);\n }\n };\n return _this;\n }\n Data.prototype.componentDidMount = function () {\n if (this.context !== null) {\n var data_1 = new google.maps.Data(__assign(__assign({}, (this.props.options || {})), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$7,\n eventMap: eventMap$7,\n prevProps: {},\n nextProps: this.props,\n instance: data_1,\n });\n this.setState(function () {\n return {\n data: data_1,\n };\n }, this.setDataCallback);\n }\n };\n Data.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.data !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$7,\n eventMap: eventMap$7,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.data,\n });\n }\n };\n Data.prototype.componentWillUnmount = function () {\n if (this.state.data !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.data);\n }\n unregisterEvents(this.registeredEvents);\n if (this.state.data) {\n this.state.data.setMap(null);\n }\n }\n };\n Data.prototype.render = function () {\n return null;\n };\n Data.contextType = MapContext;\n return Data;\n}(PureComponent));\n\nvar eventMap$6 = {\n onClick: 'click',\n onDefaultViewportChanged: 'defaultviewport_changed',\n onStatusChanged: 'status_changed',\n};\nvar updaterMap$6 = {\n options: function (instance, options) {\n instance.setOptions(options);\n },\n url: function (instance, url) {\n instance.setUrl(url);\n },\n zIndex: function (instance, zIndex) {\n instance.setZIndex(zIndex);\n },\n};\nvar KmlLayer = /** @class */ (function (_super) {\n __extends(KmlLayer, _super);\n function KmlLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n kmlLayer: null,\n };\n _this.setKmlLayerCallback = function () {\n if (_this.state.kmlLayer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.kmlLayer);\n }\n };\n return _this;\n }\n KmlLayer.prototype.componentDidMount = function () {\n var kmlLayer = new google.maps.KmlLayer(__assign(__assign({}, this.props.options), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$6,\n eventMap: eventMap$6,\n prevProps: {},\n nextProps: this.props,\n instance: kmlLayer,\n });\n this.setState(function setLmlLayer() {\n return {\n kmlLayer: kmlLayer,\n };\n }, this.setKmlLayerCallback);\n };\n KmlLayer.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.kmlLayer !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$6,\n eventMap: eventMap$6,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.kmlLayer,\n });\n }\n };\n KmlLayer.prototype.componentWillUnmount = function () {\n if (this.state.kmlLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.kmlLayer);\n }\n unregisterEvents(this.registeredEvents);\n this.state.kmlLayer.setMap(null);\n }\n };\n KmlLayer.prototype.render = function () {\n return null;\n };\n KmlLayer.contextType = MapContext;\n return KmlLayer;\n}(PureComponent));\n\nfunction getOffsetOverride(containerElement, getPixelPositionOffset) {\n return typeof getPixelPositionOffset === 'function'\n ? getPixelPositionOffset(containerElement.offsetWidth, containerElement.offsetHeight)\n : {\n x: 0,\n y: 0,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createLatLng(inst, Type) { return new Type(inst.lat, inst.lng); }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createLatLngBounds(inst, Type) {\n return new Type(new google.maps.LatLng(inst.ne.lat, inst.ne.lng), new google.maps.LatLng(inst.sw.lat, inst.sw.lng));\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction ensureOfType(inst, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfactory\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n return inst instanceof type ? inst : factory(inst, type);\n}\nfunction ensureOfTypeBounds(inst, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfactory\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n return inst instanceof type ? inst : factory(inst, type);\n}\nfunction getLayoutStylesByBounds(mapCanvasProjection, offset, bounds) {\n var ne = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getNorthEast());\n var sw = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getSouthWest());\n if (ne && sw) {\n return {\n left: \"\".concat(sw.x + offset.x, \"px\"),\n top: \"\".concat(ne.y + offset.y, \"px\"),\n width: \"\".concat(ne.x - sw.x - offset.x, \"px\"),\n height: \"\".concat(sw.y - ne.y - offset.y, \"px\"),\n };\n }\n return {\n left: '-9999px',\n top: '-9999px',\n };\n}\nfunction getLayoutStylesByPosition(mapCanvasProjection, offset, position) {\n var point = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(position);\n if (point) {\n var x = point.x, y = point.y;\n return {\n left: \"\".concat(x + offset.x, \"px\"),\n top: \"\".concat(y + offset.y, \"px\"),\n };\n }\n return {\n left: '-9999px',\n top: '-9999px',\n };\n}\nfunction getLayoutStyles(mapCanvasProjection, offset, bounds, position) {\n return bounds !== undefined\n ? getLayoutStylesByBounds(mapCanvasProjection, offset, ensureOfTypeBounds(bounds, google.maps.LatLngBounds, createLatLngBounds))\n : getLayoutStylesByPosition(mapCanvasProjection, offset, ensureOfType(position, google.maps.LatLng, createLatLng));\n}\nfunction arePositionsEqual(currentPosition, previousPosition) {\n return currentPosition.left === previousPosition.left\n && currentPosition.top === previousPosition.top\n && currentPosition.width === previousPosition.height\n && currentPosition.height === previousPosition.height;\n}\n\nfunction createOverlay(container, pane, position, bounds, getPixelPositionOffset) {\n var Overlay = /** @class */ (function (_super) {\n __extends(Overlay, _super);\n function Overlay(container, pane, position, bounds) {\n var _this = _super.call(this) || this;\n _this.container = container;\n _this.pane = pane;\n _this.position = position;\n _this.bounds = bounds;\n return _this;\n }\n Overlay.prototype.onAdd = function () {\n var _a;\n var pane = (_a = this.getPanes()) === null || _a === void 0 ? void 0 : _a[this.pane];\n pane === null || pane === void 0 ? void 0 : pane.appendChild(this.container);\n };\n Overlay.prototype.draw = function () {\n var projection = this.getProjection();\n var offset = __assign({}, (this.container\n ? getOffsetOverride(this.container, getPixelPositionOffset)\n : {\n x: 0,\n y: 0,\n }));\n var layoutStyles = getLayoutStyles(projection, offset, this.bounds, this.position);\n for (var _i = 0, _a = Object.entries(layoutStyles); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.container.style[key] = value;\n }\n };\n Overlay.prototype.onRemove = function () {\n if (this.container.parentNode !== null) {\n this.container.parentNode.removeChild(this.container);\n }\n };\n return Overlay;\n }(google.maps.OverlayView));\n return new Overlay(container, pane, position, bounds);\n}\n\nfunction convertToLatLngString(latLngLike) {\n if (!latLngLike) {\n return '';\n }\n var latLng = latLngLike instanceof google.maps.LatLng\n ? latLngLike\n : new google.maps.LatLng(latLngLike.lat, latLngLike.lng);\n return latLng + '';\n}\nfunction convertToLatLngBoundsString(latLngBoundsLike) {\n if (!latLngBoundsLike) {\n return '';\n }\n var latLngBounds = latLngBoundsLike instanceof google.maps.LatLngBounds\n ? latLngBoundsLike\n : new google.maps.LatLngBounds(new google.maps.LatLng(latLngBoundsLike.south, latLngBoundsLike.east), new google.maps.LatLng(latLngBoundsLike.north, latLngBoundsLike.west));\n return latLngBounds + '';\n}\nvar FLOAT_PANE = \"floatPane\";\nvar MAP_PANE = \"mapPane\";\nvar MARKER_LAYER = \"markerLayer\";\nvar OVERLAY_LAYER = \"overlayLayer\";\nvar OVERLAY_MOUSE_TARGET = \"overlayMouseTarget\";\nfunction OverlayViewFunctional(_a) {\n var position = _a.position, bounds = _a.bounds, mapPaneName = _a.mapPaneName, zIndex = _a.zIndex, onLoad = _a.onLoad, onUnmount = _a.onUnmount, getPixelPositionOffset = _a.getPixelPositionOffset, children = _a.children;\n var map = useContext(MapContext);\n var container = useMemo(function () {\n var div = document.createElement('div');\n div.style.position = 'absolute';\n return div;\n }, []);\n var overlay = useMemo(function () {\n return createOverlay(container, mapPaneName, position, bounds, getPixelPositionOffset);\n }, [container, mapPaneName, position, bounds]);\n useEffect(function () {\n onLoad === null || onLoad === void 0 ? void 0 : onLoad(overlay);\n overlay === null || overlay === void 0 ? void 0 : overlay.setMap(map);\n return function () {\n onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount(overlay);\n overlay === null || overlay === void 0 ? void 0 : overlay.setMap(null);\n };\n }, [map, overlay]);\n // to move the container to the foreground and background\n useEffect(function () {\n container.style.zIndex = \"\".concat(zIndex);\n }, [zIndex, container]);\n return ReactDOM.createPortal(children, container);\n}\nvar OverlayViewF = memo(OverlayViewFunctional);\nvar OverlayView = /** @class */ (function (_super) {\n __extends(OverlayView, _super);\n function OverlayView(props) {\n var _this = _super.call(this, props) || this;\n _this.state = {\n paneEl: null,\n containerStyle: {\n // set initial position\n position: 'absolute',\n },\n };\n _this.updatePane = function () {\n var mapPaneName = _this.props.mapPaneName;\n // https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapPanes\n var mapPanes = _this.overlayView.getPanes();\n invariant$1(!!mapPaneName, \"OverlayView requires props.mapPaneName but got %s\", mapPaneName);\n if (mapPanes) {\n _this.setState({\n paneEl: mapPanes[mapPaneName],\n });\n }\n else {\n _this.setState({\n paneEl: null,\n });\n }\n };\n _this.onAdd = function () {\n var _a, _b;\n _this.updatePane();\n (_b = (_a = _this.props).onLoad) === null || _b === void 0 ? void 0 : _b.call(_a, _this.overlayView);\n };\n _this.onPositionElement = function () {\n var mapCanvasProjection = _this.overlayView.getProjection();\n var offset = __assign({ x: 0, y: 0 }, (_this.containerRef.current\n ? getOffsetOverride(_this.containerRef.current, _this.props.getPixelPositionOffset)\n : {}));\n var layoutStyles = getLayoutStyles(mapCanvasProjection, offset, _this.props.bounds, _this.props.position);\n var _a = _this.state.containerStyle, left = _a.left, top = _a.top, width = _a.width, height = _a.height;\n if (!arePositionsEqual(layoutStyles, { left: left, top: top, width: width, height: height })) {\n _this.setState({\n containerStyle: {\n top: layoutStyles.top || 0,\n left: layoutStyles.left || 0,\n width: layoutStyles.width || 0,\n height: layoutStyles.height || 0,\n position: 'absolute',\n },\n });\n }\n };\n _this.draw = function () {\n _this.onPositionElement();\n };\n _this.onRemove = function () {\n var _a, _b;\n _this.setState(function () { return ({\n paneEl: null,\n }); });\n (_b = (_a = _this.props).onUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, _this.overlayView);\n };\n _this.containerRef = createRef();\n // You must implement three methods: onAdd(), draw(), and onRemove().\n var overlayView = new google.maps.OverlayView();\n overlayView.onAdd = _this.onAdd;\n overlayView.draw = _this.draw;\n overlayView.onRemove = _this.onRemove;\n _this.overlayView = overlayView;\n return _this;\n }\n OverlayView.prototype.componentDidMount = function () {\n this.overlayView.setMap(this.context);\n };\n OverlayView.prototype.componentDidUpdate = function (prevProps) {\n var prevPositionString = convertToLatLngString(prevProps.position);\n var positionString = convertToLatLngString(this.props.position);\n var prevBoundsString = convertToLatLngBoundsString(prevProps.bounds);\n var boundsString = convertToLatLngBoundsString(this.props.bounds);\n if (prevPositionString !== positionString ||\n prevBoundsString !== boundsString) {\n this.overlayView.draw();\n }\n if (prevProps.mapPaneName !== this.props.mapPaneName) {\n this.updatePane();\n }\n };\n OverlayView.prototype.componentWillUnmount = function () {\n this.overlayView.setMap(null);\n };\n OverlayView.prototype.render = function () {\n var paneEl = this.state.paneEl;\n if (paneEl) {\n return ReactDOM.createPortal(jsx(\"div\", { ref: this.containerRef, style: this.state.containerStyle, children: Children.only(this.props.children) }), paneEl);\n }\n else {\n return null;\n }\n };\n OverlayView.FLOAT_PANE = \"floatPane\";\n OverlayView.MAP_PANE = \"mapPane\";\n OverlayView.MARKER_LAYER = \"markerLayer\";\n OverlayView.OVERLAY_LAYER = \"overlayLayer\";\n OverlayView.OVERLAY_MOUSE_TARGET = \"overlayMouseTarget\";\n OverlayView.contextType = MapContext;\n return OverlayView;\n}(PureComponent));\n\nfunction noop() { return; }\n\nvar eventMap$5 = {\n onDblClick: 'dblclick',\n onClick: 'click',\n};\nvar updaterMap$5 = {\n opacity: function (instance, opacity) {\n instance.setOpacity(opacity);\n },\n};\nfunction GroundOverlayFunctional(_a) {\n var url = _a.url, bounds = _a.bounds, options = _a.options, visible = _a.visible;\n var map = useContext(MapContext);\n var imageBounds = new google.maps.LatLngBounds(new google.maps.LatLng(bounds.south, bounds.west), new google.maps.LatLng(bounds.north, bounds.east));\n var groundOverlay = useMemo(function () {\n var overlay = new google.maps.GroundOverlay(url, imageBounds, __assign({}, options));\n return overlay;\n }, []);\n useEffect(function () {\n if (groundOverlay !== null) {\n groundOverlay.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (typeof url !== 'undefined' && groundOverlay !== null) {\n groundOverlay.set(\"url\", url);\n groundOverlay.setMap(map);\n }\n }, [groundOverlay, url]);\n useEffect(function () {\n if (typeof visible !== 'undefined' && groundOverlay !== null) {\n groundOverlay.setOpacity(visible ? 1 : 0);\n }\n }, [groundOverlay, visible]);\n useEffect(function () {\n var newBounds = new google.maps.LatLngBounds(new google.maps.LatLng(bounds.south, bounds.west), new google.maps.LatLng(bounds.north, bounds.east));\n if (typeof bounds !== 'undefined' && groundOverlay !== null) {\n groundOverlay.set(\"bounds\", newBounds);\n groundOverlay.setMap(map);\n }\n }, [groundOverlay, bounds]);\n return null;\n}\nvar GroundOverlayF = memo(GroundOverlayFunctional);\nvar GroundOverlay = /** @class */ (function (_super) {\n __extends(GroundOverlay, _super);\n function GroundOverlay() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n groundOverlay: null,\n };\n _this.setGroundOverlayCallback = function () {\n if (_this.state.groundOverlay !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.groundOverlay);\n }\n };\n return _this;\n }\n GroundOverlay.prototype.componentDidMount = function () {\n invariant$1(!!this.props.url || !!this.props.bounds, \"For GroundOverlay, url and bounds are passed in to constructor and are immutable after instantiated. This is the behavior of Google Maps JavaScript API v3 ( See https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay) Hence, use the corresponding two props provided by `react-google-maps-api`, url and bounds. In some cases, you'll need the GroundOverlay component to reflect the changes of url and bounds. You can leverage the React's key property to remount the component. Typically, just `key={url}` would serve your need. See https://github.com/tomchentw/react-google-maps/issues/655\");\n var groundOverlay = new google.maps.GroundOverlay(this.props.url, this.props.bounds, __assign(__assign({}, this.props.options), { map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$5,\n eventMap: eventMap$5,\n prevProps: {},\n nextProps: this.props,\n instance: groundOverlay,\n });\n this.setState(function setGroundOverlay() {\n return {\n groundOverlay: groundOverlay,\n };\n }, this.setGroundOverlayCallback);\n };\n GroundOverlay.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.groundOverlay !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$5,\n eventMap: eventMap$5,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.groundOverlay,\n });\n }\n };\n GroundOverlay.prototype.componentWillUnmount = function () {\n if (this.state.groundOverlay) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.groundOverlay);\n }\n this.state.groundOverlay.setMap(null);\n }\n };\n GroundOverlay.prototype.render = function () {\n return null;\n };\n GroundOverlay.defaultProps = {\n onLoad: noop,\n };\n GroundOverlay.contextType = MapContext;\n return GroundOverlay;\n}(PureComponent));\n\nvar eventMap$4 = {};\nvar updaterMap$4 = {\n data: function (instance, data) {\n instance.setData(data);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n};\nfunction HeatmapLayerFunctional(_a) {\n var data = _a.data, onLoad = _a.onLoad, onUnmount = _a.onUnmount, options = _a.options;\n var map = useContext(MapContext);\n var _b = useState(null), instance = _b[0], setInstance = _b[1];\n useEffect(function () {\n if (!google.maps.visualization) {\n invariant$1(!!google.maps.visualization, 'Did you include prop libraries={[\"visualization\"]} in useJsApiScript? %s', google.maps.visualization);\n }\n }, []);\n useEffect(function () {\n invariant$1(!!data, 'data property is required in HeatmapLayer %s', data);\n }, [data]);\n // Order does matter\n useEffect(function () {\n if (instance !== null) {\n instance.setMap(map);\n }\n }, [map]);\n useEffect(function () {\n if (options && instance !== null) {\n instance.setOptions(options);\n }\n }, [instance, options]);\n useEffect(function () {\n var heatmapLayer = new google.maps.visualization.HeatmapLayer(__assign(__assign({}, (options || {})), { data: data, map: map }));\n setInstance(heatmapLayer);\n if (onLoad) {\n onLoad(heatmapLayer);\n }\n return function () {\n if (instance !== null) {\n if (onUnmount) {\n onUnmount(instance);\n }\n instance.setMap(null);\n }\n };\n }, []);\n return null;\n}\nvar HeatmapLayerF = memo(HeatmapLayerFunctional);\nvar HeatmapLayer = /** @class */ (function (_super) {\n __extends(HeatmapLayer, _super);\n function HeatmapLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n heatmapLayer: null,\n };\n _this.setHeatmapLayerCallback = function () {\n if (_this.state.heatmapLayer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.heatmapLayer);\n }\n };\n return _this;\n }\n HeatmapLayer.prototype.componentDidMount = function () {\n invariant$1(!!google.maps.visualization, 'Did you include prop libraries={[\"visualization\"]} to <LoadScript />? %s', google.maps.visualization);\n invariant$1(!!this.props.data, 'data property is required in HeatmapLayer %s', this.props.data);\n var heatmapLayer = new google.maps.visualization.HeatmapLayer(__assign(__assign({}, (this.props.options || {})), { data: this.props.data, map: this.context }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$4,\n eventMap: eventMap$4,\n prevProps: {},\n nextProps: this.props,\n instance: heatmapLayer,\n });\n this.setState(function setHeatmapLayer() {\n return {\n heatmapLayer: heatmapLayer,\n };\n }, this.setHeatmapLayerCallback);\n };\n HeatmapLayer.prototype.componentDidUpdate = function (prevProps) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$4,\n eventMap: eventMap$4,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.heatmapLayer,\n });\n };\n HeatmapLayer.prototype.componentWillUnmount = function () {\n if (this.state.heatmapLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.heatmapLayer);\n }\n unregisterEvents(this.registeredEvents);\n this.state.heatmapLayer.setMap(null);\n }\n };\n HeatmapLayer.prototype.render = function () {\n return null;\n };\n HeatmapLayer.contextType = MapContext;\n return HeatmapLayer;\n}(PureComponent));\n\nvar eventMap$3 = {\n onCloseClick: 'closeclick',\n onPanoChanged: 'pano_changed',\n onPositionChanged: 'position_changed',\n onPovChanged: 'pov_changed',\n onResize: 'resize',\n onStatusChanged: 'status_changed',\n onVisibleChanged: 'visible_changed',\n onZoomChanged: 'zoom_changed',\n};\nvar updaterMap$3 = {\n register: function (instance, provider, options) {\n instance.registerPanoProvider(provider, options);\n },\n links: function (instance, links) {\n instance.setLinks(links);\n },\n motionTracking: function (instance, motionTracking) {\n instance.setMotionTracking(motionTracking);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n pano: function (instance, pano) {\n instance.setPano(pano);\n },\n position: function (instance, position) {\n instance.setPosition(position);\n },\n pov: function (instance, pov) {\n instance.setPov(pov);\n },\n visible: function (instance, visible) {\n instance.setVisible(visible);\n },\n zoom: function (instance, zoom) {\n instance.setZoom(zoom);\n },\n};\nvar StreetViewPanorama = /** @class */ (function (_super) {\n __extends(StreetViewPanorama, _super);\n function StreetViewPanorama() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n streetViewPanorama: null,\n };\n _this.setStreetViewPanoramaCallback = function () {\n if (_this.state.streetViewPanorama !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.streetViewPanorama);\n }\n };\n return _this;\n }\n StreetViewPanorama.prototype.componentDidMount = function () {\n var _a, _b;\n var streetViewPanorama = (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.getStreetView()) !== null && _b !== void 0 ? _b : null;\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$3,\n eventMap: eventMap$3,\n prevProps: {},\n nextProps: this.props,\n instance: streetViewPanorama,\n });\n this.setState(function () {\n return {\n streetViewPanorama: streetViewPanorama,\n };\n }, this.setStreetViewPanoramaCallback);\n };\n StreetViewPanorama.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.streetViewPanorama !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$3,\n eventMap: eventMap$3,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.streetViewPanorama,\n });\n }\n };\n StreetViewPanorama.prototype.componentWillUnmount = function () {\n if (this.state.streetViewPanorama !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewPanorama);\n }\n unregisterEvents(this.registeredEvents);\n this.state.streetViewPanorama.setVisible(false);\n }\n };\n StreetViewPanorama.prototype.render = function () {\n return null;\n };\n StreetViewPanorama.contextType = MapContext;\n return StreetViewPanorama;\n}(PureComponent));\n\nvar StreetViewService = /** @class */ (function (_super) {\n __extends(StreetViewService, _super);\n function StreetViewService() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n streetViewService: null,\n };\n _this.setStreetViewServiceCallback = function () {\n if (_this.state.streetViewService !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.streetViewService);\n }\n };\n return _this;\n }\n StreetViewService.prototype.componentDidMount = function () {\n var streetViewService = new google.maps.StreetViewService();\n this.setState(function setStreetViewService() {\n return {\n streetViewService: streetViewService,\n };\n }, this.setStreetViewServiceCallback);\n };\n StreetViewService.prototype.componentWillUnmount = function () {\n if (this.state.streetViewService !== null && this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewService);\n }\n };\n StreetViewService.prototype.render = function () {\n return null;\n };\n StreetViewService.contextType = MapContext;\n return StreetViewService;\n}(PureComponent));\n\nvar DirectionsService = /** @class */ (function (_super) {\n __extends(DirectionsService, _super);\n function DirectionsService() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n directionsService: null,\n };\n _this.setDirectionsServiceCallback = function () {\n if (_this.state.directionsService !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.directionsService);\n }\n };\n return _this;\n }\n DirectionsService.prototype.componentDidMount = function () {\n invariant$1(!!this.props.options, 'DirectionsService expected options object as parameter, but got %s', this.props.options);\n var directionsService = new google.maps.DirectionsService();\n this.setState(function setDirectionsService() {\n return {\n directionsService: directionsService,\n };\n }, this.setDirectionsServiceCallback);\n };\n DirectionsService.prototype.componentDidUpdate = function () {\n if (this.state.directionsService !== null) {\n this.state.directionsService.route(this.props.options, this.props.callback);\n }\n };\n DirectionsService.prototype.componentWillUnmount = function () {\n if (this.state.directionsService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsService);\n }\n }\n };\n DirectionsService.prototype.render = function () {\n return null;\n };\n return DirectionsService;\n}(PureComponent));\n\nvar eventMap$2 = {\n onDirectionsChanged: 'directions_changed',\n};\nvar updaterMap$2 = {\n directions: function (instance, directions) {\n instance.setDirections(directions);\n },\n map: function (instance, map) {\n instance.setMap(map);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n panel: function (instance, panel) {\n instance.setPanel(panel);\n },\n routeIndex: function (instance, routeIndex) {\n instance.setRouteIndex(routeIndex);\n },\n};\nvar DirectionsRenderer = /** @class */ (function (_super) {\n __extends(DirectionsRenderer, _super);\n function DirectionsRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n directionsRenderer: null,\n };\n _this.setDirectionsRendererCallback = function () {\n if (_this.state.directionsRenderer !== null) {\n _this.state.directionsRenderer.setMap(_this.context);\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.directionsRenderer);\n }\n }\n };\n return _this;\n }\n DirectionsRenderer.prototype.componentDidMount = function () {\n var directionsRenderer = new google.maps.DirectionsRenderer(this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$2,\n eventMap: eventMap$2,\n prevProps: {},\n nextProps: this.props,\n instance: directionsRenderer,\n });\n this.setState(function setDirectionsRenderer() {\n return {\n directionsRenderer: directionsRenderer,\n };\n }, this.setDirectionsRendererCallback);\n };\n DirectionsRenderer.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.directionsRenderer !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$2,\n eventMap: eventMap$2,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.directionsRenderer,\n });\n }\n };\n DirectionsRenderer.prototype.componentWillUnmount = function () {\n if (this.state.directionsRenderer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsRenderer);\n }\n unregisterEvents(this.registeredEvents);\n if (this.state.directionsRenderer) {\n this.state.directionsRenderer.setMap(null);\n }\n }\n };\n DirectionsRenderer.prototype.render = function () {\n return jsx(Fragment, {});\n };\n DirectionsRenderer.contextType = MapContext;\n return DirectionsRenderer;\n}(PureComponent));\n\nvar DistanceMatrixService = /** @class */ (function (_super) {\n __extends(DistanceMatrixService, _super);\n function DistanceMatrixService() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n distanceMatrixService: null,\n };\n _this.setDistanceMatrixServiceCallback = function () {\n if (_this.state.distanceMatrixService !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.distanceMatrixService);\n }\n };\n return _this;\n }\n DistanceMatrixService.prototype.componentDidMount = function () {\n invariant$1(!!this.props.options, 'DistanceMatrixService expected options object as parameter, but go %s', this.props.options);\n var distanceMatrixService = new google.maps.DistanceMatrixService();\n this.setState(function setDistanceMatrixService() {\n return {\n distanceMatrixService: distanceMatrixService,\n };\n }, this.setDistanceMatrixServiceCallback);\n };\n DistanceMatrixService.prototype.componentDidUpdate = function () {\n if (this.state.distanceMatrixService !== null) {\n this.state.distanceMatrixService.getDistanceMatrix(this.props.options, this.props.callback);\n }\n };\n DistanceMatrixService.prototype.componentWillUnmount = function () {\n if (this.state.distanceMatrixService !== null && this.props.onUnmount) {\n this.props.onUnmount(this.state.distanceMatrixService);\n }\n };\n DistanceMatrixService.prototype.render = function () {\n return null;\n };\n return DistanceMatrixService;\n}(PureComponent));\n\nvar eventMap$1 = {\n onPlacesChanged: 'places_changed',\n};\nvar updaterMap$1 = {\n bounds: function (instance, bounds) {\n instance.setBounds(bounds);\n },\n};\nvar StandaloneSearchBox = /** @class */ (function (_super) {\n __extends(StandaloneSearchBox, _super);\n function StandaloneSearchBox() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = createRef();\n _this.state = {\n searchBox: null,\n };\n _this.setSearchBoxCallback = function () {\n if (_this.state.searchBox !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.searchBox);\n }\n };\n return _this;\n }\n StandaloneSearchBox.prototype.componentDidMount = function () {\n invariant$1(!!google.maps.places, 'You need to provide libraries={[\"places\"]} prop to <LoadScript /> component %s', google.maps.places);\n if (this.containerElement !== null && this.containerElement.current !== null) {\n var input = this.containerElement.current.querySelector('input');\n if (input !== null) {\n var searchBox_1 = new google.maps.places.SearchBox(input, this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$1,\n eventMap: eventMap$1,\n prevProps: {},\n nextProps: this.props,\n instance: searchBox_1,\n });\n this.setState(function setSearchBox() {\n return {\n searchBox: searchBox_1,\n };\n }, this.setSearchBoxCallback);\n }\n }\n };\n StandaloneSearchBox.prototype.componentDidUpdate = function (prevProps) {\n if (this.state.searchBox !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$1,\n eventMap: eventMap$1,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.searchBox,\n });\n }\n };\n StandaloneSearchBox.prototype.componentWillUnmount = function () {\n if (this.state.searchBox !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.searchBox);\n }\n unregisterEvents(this.registeredEvents);\n }\n };\n StandaloneSearchBox.prototype.render = function () {\n return jsx(\"div\", { ref: this.containerElement, children: Children.only(this.props.children) });\n };\n StandaloneSearchBox.contextType = MapContext;\n return StandaloneSearchBox;\n}(PureComponent));\n\nvar eventMap = {\n onPlaceChanged: 'place_changed',\n};\nvar updaterMap = {\n bounds: function (instance, bounds) {\n instance.setBounds(bounds);\n },\n restrictions: function (instance, restrictions) {\n instance.setComponentRestrictions(restrictions);\n },\n fields: function (instance, fields) {\n instance.setFields(fields);\n },\n options: function (instance, options) {\n instance.setOptions(options);\n },\n types: function (instance, types) {\n instance.setTypes(types);\n },\n};\nvar Autocomplete = /** @class */ (function (_super) {\n __extends(Autocomplete, _super);\n function Autocomplete() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = createRef();\n _this.state = {\n autocomplete: null,\n };\n _this.setAutocompleteCallback = function () {\n if (_this.state.autocomplete !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.autocomplete);\n }\n };\n return _this;\n }\n Autocomplete.prototype.componentDidMount = function () {\n var _a;\n invariant$1(!!google.maps.places, 'You need to provide libraries={[\"places\"]} prop to <LoadScript /> component %s', google.maps.places);\n // TODO: why current could be equal null?\n var input = (_a = this.containerElement.current) === null || _a === void 0 ? void 0 : _a.querySelector('input');\n if (input) {\n var autocomplete_1 = new google.maps.places.Autocomplete(input, this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap,\n eventMap: eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: autocomplete_1,\n });\n this.setState(function () {\n return {\n autocomplete: autocomplete_1,\n };\n }, this.setAutocompleteCallback);\n }\n };\n Autocomplete.prototype.componentDidUpdate = function (prevProps) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap,\n eventMap: eventMap,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.autocomplete,\n });\n };\n Autocomplete.prototype.componentWillUnmount = function () {\n if (this.state.autocomplete !== null) {\n unregisterEvents(this.registeredEvents);\n }\n };\n Autocomplete.prototype.render = function () {\n return jsx(\"div\", { ref: this.containerElement, className: this.props.className, children: Children.only(this.props.children) });\n };\n Autocomplete.defaultProps = {\n className: ''\n };\n Autocomplete.contextType = MapContext;\n return Autocomplete;\n}(PureComponent));\n\nexport { Autocomplete, BicyclingLayer, BicyclingLayerF, Circle, CircleF, Data, DataF, DirectionsRenderer, DirectionsService, DistanceMatrixService, DrawingManager, DrawingManagerF, FLOAT_PANE, GoogleMap, index_esm as GoogleMapsMarkerClusterer, GoogleMarkerClusterer$1 as GoogleMarkerClusterer, GroundOverlay, GroundOverlayF, HeatmapLayer, HeatmapLayerF, InfoBoxComponent as InfoBox, InfoBoxF, InfoWindow, InfoWindowF, KmlLayer, LoadScript, LoadScriptNext$1 as LoadScriptNext, MAP_PANE, MARKER_LAYER, MapContext, Marker, ClustererComponent as MarkerClusterer, MarkerClustererF, MarkerF, OVERLAY_LAYER, OVERLAY_MOUSE_TARGET, OverlayView, OverlayViewF, Polygon, PolygonF, Polyline, PolylineF, Rectangle, RectangleF, StandaloneSearchBox, StreetViewPanorama, StreetViewService, TrafficLayer, TrafficLayerF, TransitLayer, TransitLayerF, useGoogleMap, useJsApiLoader, useLoadScript };\n//# sourceMappingURL=esm.js.map\n","function projectMercator(latLng) {\r\n var siny = Math.sin((latLng.lat() * Math.PI) / 180);\r\n\r\n // Truncating to 0.9999 effectively limits latitude to 89.189. This is\r\n // about a third of a tile past the edge of the world tile.\r\n siny = Math.min(Math.max(siny, -0.9999), 0.9999);\r\n\r\n return new google.maps.Point(\r\n 256 * (0.5 + latLng.lng() / 360),\r\n 256 * (0.5 - Math.log((1 + siny) / (1 - siny)) / (4 * Math.PI))\r\n );\r\n}\r\n\r\nfunction tile2latLng(tx, ty, zoom) {\r\n var lngdeg = tx / Math.pow(2, zoom) * 360 - 180;\r\n var n = Math.PI - 2 * Math.PI * ty / Math.pow(2, zoom);\r\n var latdeg = 180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\r\n\r\n return { lat: latdeg, lng: lngdeg };\r\n}\r\n\r\nfunction diffLatLng2Meters(lat1, lng1, lat2, lng2) {\r\n var R = 6378137; // Radius of earth in m\r\n var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180;\r\n var dLng = lng2 * Math.PI / 180 - lng1 * Math.PI / 180;\r\n var a = Math.sin(dLat/2) * Math.sin(dLat/2) +\r\n Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *\r\n Math.sin(dLng/2) * Math.sin(dLng/2);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\r\n var d = R * c;\r\n return d; // meters\r\n}\r\n\r\nfunction get_FillColor(allowSelect, isSelected, fillColor, selectedFillColor) {\r\n var color = fillColor;\r\n if (allowSelect && isSelected) {\r\n color = selectedFillColor;\r\n }\r\n return color\r\n}\r\n\r\nfunction get_FillColorOpacity(allowSelect, isSelected, fillColorOpacity, selectedFillColorOpacity) {\r\n var color = fillColorOpacity;\r\n if (allowSelect && isSelected) {\r\n color = selectedFillColorOpacity;\r\n }\r\n return color\r\n}\r\n\r\nfunction formatBlockLabel(Id, locname, locarea, fontSize) {\r\n var ne = document.createElement(\"div\");\r\n ne.id = 'locname' + Id;\r\n ne.style.display = \"inline-block\";\r\n ne.style.fontFamily = \"Arial, sans-serif\";\r\n ne.style.fontSize = fontSize + 'px';\r\n ne.textContent = locname;\r\n\r\n var ae = document.createElement(\"div\");\r\n ae.id = 'locarea' + Id;\r\n ae.style.display = \"inline-block\";\r\n ae.style.fontFamily = \"Arial, sans-serif\";\r\n ae.style.fontSize = fontSize + 'px';\r\n ae.textContent = locarea;\r\n\r\n var nce = document.createElement(\"div\");\r\n nce.id = 'locnameContainer' + Id;\r\n nce.style.position = \"absolute\";\r\n nce.style.top = \"0\";\r\n nce.style.left = \"-1000px\";\r\n\r\n var ace = document.createElement(\"div\");\r\n ace.id = 'locareaContainer' + Id;\r\n ace.style.position = \"absolute\";\r\n ace.style.top = \"0\";\r\n ace.style.left = \"-1000px\";\r\n\r\n nce.appendChild(ne);\r\n ace.appendChild(ae);\r\n document.body.appendChild(nce);\r\n document.body.appendChild(ace);\r\n\r\n var nameElem = document.getElementById('locname' + Id);\r\n var areaElem = document.getElementById('locarea' + Id);\r\n var nameContainerElem = document.getElementById('locnameContainer' + Id);\r\n var areaContainerElem = document.getElementById('locareaContainer' + Id);\r\n\r\n var nameWidth = nameElem.clientWidth;\r\n var areaWidth = areaElem.clientWidth;\r\n\r\n nameContainerElem.remove();\r\n areaContainerElem.remove();\r\n\r\n return { nameWidth: nameWidth, areaWidth: areaWidth };\r\n}\r\n\r\nexport { projectMercator, tile2latLng, diffLatLng2Meters, formatBlockLabel, get_FillColorOpacity, get_FillColor }","import { Field } from \"../interfaces/Data/Field\";\r\n\r\nexport class ClearHTML { \r\n static clearString(str: string): string {\r\n return str\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/\"/g, \"&quot;\");\r\n }\r\n}\r\n\r\nexport function formatFieldContent(location: Field): string {\r\n let content = `${location.FarmName} - ${location.LocationName}<br>${location.Area} ha${location.IsIrrigated ? ', irrigated' : ''}`;\r\n \r\n if (location.CropPlanted) {\r\n content += `<br>${location.CropPlanted}`;\r\n if (location.CultivarPlanted) {\r\n content += ` (${location.CultivarPlanted})`;\r\n }\r\n if (location.PlantingDate) {\r\n content += `<br>Planted: ${location.PlantingDate.replace(/-/g, \"/\")}`;\r\n }\r\n }\r\n return content;\r\n}\r\n\r\nlet tooltipElement: HTMLDivElement | null = null;\r\n\r\nexport const showTooltip = (\r\n event: google.maps.KmlMouseEvent, \r\n content: string, \r\n map: google.maps.Map\r\n): void => {\r\n if (!tooltipElement && event.latLng) {\r\n const overlay = new google.maps.OverlayView();\r\n overlay.setMap(map);\r\n overlay.draw = () => {};\r\n \r\n const point = overlay.getProjection().fromLatLngToDivPixel(event.latLng);\r\n \r\n tooltipElement = document.createElement('div');\r\n tooltipElement.style.cssText = `\r\n position: fixed;\r\n background: rgba(0, 0, 0, 0.75);\r\n color: #ffffff;\r\n border-radius: 4px;\r\n padding: 8px 12px;\r\n font-size: 12px;\r\n z-index: 1000;\r\n pointer-events: none;\r\n white-space: nowrap;\r\n `;\r\n tooltipElement.innerHTML = content;\r\n \r\n if (point) {\r\n tooltipElement.style.top = `${point.y + 10}px`;\r\n tooltipElement.style.left = `${point.x + 10}px`;\r\n }\r\n \r\n document.body.appendChild(tooltipElement);\r\n }\r\n};\r\n\r\nexport const moveTooltip = (\r\n event: google.maps.KmlMouseEvent, \r\n map: google.maps.Map,\r\n offset = { x: 10, y: 10 }\r\n): void => {\r\n if (tooltipElement && event.latLng) {\r\n const overlay = new google.maps.OverlayView();\r\n overlay.setMap(map);\r\n overlay.draw = () => {};\r\n \r\n const point = overlay.getProjection().fromLatLngToDivPixel(event.latLng);\r\n if (point) {\r\n tooltipElement!.style.top = `${point.y + offset.y}px`;\r\n tooltipElement!.style.left = `${point.x + offset.x}px`;\r\n }\r\n }\r\n};\r\n\r\nexport const hideTooltip = (): void => {\r\n if (tooltipElement) {\r\n document.body.removeChild(tooltipElement);\r\n tooltipElement = null;\r\n }\r\n};","function toRadians(angleInDegrees) {\r\n return (angleInDegrees * Math.PI) / 180;\r\n}\r\n\r\nfunction toDegrees(angleInRadians) {\r\n return (angleInRadians * 180) / Math.PI;\r\n}\r\n\r\nfunction offset(c1, distance, bearing) {\r\n var lat1 = toRadians(c1[1]);\r\n var lon1 = toRadians(c1[0]);\r\n var dByR = distance / 6378137;\r\n var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));\r\n var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));\r\n return new google.maps.LatLng({ lat: toDegrees(lat), lng: toDegrees(lon) });\r\n}\r\n\r\nfunction circleToPolygon(center, radius, numberOfWaypoints, isHole) {\r\n var coordinates = [];\r\n for (var i = 0; i < numberOfWaypoints; ++i) {\r\n coordinates.push(offset(center, radius, (2 * Math.PI * - i) / numberOfWaypoints));\r\n }\r\n if (isHole) {\r\n return coordinates;\r\n } else {\r\n return coordinates.reverse();\r\n }\r\n}\r\n\r\nexport { toRadians, toDegrees, offset, circleToPolygon };","export class IQLPolygonCustomEdit {\r\n\r\n constructor() {\r\n }\r\n\r\n delete(map, currentPolygonCustomEdit) {\r\n\r\n\t\tcurrentPolygonCustomEdit.getPath().forEach(function (vertex, index) {\r\n\t\t\tif (vertex.marker) {\r\n\t\t\t\tvertex.marker.setMap(null);\r\n\t\t\t\tvertex.marker = undefined;\r\n\t\t\t}\r\n\t\t\tif (vertex.ghostMarker) {\r\n\t\t\t\tvertex.ghostMarker.setMap(null);\r\n\t\t\t\tvertex.ghostMarker = undefined;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn currentPolygonCustomEdit;\t\r\n\r\n\t}\r\n\r\n edit(map, polygon, currentPolygonCustomEdit, isMobile) {\r\n\t\t\r\n\t\tif(isMobile) {\r\n\t\t\tvar svgpi = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgpi += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgpi += '<path fill=\"rgba(255,255,255,1)\" stroke=\"#303030\" stroke-width=\"1\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgpi += '</svg>';\r\n\r\n\t\t\tvar pointIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgpi),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24)\r\n\t\t\t};\r\n\r\n\t\t\tvar svgmpi = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgmpi += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgmpi += '<path fill=\"rgba(255,255,255,0.4)\" stroke=\"#303030\" stroke-width=\"0.3\" stroke-opacity=\"0.01\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgmpi += '</svg>';\r\n\r\n\t\t\tvar midPointIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgmpi),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24)\r\n\t\t\t};\r\n\r\n\t\t\tvar svgup = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgup += '<g transform=\"scale(0.4 0.4)\">';\r\n\t\t\tsvgup += '<path style=\"fill:#f1a81e;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgup += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</svg>';\r\n\r\n\t\t\tvar handleIconUp = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgup),\r\n\t\t\t\tanchor: new google.maps.Point(30, 60)\r\n\t\t\t};\r\n\r\n\t\t\tvar svgdown = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgdown += '<g transform=\"scale(0.4 0.4) rotate(180 26 26)\">';\r\n\t\t\tsvgdown += '<path style=\"fill:#f1a81e;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgdown += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</svg>';\r\n\r\n\t\t\tvar handleIconDown = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgdown),\r\n\t\t\t\tanchor: new google.maps.Point(30, 0)\r\n\t\t\t};\r\n\t\t\r\n\t\t} else {\r\n\r\n\t\t\tvar pointIcon = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1\r\n\t\t\t};\r\n\r\n\t\t\tvar midPointIcon = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 0.4,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 0.3,\r\n\t\t\t\tstrokeOpacity: 0.01,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar ghostPath = new google.maps.Polyline({\r\n\t\t\tmap: map,\r\n\t\t\tstrokeColor: '#ffa500',\r\n\t\t\tstrokeOpacity: 1,\r\n\t\t\tstrokeWeight: 3\r\n\t\t});\r\n\r\n\t\tfunction at(index){\r\n\t\t\treturn polygon.getPath().getAt(index);\r\n\t\t}\r\n\r\n\t\tfunction vertexGhostDragStart() {\r\n\t\t\t\r\n\t\t\tvar polygonBounds = new google.maps.LatLngBounds();\r\n\t\t\tpolygon.getPath().forEach(function (vertex, index) {\r\n\t\t\t\tvertex.marker.setIcon(pointIcon);\r\n\t\t\t\tpolygonBounds.extend(vertex);\r\n\t\t\t});\t\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tvar polygonBoundsCenter = polygonBounds.getCenter();\r\n\t\t\t\tif(this.position.lat() >= polygonBoundsCenter.lat()) { \r\n\t\t\t\t\tthis.setIcon(handleIconUp);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.setIcon(handleIconDown);\r\n\t\t\t\t}\t\t\r\n\t\t\t}\t\r\n\t\t}\r\n\t\t\r\n\t\tfunction vertexGhostDrag() {\r\n\t\t\tif (ghostPath.getPath().getLength() === 0) {\r\n\t\t\t\tif(this.marker.editIndex < polygon.getPath().getLength() - 1) {\r\n\t\t\t\t\tghostPath.setPath([\r\n\t\t\t\t\t\tthis.marker.getPosition(), \r\n\t\t\t\t\t\tthis.getPosition(), \r\n\t\t\t\t\t\tat(this.marker.editIndex + 1)\r\n\t\t\t\t\t]);\r\n\t\t\t\t} else if(this.marker.editIndex == polygon.getPath().getLength() - 1) {\t\r\n\t\t\t\t\tghostPath.setPath([\r\n\t\t\t\t\t\tthis.marker.getPosition(), \r\n\t\t\t\t\t\tthis.getPosition(), \r\n\t\t\t\t\t\tat(0)\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\t\r\n\t\t\t} \r\n\t\t\tghostPath.getPath().setAt(1, this.getPosition());\r\n\t\t}\r\n\r\n\t\tfunction moveGhostMarkers(marker) {\r\n\t\t \r\n\t\t\tvar vertex = at(marker.editIndex);\r\n\t\t\tvar previous, next, position;\r\n\t\t\t\r\n\t\t\tif(marker.editIndex === 0) { \r\n\t\t\t\tprevious = at(polygon.getPath().getLength()-1);\r\n\t\t\t} else {\t\r\n\t\t\t\tprevious = at(marker.editIndex - 1);\r\n\t\t\t} \r\n\t\t\tif(marker.editIndex == polygon.getPath().getLength()-1) {\r\n\t\t\t\tnext = at(0);\r\n\t\t\t} else {\t\r\n\t\t\t\tnext = at(marker.editIndex + 1);\r\n\t\t\t} \r\n\t\t\tposition = marker.getPosition();\r\n \r\n\t\t\tif (vertex && vertex.ghostMarker) {\r\n\t\t\t\tif (!google.maps.geometry) {\r\n\t\t\t\t\tvertex.ghostMarker.setPosition(new google.maps.LatLng(vertex.lat() + 0.5 * (next.lat() - vertex.lat()), vertex.lng() + 0.5 * (next.lng() - vertex.lng())));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvertex.ghostMarker.setPosition(google.maps.geometry.spherical.interpolate(vertex, next, 0.5));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (previous && previous.ghostMarker) {\r\n\t\t\t\tif (!google.maps.geometry) {\r\n\t\t\t\t\tprevious.ghostMarker.setPosition(new google.maps.LatLng(previous.lat() + 0.5 * (position.lat() - previous.lat()), previous.lng() + 0.5 * (position.lng() - previous.lng())));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprevious.ghostMarker.setPosition(google.maps.geometry.spherical.interpolate(previous, position, 0.5));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction vertexGhostDragEnd() {\r\n\r\n\t\t\tthis.setIcon(midPointIcon);\t\t\r\n\t\t \r\n\t\t\tvar position = this.getPosition(), \r\n\t\t\t\tindex = this.marker.editIndex + 1,\r\n\t\t\t\tvertex;\r\n \r\n\t\t\tghostPath.getPath().forEach(function() {\r\n\t\t\t\tghostPath.getPath().pop();\r\n\t\t\t});\r\n \r\n\t\t\tpolygon.getPath().insertAt(index, position);\r\n \r\n\t\t\tvertex = createMarkerVertex(at(index), pointIcon);\r\n\t\t\tvertex.editIndex = index;\r\n \r\n\t\t\tmoveGhostMarkers(this.marker);\r\n \r\n\t\t\tcreateGhostMarkerVertex(at(index));\r\n \r\n\t\t\tpolygon.getPath().forEach(function (vertex, index) {\r\n\t\t\t\tif (vertex.marker) {\r\n\t\t\t\t\tvertex.marker.editIndex = index;\r\n\t\t\t\t}\r\n\t\t\t});\r\n \r\n\t\t\tgoogle.maps.event.trigger(polygon, 'insert_at', index, position);\r\n\t\t}\r\n\r\n\t\tfunction createGhostMarkerVertex(point) {\r\n\r\n\t\t\tif (point.marker.editIndex < polygon.getPath().getLength() - 1) {\r\n\t\t\t\tvar next = at(point.marker.editIndex + 1),\r\n\t\t\t\t\tposition, vertex;\r\n \r\n\t\t\t\tif (!google.maps.geometry) {\r\n\t\t\t\t\tposition = new google.maps.LatLng(point.lat() + 0.5 * (next.lat() - point.lat()), point.lng() + 0.5 * (next.lng() - point.lng()));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tposition = google.maps.geometry.spherical.interpolate(point, next, 0.5);\r\n\t\t\t\t}\r\n \r\n\t\t\t\tvertex = point.ghostMarker;\r\n \r\n\t\t\t\tif (!vertex){\r\n\t\t\t\t\tvertex = new google.maps.Marker({\r\n\t\t\t\t\t\tmap: map,\r\n\t\t\t\t\t\ticon: midPointIcon,\r\n\t\t\t\t\t\tdraggable: true,\r\n\t\t\t\t\t\traiseOnDrag: false\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tgoogle.maps.event.addListener(vertex, \"dragstart\", vertexGhostDragStart);\r\n\t\t\t\t\tgoogle.maps.event.addListener(vertex, \"drag\", vertexGhostDrag);\r\n\t\t\t\t\tgoogle.maps.event.addListener(vertex, \"dragend\", vertexGhostDragEnd);\r\n\r\n\t\t\t\t\tpoint.ghostMarker = vertex;\r\n\t\t\t\t\tvertex.marker = point.marker;\r\n\t\t\t\t}\r\n \r\n\t\t\t\tvertex.setPosition(position);\r\n\t\t\t\treturn vertex;\r\n\r\n\t\t\t} else if (point.marker.editIndex == polygon.getPath().getLength() - 1) {\r\n\t\t\t\tvar next = at(0),\r\n\t\t\t\t\tposition, vertex;\r\n \r\n\t\t\t\tif (!google.maps.geometry) {\r\n\t\t\t\t\tposition = new google.maps.LatLng(point.lat() + 0.5 * (next.lat() - point.lat()), point.lng() + 0.5 * (next.lng() - point.lng()));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tposition = google.maps.geometry.spherical.interpolate(point, next, 0.5);\r\n\t\t\t\t}\r\n \r\n\t\t\t\tvertex = point.ghostMarker;\r\n \r\n\t\t\t\tif (!vertex){\r\n\t\t\t\t\tvertex = new google.maps.Marker({\r\n\t\t\t\t\t\tmap: map,\r\n\t\t\t\t\t\ticon: midPointIcon,\r\n\t\t\t\t\t\tdraggable: true,\r\n\t\t\t\t\t\traiseOnDrag: false\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tgoogle.maps.event.addListener(vertex, \"dragstart\", vertexGhostDragStart);\r\n\t\t\t\t\tgoogle.maps.event.addListener(vertex, \"drag\", vertexGhostDrag);\r\n\t\t\t\t\tgoogle.maps.event.addListener(vertex, \"dragend\", vertexGhostDragEnd);\r\n\r\n\t\t\t\t\tpoint.ghostMarker = vertex;\r\n\t\t\t\t\tvertex.marker = point.marker;\r\n\t\t\t\t}\r\n \r\n\t\t\t\tvertex.setPosition(position);\r\n\t\t\t\treturn vertex;\r\n\r\n\t\t\t}\t \r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfunction vertexDragStart() {\r\n\t\t\tvar polygonBounds = new google.maps.LatLngBounds();\r\n\t\t\tpolygon.getPath().forEach(function (vertex, index) {\r\n\t\t\t\tvertex.marker.setIcon(pointIcon);\r\n\t\t\t\tpolygonBounds.extend(vertex);\r\n\t\t\t});\t\t\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tvar polygonBoundsCenter = polygonBounds.getCenter();\r\n\t\t\t\tif(this.position.lat() >= polygonBoundsCenter.lat()) { \r\n\t\t\t\t\tthis.setIcon(handleIconUp);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.setIcon(handleIconDown);\r\n\t\t\t\t}\t\t\r\n\t\t\t}\r\n\t\t}\t\t\r\n\r\n\t\tfunction vertexDrag() {\r\n\t\t\tvar vertex = this.getPosition();\r\n\t\t\tvertex.marker = this;\r\n\t\t\tvertex.ghostMarker = at(this.editIndex).ghostMarker;\r\n\t\t\tpolygon.getPath().setAt(this.editIndex, vertex);\r\n\t\t\tmoveGhostMarkers(this);\r\n\t\t}\r\n \r\n\t\tfunction vertexDragEnd() {\r\n\t\t\tgoogle.maps.event.trigger(polygon, 'update_at', this.editIndex, this.getPosition());\r\n\t\t}\r\n\r\n\t\tfunction vertexRightClick() {\r\n\t\t\tvar vertex = at(this.editIndex),\r\n\t\t\t\tprevious = at(this.editIndex - 1);\r\n \r\n\t\t\tif (vertex.ghostMarker) {\r\n\t\t\t\tvertex.ghostMarker.setMap(null);\r\n\t\t\t}\r\n \r\n\t\t\tpolygon.getPath().removeAt(this.editIndex);\r\n \r\n\t\t\tif (previous) {\r\n\t\t\t\tif (this.editIndex < polygon.getPath().getLength()) {\r\n\t\t\t\t\tmoveGhostMarkers(previous.marker);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprevious.ghostMarker.setMap(null);\r\n\t\t\t\t\tprevious.ghostMarker = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n \r\n\t\t\tthis.setMap(null);\r\n\t\t\tpolygon.getPath().forEach(function (vertex, index) {\r\n\t\t\t\tif (vertex.marker) {\r\n\t\t\t\t\tvertex.marker.editIndex = index;\r\n\t\t\t\t}\r\n\t\t\t});\r\n \r\n\t\t\tif (polygon.getPath().getLength() === 1) {\r\n\t\t\t\tpolygon.getPath().pop().marker.setMap(null);\r\n\t\t\t}\r\n \r\n\t\t\tgoogle.maps.event.trigger(polygon, 'remove_at', this.editIndex, vertex);\r\n\t\t}\r\n\r\n\t\tfunction createMarkerVertex(point, icon) {\r\n \r\n\t\t\tvar vertex = point.marker;\r\n \r\n\t\t\tif (!vertex){\r\n \r\n\t\t\t\tvertex = new google.maps.Marker({\r\n\t\t\t\t\tposition: point,\r\n\t\t\t\t\tmap: map,\r\n\t\t\t\t\ticon: icon,\r\n\t\t\t\t\tdraggable: true,\r\n\t\t\t\t\traiseOnDrag: false\r\n\t\t\t\t});\r\n \r\n\t\t\t\tgoogle.maps.event.addListener(vertex, \"dragstart\", vertexDragStart);\r\n\t\t\t\tgoogle.maps.event.addListener(vertex, \"drag\", vertexDrag);\r\n\t\t\t\tgoogle.maps.event.addListener(vertex, \"dragend\", vertexDragEnd);\r\n \r\n\t\t\t\tpoint.marker = vertex;\r\n\t\t\t}\r\n\r\n\t\t\tvertex.setPosition(point);\r\n\r\n\t\t\treturn vertex;\r\n\t\t}\r\n\r\n\t\tfunction PolygonCustomEditWidget(map, polygon, currentPolygonCustomEdit, isMobile) {\r\n\r\n\t\t\tpolygon.setMap(map);\r\n\t\t\t\r\n\t\t\tpolygon.getPath().forEach(function (vertex, index) {\r\n\t\t\t\tvar mIcon = pointIcon;\r\n\t\t\t\tif(isMobile && index === 1) {\r\n\t\t\t\t\tmIcon = handleIconUp;\t\r\n\t\t\t\t}\t\r\n\t\t\t\tcreateMarkerVertex(vertex, mIcon).editIndex = index;\r\n\t\t\t\tcreateGhostMarkerVertex(vertex);\r\n\t\t\t});\r\n \r\n\t\t\tcurrentPolygonCustomEdit = polygon;\r\n\t \r\n\t\t\treturn currentPolygonCustomEdit;\r\n\t\t}\r\n \r\n\t\tPolygonCustomEditWidget.prototype = new google.maps.MVCObject();\r\n\r\n return new PolygonCustomEditWidget(map, polygon, currentPolygonCustomEdit, isMobile);\r\n \r\n };\r\n}","export class IQLFieldGeoLocation {\r\n \r\n IsValid = '';\r\n Poly = '';\r\n Area = 0;\r\n Perimeter = 0;\r\n Latitude = 0;\r\n Longitude = 0;\r\n\r\n constructor(path, area, perimeter, latitude, longitude, IsValid) {\r\n this.Poly = path;\r\n this.Area = area;\r\n this.Perimeter = perimeter;\r\n this.Latitude = latitude;\r\n this.Longitude = longitude;\r\n this.IsValid = IsValid;\r\n this.GeoJSON = undefined;\r\n }\r\n}","\nexport default class TinyQueue {\n constructor(data = [], compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0)) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this._up(this.length++);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n\n if (--this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let bestChild = (pos << 1) + 1; // initially it is the left child\n const right = bestChild + 1;\n\n if (right < this.length && compare(data[right], data[bestChild]) < 0) {\n bestChild = right;\n }\n if (compare(data[bestChild], item) >= 0) break;\n\n data[pos] = data[bestChild];\n pos = bestChild;\n }\n\n data[pos] = item;\n }\n}\n","\nimport Queue from 'tinyqueue';\n\nexport default function polylabel(polygon, precision = 1.0, debug = false) {\n // find the bounding box of the outer ring\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const [x, y] of polygon[0]) {\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n const width = maxX - minX;\n const height = maxY - minY;\n const cellSize = Math.max(precision, Math.min(width, height));\n\n if (cellSize === precision) {\n const result = [minX, minY];\n result.distance = 0;\n return result;\n }\n\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n const cellQueue = new Queue([], (a, b) => b.max - a.max);\n\n // take centroid as the first best guess\n let bestCell = getCentroidCell(polygon);\n\n // second guess: bounding box centroid\n const bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\n let numProbes = 2;\n\n function potentiallyQueue(x, y, h) {\n const cell = new Cell(x, y, h, polygon);\n numProbes++;\n if (cell.max > bestCell.d + precision) cellQueue.push(cell);\n\n // update the best cell if we found a better one\n if (cell.d > bestCell.d) {\n bestCell = cell;\n if (debug) console.log(`found best ${Math.round(1e4 * cell.d) / 1e4} after ${numProbes} probes`);\n }\n }\n\n // cover polygon with initial cells\n let h = cellSize / 2;\n for (let x = minX; x < maxX; x += cellSize) {\n for (let y = minY; y < maxY; y += cellSize) {\n potentiallyQueue(x + h, y + h, h);\n }\n }\n\n while (cellQueue.length) {\n // pick the most promising cell from the queue\n const {max, x, y, h: ch} = cellQueue.pop();\n\n // do not drill down further if there's no chance of a better solution\n if (max - bestCell.d <= precision) break;\n\n // split the cell into four cells\n h = ch / 2;\n potentiallyQueue(x - h, y - h, h);\n potentiallyQueue(x + h, y - h, h);\n potentiallyQueue(x - h, y + h, h);\n potentiallyQueue(x + h, y + h, h);\n }\n\n if (debug) {\n console.log(`num probes: ${numProbes}\\nbest distance: ${bestCell.d}`);\n }\n\n const result = [bestCell.x, bestCell.y];\n result.distance = bestCell.d;\n return result;\n}\n\nfunction Cell(x, y, h, polygon) {\n this.x = x; // cell center x\n this.y = y; // cell center y\n this.h = h; // half the cell size\n this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x, y, polygon) {\n let inside = false;\n let minDistSq = Infinity;\n\n for (const ring of polygon) {\n for (let i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\n const a = ring[i];\n const b = ring[j];\n\n if ((a[1] > y !== b[1] > y) &&\n (x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside;\n\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\n }\n }\n\n return minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(polygon) {\n let area = 0;\n let x = 0;\n let y = 0;\n const points = polygon[0];\n\n for (let i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n const a = points[i];\n const b = points[j];\n const f = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * f;\n y += (a[1] + b[1]) * f;\n area += f * 3;\n }\n const centroid = new Cell(x / area, y / area, 0, polygon);\n if (area === 0 || centroid.d < 0) return new Cell(points[0][0], points[0][1], 0, polygon);\n return centroid;\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px, py, a, b) {\n let x = a[0];\n let y = a[1];\n let dx = b[0] - x;\n let dy = b[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n const t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = b[0];\n y = b[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n\n return dx * dx + dy * dy;\n}\n","'use strict';\n\n/**\n * Based off of [the offical Google document](https://developers.google.com/maps/documentation/utilities/polylinealgorithm)\n *\n * Some parts from [this implementation](http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/PolylineEncoder.js)\n * by [Mark McClure](http://facstaff.unca.edu/mcmcclur/)\n *\n * @module polyline\n */\n\nvar polyline = {};\n\nfunction py2_round(value) {\n // Google's polyline algorithm uses the same rounding strategy as Python 2, which is different from JS for negative values\n return Math.floor(Math.abs(value) + 0.5) * (value >= 0 ? 1 : -1);\n}\n\nfunction encode(current, previous, factor) {\n current = py2_round(current * factor);\n previous = py2_round(previous * factor);\n var coordinate = (current - previous) * 2;\n if (coordinate < 0) {\n coordinate = -coordinate - 1\n }\n var output = '';\n while (coordinate >= 0x20) {\n output += String.fromCharCode((0x20 | (coordinate & 0x1f)) + 63);\n coordinate /= 32;\n }\n output += String.fromCharCode((coordinate | 0) + 63);\n return output;\n}\n\n/**\n * Decodes to a [latitude, longitude] coordinates array.\n *\n * This is adapted from the implementation in Project-OSRM.\n *\n * @param {String} str\n * @param {Number} precision\n * @returns {Array}\n *\n * @see https://github.com/Project-OSRM/osrm-frontend/blob/master/WebContent/routing/OSRM.RoutingGeometry.js\n */\npolyline.decode = function(str, precision) {\n var index = 0,\n lat = 0,\n lng = 0,\n coordinates = [],\n shift = 0,\n result = 0,\n byte = null,\n latitude_change,\n longitude_change,\n factor = Math.pow(10, Number.isInteger(precision) ? precision : 5);\n\n // Coordinates have variable length when encoded, so just keep\n // track of whether we've hit the end of the string. In each\n // loop iteration, a single coordinate is decoded.\n while (index < str.length) {\n\n // Reset shift, result, and byte\n byte = null;\n shift = 1;\n result = 0;\n\n do {\n byte = str.charCodeAt(index++) - 63;\n result += (byte & 0x1f) * shift;\n shift *= 32;\n } while (byte >= 0x20);\n\n latitude_change = (result & 1) ? ((-result - 1) / 2) : (result / 2);\n\n shift = 1;\n result = 0;\n\n do {\n byte = str.charCodeAt(index++) - 63;\n result += (byte & 0x1f) * shift;\n shift *= 32;\n } while (byte >= 0x20);\n\n longitude_change = (result & 1) ? ((-result - 1) / 2) : (result / 2);\n\n lat += latitude_change;\n lng += longitude_change;\n\n coordinates.push([lat / factor, lng / factor]);\n }\n\n return coordinates;\n};\n\n/**\n * Encodes the given [latitude, longitude] coordinates array.\n *\n * @param {Array.<Array.<Number>>} coordinates\n * @param {Number} precision\n * @returns {String}\n */\npolyline.encode = function(coordinates, precision) {\n if (!coordinates.length) { return ''; }\n\n var factor = Math.pow(10, Number.isInteger(precision) ? precision : 5),\n output = encode(coordinates[0][0], 0, factor) + encode(coordinates[0][1], 0, factor);\n\n for (var i = 1; i < coordinates.length; i++) {\n var a = coordinates[i], b = coordinates[i - 1];\n output += encode(a[0], b[0], factor);\n output += encode(a[1], b[1], factor);\n }\n\n return output;\n};\n\nfunction flipped(coords) {\n var flipped = [];\n for (var i = 0; i < coords.length; i++) {\n var coord = coords[i].slice();\n flipped.push([coord[1], coord[0]]);\n }\n return flipped;\n}\n\n/**\n * Encodes a GeoJSON LineString feature/geometry.\n *\n * @param {Object} geojson\n * @param {Number} precision\n * @returns {String}\n */\npolyline.fromGeoJSON = function(geojson, precision) {\n if (geojson && geojson.type === 'Feature') {\n geojson = geojson.geometry;\n }\n if (!geojson || geojson.type !== 'LineString') {\n throw new Error('Input must be a GeoJSON LineString');\n }\n return polyline.encode(flipped(geojson.coordinates), precision);\n};\n\n/**\n * Decodes to a GeoJSON LineString geometry.\n *\n * @param {String} str\n * @param {Number} precision\n * @returns {Object}\n */\npolyline.toGeoJSON = function(str, precision) {\n var coords = polyline.decode(str, precision);\n return {\n type: 'LineString',\n coordinates: flipped(coords)\n };\n};\n\nif (typeof module === 'object' && module.exports) {\n module.exports = polyline;\n}\n","export class IQLCircleFull {\r\n\r\n centerPoint = null;\r\n\t\t\r\n constructor() {\r\n }\r\n\r\n get(lat, lng, r, startH, endH) {\r\n\t\tthis.centerPoint = new google.maps.LatLng(lat, lng);\r\n var PRlat = (r / 6378137) * (180 / Math.PI);\r\n var PRlng = PRlat / Math.cos(lat * ((Math.PI / 180)));\r\n \r\n\t\tvar PGpoints = [];\r\n var PGlat = 0;\r\n var PGlon = 0;\r\n \r\n if (endH - startH < 0) {\r\n endH += 360;\r\n }\r\n\r\n var theta = startH * Math.PI / 180;\r\n var gamma = endH * Math.PI / 180;\r\n\r\n for (var a = 0; theta < gamma; a++) {\r\n theta = (startH + a) * Math.PI / 180;\r\n PGlat = lat + (PRlat * Math.cos(theta));\r\n PGlon = lng + (PRlng * Math.sin(theta));\r\n PGpoints.push(new google.maps.LatLng(PGlat, PGlon));\r\n }\r\n return PGpoints;\r\n\r\n }\r\n\r\n reduce(path, isHole) {\r\n var reducedPath = [];\r\n reducedPath.push(path.getAt(0));\r\n for (var i = 1; i < path.getLength() - 2; i++) {\r\n if (i % 10 == 1) {\r\n reducedPath.push(path.getAt(i));\r\n }\r\n }\r\n reducedPath.push(path.getAt(path.getLength() - 2));\r\n reducedPath.push(path.getAt(path.getLength() - 1));\r\n if (isHole) {\r\n return reducedPath.reverse();\r\n } else {\r\n return reducedPath;\r\n }\r\n }\r\n\r\n edit(map, cf, currentCircleFull, centerPoint, initialRadius, isMobile, controlMarkers) {\r\n var startHeading = 0;\r\n var endHeading = 360;\r\n\r\n\t\tif(isMobile) {\r\n\t\t\tvar svgci = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgci += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgci += '<path fill=\"rgba(255,255,255,1)\" stroke=\"#303030\" stroke-width=\"1\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgci += '</svg>';\r\n\r\n\t\t\tvar sizerIconTop = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconTop'\r\n\t\t\t};\r\n\t\t\tvar sizerIconRight = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconRight'\r\n\t\t\t};\r\n\t\t\tvar sizerIconBottom = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconBottom'\r\n\t\t\t};\r\n\t\t\tvar sizerIconLeft = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconLeft'\r\n\t\t\t};\r\n\t\t\tvar centerIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'centerIcon'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgup = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgup += '<g transform=\"scale(0.4 0.4)\">';\r\n\t\t\tsvgup += '<path style=\"fill:#ffa500;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgup += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</svg>';\r\n\r\n\t\t\tvar handleIconUp = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgup),\r\n\t\t\t\tanchor: new google.maps.Point(30, 60),\r\n\t\t\t\tid: 'handleIconUp'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgdown = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgdown += '<g transform=\"scale(0.4 0.4) rotate(180 26 26)\">';\r\n\t\t\tsvgdown += '<path style=\"fill:#ffa500;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgdown += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</svg>';\r\n\r\n\t\t\tvar handleIconDown = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgdown),\r\n\t\t\t\tanchor: new google.maps.Point(30, 0),\r\n\t\t\t\tid: 'handleIconDown'\r\n\t\t\t};\r\n\t\t\r\n\t\t} else { \r\n\r\n\t\t\tvar sizerIconTop = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconTop'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconRight = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconRight'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconBottom = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconBottom'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconLeft = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconLeft'\r\n\t\t\t};\r\n\r\n\t\t\tvar centerIcon = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'centerIcon'\r\n\t\t\t};\r\n\t\t}\r\n\r\n function DistanceWidget(map, cf) {\r\n\r\n\r\n this.set('map', map);\r\n //this.set('position', cf.getPath().getAt(0));//this is wrong\r\n this.set('position', centerPoint);\r\n var marker = new google.maps.Marker({\r\n icon: centerIcon,//handleIconDown,\r\n draggable: true,\r\n raiseOnDrag: false,\r\n title: 'Move me!',\r\n\t\t\t\tid: 'centerMarker'\r\n });\r\n marker.bindTo('map', this);\r\n marker.bindTo('position', this);\r\n\r\n var radiusWidget = new RadiusWidget();\r\n radiusWidget.bindTo('map', this);\r\n radiusWidget.bindTo('center', this, 'position');\r\n this.bindTo('distance', radiusWidget);\r\n this.bindTo('bounds', radiusWidget);\r\n\t\t\t\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(marker, 'click', function () {\r\n\t\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t\t\t//console.log(marker.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\t//console.log(m.id+' > '+m.getIcon().id);\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(marker.getIcon().id == 'centerIcon') {\r\n\t\t\t\t\t\tmarker.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tmarker.setIcon(centerIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(marker, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(marker.getIcon().id);\r\n\t\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\t//console.log(m.id+' > '+m.getIcon().id);\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmarker.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\t\r\n\t\t\t\tcontrolMarkers.push(marker);\r\n\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t}\r\n\r\n return currentCircleFull;\r\n }\r\n\t\t\r\n DistanceWidget.prototype = new google.maps.MVCObject();\r\n\r\n function RadiusWidget() {\r\n currentCircleFull = new google.maps.Polygon({\r\n id: cf.id,\r\n strokeColor: cf.strokeColor,\r\n strokeOpacity: cf.strokeOpacity,\r\n strokeWeight: cf.strokeWeight,\r\n fillColor: cf.fillColor,\r\n fillOpacity: cf.fillOpacity,\r\n zIndex: cf.zIndex,\r\n isHole: cf.isHole\r\n });\r\n\r\n this.set('distance', initialRadius);//this sets the initial radius\r\n this.bindTo('bounds', currentCircleFull);\r\n cf.setVisible(false);\r\n currentCircleFull.bindTo('map', this);\r\n\r\n var circle = new google.maps.Circle({\r\n strokeColor: '#000000',\r\n strokeOpacity: 0.2,\r\n strokeWeight: 2,\r\n fillColor: '#000000',\r\n fillOpacity: 0.0,\r\n });\r\n this.bindTo('bounds', circle);\r\n circle.bindTo('center', this);\r\n circle.bindTo('map', this);\r\n circle.bindTo('radius', this);\r\n\r\n this.addSizerTop_();\r\n this.addSizerRight_();\r\n this.addSizerBottom_();\r\n this.addSizerLeft_();\r\n\r\n }\r\n RadiusWidget.prototype = new google.maps.MVCObject();\r\n\r\n RadiusWidget.prototype.distance_changed = function () {\r\n this.set('radius', this.get('distance'));\r\n };\r\n\r\n RadiusWidget.prototype.addSizerTop_ = function () {\r\n var sizerTop = new google.maps.Marker({\r\n icon: sizerIconTop,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the top radius sizer, drag me!',\r\n cursor: 'row-resize',\r\n\t\t\t\tid: 'sizerTop'\r\n });\r\n sizerTop.bindTo('map', this);\r\n sizerTop.bindTo('position', this, 'sizerTop_position');\r\n\r\n var me = this;\r\n\t\t\t\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerTop, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerTop.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerTop.getIcon().id == 'sizerIconTop') {\r\n\t\t\t\t\t\tsizerTop.setIcon(handleIconUp);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerTop.setIcon(sizerIconTop);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerTop, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerTop.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerTop.setIcon(handleIconUp);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerTop);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerTop, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerTop_position', new google.maps.LatLng(me.get('sizerTop_position').lat(), me.get('center').lng())); //this restricts sizerTop to vertical movement\r\n var pos = me.get('sizerTop_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, min, 0));\r\n } else if (distance > max) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, max, 0));\r\n }\r\n me.setDistanceTop();\r\n });\r\n\r\n google.maps.event.addListener(sizerTop, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerTop_position', new google.maps.LatLng(me.get('sizerTop_position').lat(), me.get('center').lng())); //this restricts sizerTop to vertical movement\r\n var pos = me.get('sizerTop_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, min, 0));\r\n } else if (distance > max) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, max, 0));\r\n }\r\n me.setDistanceTop();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerRight_ = function () {\r\n var sizerRight = new google.maps.Marker({\r\n icon: sizerIconRight,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the right radius sizer, drag me!',\r\n cursor: 'col-resize',\r\n\t\t\t\tid: 'sizerRight'\r\n });\r\n sizerRight.bindTo('map', this);\r\n sizerRight.bindTo('position', this, 'sizerRight_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerRight, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerRight.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerRight.getIcon().id == 'sizerIconRight') {\r\n\t\t\t\t\t\tsizerRight.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerRight.setIcon(sizerIconRight);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerRight, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerRight.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerRight.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerRight);\r\n\t\t\t}\t\r\n\t\t\t\t\r\n\t\t\tgoogle.maps.event.addListener(sizerRight, 'drag', function () {\r\n\t\t\t\tvar min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerRight_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerRight_position').lng())); //this restricts sizerRight to horizontal movement\r\n var pos = me.get('sizerRight_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, min, 90));\r\n } else if (distance > max) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, max, 90));\r\n }\r\n me.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(sizerRight, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerRight_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerRight_position').lng())); //this restricts sizerRight to horizontal movement\r\n var pos = me.get('sizerRight_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, min, 90));\r\n } else if (distance > max) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, max, 90));\r\n }\r\n me.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerBottom_ = function () {\r\n var sizerBottom = new google.maps.Marker({\r\n icon: sizerIconBottom,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the bottom radius sizer, drag me!',\r\n cursor: 'row-resize',\r\n\t\t\t\tid: 'sizerBottom'\r\n });\r\n sizerBottom.bindTo('map', this);\r\n sizerBottom.bindTo('position', this, 'sizerBottom_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerBottom, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerBottom.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerBottom.getIcon().id == 'sizerIconBottom') {\r\n\t\t\t\t\t\tsizerBottom.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerBottom.setIcon(sizerIconBottom);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerBottom, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerBottom.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerBottom.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerBottom);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerBottom, 'drag', function () {\r\n var min = 5;\r\n var max = 2000;\r\n\r\n me.set('sizerBottom_position', new google.maps.LatLng(me.get('sizerBottom_position').lat(), me.get('center').lng())); //this restricts sizerBottom to vertical movement\r\n var pos = me.get('sizerBottom_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, min, 180));\r\n } else if (distance > max) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, max, 180));\r\n }\r\n me.setDistanceBottom();\r\n });\r\n\r\n google.maps.event.addListener(sizerBottom, 'dragend', function () {\r\n var min = 5;\r\n var max = 2000;\r\n\r\n me.set('sizerBottom_position', new google.maps.LatLng(me.get('sizerBottom_position').lat(), me.get('center').lng())); //this restricts sizerBottom to vertical movement\r\n var pos = me.get('sizerBottom_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, min, 180));\r\n } else if (distance > max) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, max, 180));\r\n }\r\n me.setDistanceBottom();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerLeft_ = function () {\r\n var sizerLeft = new google.maps.Marker({\r\n icon: sizerIconLeft,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the left radius sizer, drag me!',\r\n cursor: 'col-resize',\r\n\t\t\t\tid: 'sizerLeft'\r\n });\r\n sizerLeft.bindTo('map', this);\r\n sizerLeft.bindTo('position', this, 'sizerLeft_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerLeft, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerLeft.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerLeft.getIcon().id == 'sizerIconLeft') {\r\n\t\t\t\t\t\tsizerLeft.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerLeft.setIcon(sizerIconLeft);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerLeft, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerLeft.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerLeft.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerLeft);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerLeft, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerLeft_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerLeft_position').lng())); //this restricts sizerLeft to horizontal movement\r\n var pos = me.get('sizerLeft_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, min, 270));\r\n } else if (distance > max) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, max, 270));\r\n }\r\n me.setDistanceLeft();\r\n });\r\n\r\n google.maps.event.addListener(sizerLeft, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerLeft_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerLeft_position').lng())); //this restricts sizerLeft to horizontal movement\r\n var pos = me.get('sizerLeft_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, min, 270));\r\n } else if (distance > max) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, max, 270));\r\n }\r\n me.setDistanceLeft();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.center_changed = function () {\r\n var rbounds = this.get('bounds');\r\n var center = this.get('center');\r\n var distance = this.get('distance');\r\n\r\n if (rbounds) {\r\n //var sectorPath = new IQLCircleSector().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n //currentCircleSector.setPath(sectorPath);\r\n var circlePath = new IQLCircleFull().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleFull.setPath(circlePath);\r\n\r\n var latNE = rbounds.getNorthEast().lat();\r\n var lngNE = rbounds.getNorthEast().lng();\r\n var latSW = rbounds.getSouthWest().lat();\r\n var lngSW = rbounds.getSouthWest().lng();\r\n\r\n var positionTop = new google.maps.LatLng(latNE, this.get('center').lng());\r\n var positionRight = new google.maps.LatLng(this.get('center').lat(), lngNE);\r\n var positionBottom = new google.maps.LatLng(latSW, this.get('center').lng());\r\n var positionLeft = new google.maps.LatLng(this.get('center').lat(), lngSW);\r\n\r\n this.set('sizerTop_position', positionTop);\r\n this.set('sizerRight_position', positionRight);\r\n this.set('sizerBottom_position', positionBottom);\r\n this.set('sizerLeft_position', positionLeft);\r\n\r\n //this.set('startPin_position', sectorPath[1]);\r\n //this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n }\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceTop = function () {\r\n var pos = this.get('sizerTop_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n //var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n //currentCircleSector.setPath(sectorPath);\r\n var circlePath = new IQLCircleFull().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleFull.setPath(circlePath);\r\n //this.set('startPin_position', sectorPath[1]);\r\n //this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceRight = function () {\r\n var pos = this.get('sizerRight_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n //var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n //currentCircleSector.setPath(sectorPath);\r\n var circlePath = new IQLCircleFull().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleFull.setPath(circlePath);\r\n //this.set('startPin_position', sectorPath[1]);\r\n //this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceBottom = function () {\r\n var pos = this.get('sizerBottom_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n //var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n //currentCircleSector.setPath(sectorPath);\r\n var circlePath = new IQLCircleFull().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleFull.setPath(circlePath);\r\n //this.set('startPin_position', sectorPath[1]);\r\n //this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceLeft = function () {\r\n var pos = this.get('sizerLeft_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n //var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n //currentCircleSector.setPath(sectorPath);\r\n var circlePath = new IQLCircleFull().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleFull.setPath(circlePath);\r\n //this.set('startPin_position', sectorPath[1]);\r\n //this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n\r\n };\r\n\r\n return new DistanceWidget(map, cf);\r\n\r\n }\r\n\r\n}","export class IQLCircleSector {\r\n\r\n centerPoint = null;\r\n constructor() {\r\n }\r\n\r\n get(lat, lng, r, startH, endH) {\r\n this.centerPoint = new google.maps.LatLng(lat, lng);\r\n var PRlat = (r / 6378137) * (180 / Math.PI);\r\n var PRlng = PRlat / Math.cos(lat * ((Math.PI / 180)));\r\n var PGpoints = [];\r\n var PGlat = 0;\r\n var PGlon = 0;\r\n PGpoints.push(this.centerPoint);\r\n\r\n if (endH - startH < 0) {\r\n endH += 360;\r\n }\r\n\r\n var theta = startH * Math.PI / 180;\r\n var gamma = endH * Math.PI / 180;\r\n\r\n for (var a = 0; theta < gamma; a++) {\r\n theta = (startH + a) * Math.PI / 180;\r\n PGlat = lat + (PRlat * Math.cos(theta));\r\n PGlon = lng + (PRlng * Math.sin(theta));\r\n PGpoints.push(new google.maps.LatLng(PGlat, PGlon));\r\n }\r\n PGpoints.push(this.centerPoint);\r\n return PGpoints;\r\n }\r\n\r\n reduce(path, isHole) {\r\n var reducedPath = [];\r\n //reducedPath.push(path.getAt(0));\r\n for (var i = 1; i < path.getLength() - 2; i++) {\r\n if (i % 5 == 1) {\r\n reducedPath.push(path.getAt(i));\r\n }\r\n }\r\n reducedPath.push(path.getAt(path.getLength() - 2));\r\n reducedPath.push(path.getAt(path.getLength() - 1));\r\n if (isHole) {\r\n return reducedPath.reverse();\r\n } else {\r\n return reducedPath;\r\n }\r\n }\r\n\r\n edit(map, cs, currentCircleSector, centerPoint, initialRadius, isMobile, controlMarkers) {\r\n var startHeading = 60;\r\n var endHeading = 120;\r\n\r\n\t\tif(isMobile) {\r\n\t\t\tvar svgci = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgci += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgci += '<path fill=\"rgba(255,255,255,1)\" stroke=\"#303030\" stroke-width=\"1\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgci += '</svg>';\r\n\r\n\t\t\tvar sizerIconTop = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconTop'\r\n\t\t\t};\r\n\t\t\tvar sizerIconRight = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconRight'\r\n\t\t\t};\r\n\t\t\tvar sizerIconBottom = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconBottom'\r\n\t\t\t};\r\n\t\t\tvar sizerIconLeft = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconLeft'\r\n\t\t\t};\r\n\t\t\tvar centerIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'centerIcon'\r\n\t\t\t};\r\n\t\t\r\n\t\t\tvar svgup = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgup += '<g transform=\"scale(0.4 0.4)\">';\r\n\t\t\tsvgup += '<path style=\"fill:#ffa500;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgup += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</svg>';\r\n\r\n\t\t\tvar handleIconUp = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgup),\r\n\t\t\t\tanchor: new google.maps.Point(30, 60),\r\n\t\t\t\tid: 'handleIconUp'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgdown = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgdown += '<g transform=\"scale(0.4 0.4) rotate(180 26 26)\">';\r\n\t\t\tsvgdown += '<path style=\"fill:#ffa500;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgdown += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</svg>';\r\n\r\n\t\t\tvar handleIconDown = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgdown),\r\n\t\t\t\tanchor: new google.maps.Point(30, 0),\r\n\t\t\t\tid: 'handleIconDown'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgpi = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgpi += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgpi += '<path fill=\"rgba(255,255,255,1)\" stroke=\"'+cs.strokeColor+'\" stroke-width=\"1\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgpi += '</svg>';\r\n\r\n\t\t\tvar startPinIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgpi),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'startPinIcon'\r\n\t\t\t};\r\n\t\t\tvar endPinIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgpi),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'endPinIcon'\r\n\t\t\t};\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar sizerIconTop = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconTop'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconRight = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconRight'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconBottom = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconBottom'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconLeft = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconLeft'\r\n\t\t\t};\r\n\r\n\t\t\tvar centerIcon = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'centerIcon'\r\n\t\t\t};\r\n\t\t}\r\n\r\n/*\r\n\t\tvar handleIconUp = {\r\n\t\t\tpath: 'M0,0 32,0 16,27.7z',\r\n\t\t\tfillColor: '#ffffff',\r\n\t\t\tfillOpacity: 1,\r\n\t\t\tanchor: new google.maps.Point(16, 28),\r\n\t\t\tstrokeWeight: 1,\r\n\t\t\tstrokeOpacity: 1,\r\n\t\t\tstrokeColor: '#303030',\r\n\t\t\tscale: 1,\r\n\t\t\tid: 'handleIcon'\r\n\t\t};\r\n\t\tvar handleIconDown = {\r\n\t\t\tpath: 'M16,0 32,27.7 0,27.7z',\r\n\t\t\tfillColor: '#ffffff',\r\n\t\t\tfillOpacity: 1,\r\n\t\t\tanchor: new google.maps.Point(16, 0),\r\n\t\t\tstrokeWeight: 1,\r\n\t\t\tstrokeOpacity: 1,\r\n\t\t\tstrokeColor: '#303030',\r\n\t\t\tscale: 1,\r\n\t\t\tid: 'handleIcon'\r\n\t\t};\r\n*/\r\n/*\r\n var startPinIcon = {\r\n path: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n fillColor: '#ffffff',\r\n fillOpacity: 1,\r\n anchor: new google.maps.Point(4, 4),\r\n strokeWeight: 1,\r\n strokeOpacity: 1,\r\n strokeColor: cs.strokeColor,\r\n scale: 1,\r\n\t\t\tid: 'startPinIcon'\r\n };\r\n*/\r\n/*\r\n var endPinIcon = {\r\n path: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n fillColor: '#ffffff',\r\n fillOpacity: 1,\r\n anchor: new google.maps.Point(4, 4),\r\n strokeWeight: 1,\r\n strokeOpacity: 1,\r\n strokeColor: cs.strokeColor,\r\n scale: 1,\r\n\t\t\tid: 'endPinIcon'\r\n };\r\n*/\r\n\r\n function DistanceWidget(map, cs) {\r\n\r\n this.set('map', map);\r\n this.set('position', centerPoint); \r\n var marker = new google.maps.Marker({\r\n icon: centerIcon,//handleIconDown,\r\n draggable: true,\r\n raiseOnDrag: false,\r\n title: 'Move me!',\r\n\t\t\t\tid: 'centerMarker'\r\n });\r\n marker.bindTo('map', this);\r\n marker.bindTo('position', this);\r\n\r\n var radiusWidget = new RadiusWidget();\r\n radiusWidget.bindTo('map', this);\r\n radiusWidget.bindTo('center', this, 'position');\r\n this.bindTo('distance', radiusWidget);\r\n this.bindTo('bounds', radiusWidget);\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(marker, 'click', function () {\r\n\t\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t\t\t//console.log(marker.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\t//console.log(m.id+' > '+m.getIcon().id);\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(marker.getIcon().id == 'centerIcon') {\r\n\t\t\t\t\t\tmarker.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tmarker.setIcon(centerIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(marker, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(marker.getIcon().id);\r\n\t\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\t//console.log(m.id+' > '+m.getIcon().id);\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmarker.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(marker);\r\n\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t}\r\n\r\n return currentCircleSector;\r\n }\r\n DistanceWidget.prototype = new google.maps.MVCObject();\r\n\r\n function RadiusWidget() {\r\n currentCircleSector = new google.maps.Polygon({\r\n id: cs.id,\r\n strokeColor: cs.strokeColor,\r\n strokeOpacity: cs.strokeOpacity,\r\n strokeWeight: cs.strokeWeight,\r\n fillColor: cs.fillColor,\r\n fillOpacity: cs.fillOpacity,\r\n zIndex: cs.zIndex,\r\n isHole: cs.isHole\r\n });\r\n\r\n this.set('distance', initialRadius); //this sets the initial radius\r\n this.bindTo('bounds', currentCircleSector);\r\n cs.setVisible(false);\r\n currentCircleSector.bindTo('map', this);\r\n\r\n var circle = new google.maps.Circle({\r\n strokeColor: '#000000',\r\n strokeOpacity: 0.2,\r\n strokeWeight: 2,\r\n fillColor: '#000000',\r\n fillOpacity: 0.0,\r\n });\r\n this.bindTo('bounds', circle);\r\n circle.bindTo('center', this);\r\n circle.bindTo('map', this);\r\n circle.bindTo('radius', this);\r\n\r\n this.addSizerTop_();\r\n this.addSizerRight_();\r\n this.addSizerBottom_();\r\n this.addSizerLeft_();\r\n\r\n this.addStartPin_();\r\n this.addEndPin_();\r\n }\r\n RadiusWidget.prototype = new google.maps.MVCObject();\r\n\r\n RadiusWidget.prototype.distance_changed = function () {\r\n this.set('radius', this.get('distance'));\r\n };\r\n\r\n RadiusWidget.prototype.addStartPin_ = function () {\r\n var startPin = new google.maps.Marker({\r\n icon: startPinIcon,\r\n draggable: true,\r\n raiseOnDrag: false,\r\n title: 'Drag me!',\r\n\t\t\t\tid: 'startPin'\r\n });\r\n startPin.bindTo('map', this);\r\n startPin.bindTo('position', this, 'startPin_position');\r\n\r\n var sp = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(startPin, 'click', function () {\r\n\t\t\t\t\t//console.log(startPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(startPin.getIcon().id == 'startPinIcon') {\r\n\t\t\t\t\t\tif(startHeading > 90 && startHeading < 270) {\r\n\t\t\t\t\t\t\tstartPin.setIcon(handleIconDown);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstartPin.setIcon(handleIconUp);\r\n\t\t\t\t\t\t}\t\t\t\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstartPin.setIcon(startPinIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(startPin, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(startPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(startHeading > 90 && startHeading < 270) {\r\n\t\t\t\t\t\tstartPin.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstartPin.setIcon(handleIconUp);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(startPin);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(startPin, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = sp.get('startPin_position');\r\n var center = sp.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n startHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, min, startHeading));\r\n } else if (distance > max) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, max, startHeading));\r\n }\r\n sp.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(startPin, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = sp.get('startPin_position');\r\n var center = sp.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n startHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, min, startHeading));\r\n } else if (distance > max) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, max, startHeading));\r\n }\r\n sp.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addEndPin_ = function () {\r\n var endPin = new google.maps.Marker({\r\n icon: endPinIcon,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'Drag me!',\r\n\t\t\t\tid: 'endPin'\r\n });\r\n endPin.bindTo('map', this);\r\n endPin.bindTo('position', this, 'endPin_position');\r\n\r\n var ep = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(endPin, 'click', function () {\r\n\t\t\t\t\t//console.log(endPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(endPin.getIcon().id == 'endPinIcon') {\r\n\t\t\t\t\t\tif(endHeading > 90 && endHeading < 270) {\r\n\t\t\t\t\t\t\tendPin.setIcon(handleIconDown);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tendPin.setIcon(handleIconUp);\r\n\t\t\t\t\t\t}\t\t\t\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tendPin.setIcon(endPinIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(endPin, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(endPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(endHeading > 90 && endHeading < 270) {\r\n\t\t\t\t\t\tendPin.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tendPin.setIcon(handleIconUp);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(endPin);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(endPin, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = ep.get('endPin_position');\r\n var center = ep.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n endHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, min, endHeading));\r\n } else if (distance > max) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, max, endHeading));\r\n }\r\n ep.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(endPin, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = ep.get('endPin_position');\r\n var center = ep.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n endHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, min, endHeading));\r\n } else if (distance > max) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, max, endHeading));\r\n }\r\n ep.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerTop_ = function () {\r\n var sizerTop = new google.maps.Marker({\r\n icon: sizerIconTop,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the top radius sizer, drag me!',\r\n cursor: 'row-resize',\r\n\t\t\t\tid: 'sizerTop'\r\n });\r\n sizerTop.bindTo('map', this);\r\n sizerTop.bindTo('position', this, 'sizerTop_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerTop, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerTop.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerTop.getIcon().id == 'sizerIconTop') {\r\n\t\t\t\t\t\tsizerTop.setIcon(handleIconUp);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerTop.setIcon(sizerIconTop);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerTop, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerTop.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerTop.setIcon(handleIconUp);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerTop);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerTop, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerTop_position', new google.maps.LatLng(me.get('sizerTop_position').lat(), me.get('center').lng())); //this restricts sizerTop to vertical movement\r\n var pos = me.get('sizerTop_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, min, 0));\r\n } else if (distance > max) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, max, 0));\r\n }\r\n me.setDistanceTop();\r\n });\r\n\r\n google.maps.event.addListener(sizerTop, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerTop_position', new google.maps.LatLng(me.get('sizerTop_position').lat(), me.get('center').lng())); //this restricts sizerTop to vertical movement\r\n var pos = me.get('sizerTop_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, min, 0));\r\n } else if (distance > max) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, max, 0));\r\n }\r\n me.setDistanceTop();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerRight_ = function () {\r\n var sizerRight = new google.maps.Marker({\r\n icon: sizerIconRight,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the right radius sizer, drag me!',\r\n cursor: 'col-resize',\r\n\t\t\t\tid: 'sizerRight'\r\n });\r\n sizerRight.bindTo('map', this);\r\n sizerRight.bindTo('position', this, 'sizerRight_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerRight, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerRight.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerRight.getIcon().id == 'sizerIconRight') {\r\n\t\t\t\t\t\tsizerRight.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerRight.setIcon(sizerIconRight);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerRight, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerRight.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerRight.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerRight);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerRight, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerRight_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerRight_position').lng())); //this restricts sizerRight to horizontal movement\r\n var pos = me.get('sizerRight_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, min, 90));\r\n } else if (distance > max) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, max, 90));\r\n }\r\n me.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(sizerRight, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerRight_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerRight_position').lng())); //this restricts sizerRight to horizontal movement\r\n var pos = me.get('sizerRight_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, min, 90));\r\n } else if (distance > max) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, max, 90));\r\n }\r\n me.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerBottom_ = function () {\r\n var sizerBottom = new google.maps.Marker({\r\n icon: sizerIconBottom,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the bottom radius sizer, drag me!',\r\n cursor: 'row-resize',\r\n\t\t\t\tid: 'sizerBottom'\r\n });\r\n sizerBottom.bindTo('map', this);\r\n sizerBottom.bindTo('position', this, 'sizerBottom_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerBottom, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerBottom.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerBottom.getIcon().id == 'sizerIconBottom') {\r\n\t\t\t\t\t\tsizerBottom.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerBottom.setIcon(sizerIconBottom);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerBottom, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerBottom.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerBottom.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerBottom);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerBottom, 'drag', function () {\r\n var min = 5;\r\n var max = 2000;\r\n\r\n me.set('sizerBottom_position', new google.maps.LatLng(me.get('sizerBottom_position').lat(), me.get('center').lng())); //this restricts sizerBottom to vertical movement\r\n var pos = me.get('sizerBottom_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, min, 180));\r\n } else if (distance > max) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, max, 180));\r\n }\r\n me.setDistanceBottom();\r\n });\r\n\r\n google.maps.event.addListener(sizerBottom, 'dragend', function () {\r\n var min = 5;\r\n var max = 2000;\r\n\r\n me.set('sizerBottom_position', new google.maps.LatLng(me.get('sizerBottom_position').lat(), me.get('center').lng())); //this restricts sizerBottom to vertical movement\r\n var pos = me.get('sizerBottom_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, min, 180));\r\n } else if (distance > max) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, max, 180));\r\n }\r\n me.setDistanceBottom();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerLeft_ = function () {\r\n var sizerLeft = new google.maps.Marker({\r\n icon: sizerIconLeft,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the left radius sizer, drag me!',\r\n cursor: 'col-resize',\r\n\t\t\t\tid: 'sizerLeft'\r\n });\r\n sizerLeft.bindTo('map', this);\r\n sizerLeft.bindTo('position', this, 'sizerLeft_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerLeft, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerLeft.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerLeft.getIcon().id == 'sizerIconLeft') {\r\n\t\t\t\t\t\tsizerLeft.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerLeft.setIcon(sizerIconLeft);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerLeft, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerLeft.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerLeft.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerLeft);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerLeft, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerLeft_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerLeft_position').lng())); //this restricts sizerLeft to horizontal movement\r\n var pos = me.get('sizerLeft_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, min, 270));\r\n } else if (distance > max) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, max, 270));\r\n }\r\n me.setDistanceLeft();\r\n });\r\n\r\n google.maps.event.addListener(sizerLeft, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerLeft_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerLeft_position').lng())); //this restricts sizerLeft to horizontal movement\r\n var pos = me.get('sizerLeft_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, min, 270));\r\n } else if (distance > max) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, max, 270));\r\n }\r\n me.setDistanceLeft();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.center_changed = function () {\r\n var rbounds = this.get('bounds');\r\n var center = this.get('center');\r\n var distance = this.get('distance');\r\n\r\n if (rbounds) {\r\n var sectorPath = new IQLCircleSector().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleSector.setPath(sectorPath);\r\n\r\n var latNE = rbounds.getNorthEast().lat();\r\n var lngNE = rbounds.getNorthEast().lng();\r\n var latSW = rbounds.getSouthWest().lat();\r\n var lngSW = rbounds.getSouthWest().lng();\r\n\r\n var positionTop = new google.maps.LatLng(latNE, this.get('center').lng());\r\n var positionRight = new google.maps.LatLng(this.get('center').lat(), lngNE);\r\n var positionBottom = new google.maps.LatLng(latSW, this.get('center').lng());\r\n var positionLeft = new google.maps.LatLng(this.get('center').lat(), lngSW);\r\n\r\n this.set('sizerTop_position', positionTop);\r\n this.set('sizerRight_position', positionRight);\r\n this.set('sizerBottom_position', positionBottom);\r\n this.set('sizerLeft_position', positionLeft);\r\n\r\n this.set('startPin_position', sectorPath[1]);\r\n this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n }\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceTop = function () {\r\n var pos = this.get('sizerTop_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSector.setPath(sectorPath);\r\n this.set('startPin_position', sectorPath[1]);\r\n this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceRight = function () {\r\n var pos = this.get('sizerRight_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSector.setPath(sectorPath);\r\n this.set('startPin_position', sectorPath[1]);\r\n this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceBottom = function () {\r\n var pos = this.get('sizerBottom_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSector.setPath(sectorPath);\r\n this.set('startPin_position', sectorPath[1]);\r\n this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceLeft = function () {\r\n var pos = this.get('sizerLeft_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var sectorPath = new IQLCircleSector().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSector.setPath(sectorPath);\r\n this.set('startPin_position', sectorPath[1]);\r\n this.set('endPin_position', sectorPath[sectorPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n\r\n };\r\n\r\n return new DistanceWidget(map, cs);\r\n\r\n }\r\n\r\n}","export class IQLCircleSegment {\r\n\r\n centerPoint = null;\r\n startHeading = 0;\r\n endHeading = 160;\r\n\r\n constructor() {\r\n }\r\n\r\n get(lat, lng, r, startH, endH) {\r\n this.centerPoint = new google.maps.LatLng(lat, lng);\r\n var PRlat = (r / 6378137) * (180 / Math.PI);\r\n var PRlng = PRlat / Math.cos(lat * ((Math.PI / 180)));\r\n var PGpoints = [];\r\n var PGlat = 0;\r\n var PGlon = 0;\r\n\r\n if (endH - startH < 0) {\r\n endH += 360;\r\n }\r\n\r\n var theta = startH * Math.PI / 180;\r\n var gamma = endH * Math.PI / 180;\r\n\r\n for (var a = 0; theta < gamma; a++) {\r\n theta = (startH + a) * Math.PI / 180;\r\n PGlat = lat + (PRlat * Math.cos(theta));\r\n PGlon = lng + (PRlng * Math.sin(theta));\r\n PGpoints.push(new google.maps.LatLng(PGlat, PGlon));\r\n }\r\n PGpoints.push(PGpoints[0]);\r\n\r\n return PGpoints;\r\n }\r\n\r\n reduce(path, isHole) {\r\n var reducedPath = [];\r\n for (var i = 0; i < path.getLength() - 2; i++) {\r\n if (i % 5 == 0) {\r\n reducedPath.push(path.getAt(i));\r\n }\r\n }\r\n reducedPath.push(path.getAt(path.getLength() - 2));\r\n reducedPath.push(path.getAt(path.getLength() - 1));\r\n if (isHole) {\r\n return reducedPath.reverse();\r\n } else {\r\n return reducedPath;\r\n }\r\n }\r\n\r\n edit(map, cs, currentCircleSegment, centerPoint, initialRadius, isMobile, controlMarkers) {\r\n\r\n var startHeading = 0;\r\n var endHeading = 160;\r\n\r\n var marker = null;\r\n var sizerTop = null;\r\n var sizerLeft = null;\r\n var sizerRight = null;\r\n var sizerBottom = null;\r\n\r\n\t\tif(isMobile) {\r\n\t\t\r\n\t\t\tvar svgci = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgci += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgci += '<path fill=\"rgba(255,255,255,1)\" stroke=\"#303030\" stroke-width=\"1\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgci += '</svg>';\r\n\r\n\t\t\tvar sizerIconTop = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconTop'\r\n\t\t\t};\r\n\t\t\tvar sizerIconRight = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconRight'\r\n\t\t\t};\r\n\t\t\tvar sizerIconBottom = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconBottom'\r\n\t\t\t};\r\n\t\t\tvar sizerIconLeft = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'sizerIconLeft'\r\n\t\t\t};\r\n\t\t\tvar centerIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgci),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'centerIcon'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgup = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgup += '<g transform=\"scale(0.4 0.4)\">';\r\n\t\t\tsvgup += '<path style=\"fill:#ffa500;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgup += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgup += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</g>';\t\r\n\t\t\tsvgup += '</svg>';\r\n\r\n\t\t\tvar handleIconUp = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgup),\r\n\t\t\t\tanchor: new google.maps.Point(30, 60),\r\n\t\t\t\tid: 'handleIconUp'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgdown = '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 52 52\" style=\"enable-background:new 0 0 52 52;\" xml:space=\"preserve\">';\r\n\t\t\tsvgdown += '<g transform=\"scale(0.4 0.4) rotate(180 26 26)\">';\r\n\t\t\tsvgdown += '<path style=\"fill:#ffa500;\" d=\"M38.853,5.324L38.853,5.324c-7.098-7.098-18.607-7.098-25.706,0h0 C6.751,11.72,6.031,23.763,11.459,31L26,52l14.541-21C45.969,23.763,45.249,11.72,38.853,5.324z\"/>';\r\n\t\t\tsvgdown += '<g transform=\"translate(13.2 5.9) scale(0.8 0.8)\">';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 15.78125 0.0546875 C 15.710938 0.0859375 14.742188 1.03125 13.625 2.148438 C 11.136719 4.644531 11.257812 4.351562 12.300781 5.386719 C 12.957031 6.050781 13.011719 6.09375 13.25 6.09375 C 13.480469 6.09375 13.542969 6.050781 14.0625 5.53125 L 14.625 4.96875 L 14.625 8.019531 C 14.625 11.261719 14.636719 11.398438 14.925781 11.554688 C 15.09375 11.648438 16.90625 11.648438 17.074219 11.554688 C 17.363281 11.398438 17.375 11.261719 17.375 8.019531 L 17.375 4.96875 L 17.9375 5.53125 C 18.457031 6.050781 18.519531 6.09375 18.75 6.09375 C 18.988281 6.09375 19.042969 6.050781 19.699219 5.386719 C 20.742188 4.351562 20.867188 4.648438 18.34375 2.125 C 16.210938 -0.0078125 16.105469 -0.0859375 15.78125 0.0546875 Z M 15.78125 0.0546875 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 4.21875 11.617188 C 4.148438 11.648438 3.179688 12.59375 2.0625 13.710938 C 0.0703125 15.710938 0.03125 15.75 0.03125 16 C 0.03125 16.25 0.0703125 16.289062 2.113281 18.324219 C 4.648438 20.867188 4.351562 20.742188 5.386719 19.699219 C 6.050781 19.042969 6.09375 18.988281 6.09375 18.75 C 6.09375 18.519531 6.050781 18.457031 5.53125 17.9375 L 4.96875 17.375 L 8.019531 17.375 C 11.261719 17.375 11.398438 17.363281 11.554688 17.074219 C 11.648438 16.90625 11.648438 15.09375 11.554688 14.925781 C 11.398438 14.636719 11.261719 14.625 8.019531 14.625 L 4.96875 14.625 L 5.53125 14.0625 C 6.050781 13.542969 6.09375 13.480469 6.09375 13.25 C 6.09375 13.011719 6.050781 12.957031 5.40625 12.3125 C 4.699219 11.613281 4.5 11.492188 4.21875 11.617188 Z M 4.21875 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 27.34375 11.617188 C 27.273438 11.648438 26.925781 11.976562 26.5625 12.335938 C 25.949219 12.957031 25.90625 13.011719 25.90625 13.25 C 25.90625 13.480469 25.949219 13.542969 26.46875 14.0625 L 27.03125 14.625 L 23.980469 14.625 C 20.738281 14.625 20.601562 14.636719 20.445312 14.925781 C 20.351562 15.09375 20.351562 16.90625 20.445312 17.074219 C 20.601562 17.363281 20.738281 17.375 23.980469 17.375 L 27.03125 17.375 L 26.46875 17.9375 C 25.949219 18.457031 25.90625 18.519531 25.90625 18.75 C 25.90625 18.988281 25.949219 19.042969 26.613281 19.699219 C 27.648438 20.742188 27.351562 20.867188 29.886719 18.324219 C 31.929688 16.289062 31.96875 16.25 31.96875 16 C 31.96875 15.75 31.929688 15.710938 29.90625 13.6875 C 27.773438 11.554688 27.675781 11.476562 27.34375 11.617188 Z M 27.34375 11.617188 \"/>';\r\n\t\t\tsvgdown += '<path style=\" stroke:none;fill-rule:nonzero;fill:rgb(255,255,255);fill-opacity:1;\" d=\"M 14.917969 20.445312 C 14.636719 20.605469 14.625 20.757812 14.625 23.980469 L 14.625 27.03125 L 14.0625 26.46875 C 13.542969 25.949219 13.480469 25.90625 13.25 25.90625 C 13.011719 25.90625 12.957031 25.949219 12.300781 26.613281 C 11.257812 27.648438 11.132812 27.351562 13.675781 29.886719 C 15.710938 31.929688 15.75 31.96875 16 31.96875 C 16.25 31.96875 16.289062 31.929688 18.324219 29.886719 C 20.867188 27.351562 20.742188 27.648438 19.699219 26.613281 C 19.042969 25.949219 18.988281 25.90625 18.75 25.90625 C 18.519531 25.90625 18.457031 25.949219 17.9375 26.46875 L 17.375 27.03125 L 17.375 23.980469 C 17.375 20.738281 17.363281 20.601562 17.074219 20.445312 C 16.90625 20.355469 15.070312 20.355469 14.917969 20.445312 Z M 14.917969 20.445312 \"/>';\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</g>';\t\r\n\t\t\tsvgdown += '</svg>';\r\n\r\n\t\t\tvar handleIconDown = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgdown),\r\n\t\t\t\tanchor: new google.maps.Point(30, 0),\r\n\t\t\t\tid: 'handleIconDown'\r\n\t\t\t};\r\n\r\n\t\t\tvar svgpi = '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\">'\r\n\t\t\tsvgpi += '<path fill=\"rgba(255,255,255,0.01)\" d=\"M 0, 24 a 24,24 0 1,0 48,0 a 24,24 0 1,0 -48,0\" />';\r\n\t\t\tsvgpi += '<path fill=\"rgba(255,255,255,1)\" stroke=\"'+cs.strokeColor+'\" stroke-width=\"1\" d=\"M24 24 m-4,0 a 4,4,0 0,1 8,0 a 4,4 0 0,1 -8,0z\" />';\r\n\t\t\tsvgpi += '</svg>';\r\n\r\n\t\t\tvar startPinIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgpi),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'startPinIcon'\r\n\t\t\t};\r\n\t\t\tvar endPinIcon = {\r\n\t\t\t\turl: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svgpi),\r\n\t\t\t\tanchor: new google.maps.Point(24, 24),\r\n\t\t\t\tid: 'endPinIcon'\r\n\t\t\t};\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar sizerIconTop = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconTop'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconRight = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconRight'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconBottom = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconBottom'\r\n\t\t\t};\r\n\r\n\t\t\tvar sizerIconLeft = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'sizerIconLeft'\r\n\t\t\t};\r\n\r\n\t\t\tvar centerIcon = {\r\n\t\t\t\tpath: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n\t\t\t\tfillColor: '#ffffff',\r\n\t\t\t\tfillOpacity: 1,\r\n\t\t\t\tanchor: new google.maps.Point(4, 4),\r\n\t\t\t\tstrokeWeight: 1,\r\n\t\t\t\tstrokeOpacity: 1,\r\n\t\t\t\tstrokeColor: '#303030',\r\n\t\t\t\tscale: 1,\r\n\t\t\t\tid: 'centerIcon'\r\n\t\t\t};\r\n\t\t}\r\n\r\n\r\n/*\r\n\t\tvar handleIconUp = {\r\n\t\t\tpath: 'M0,0 32,0 16,27.7z',\r\n\t\t\tfillColor: '#ffffff',\r\n\t\t\tfillOpacity: 1,\r\n\t\t\tanchor: new google.maps.Point(16, 28),\r\n\t\t\tstrokeWeight: 1,\r\n\t\t\tstrokeOpacity: 1,\r\n\t\t\tstrokeColor: '#303030',\r\n\t\t\tscale: 1,\r\n\t\t\tid: 'handleIcon'\r\n\t\t};\r\n\t\tvar handleIconDown = {\r\n\t\t\tpath: 'M16,0 32,27.7 0,27.7z',\r\n\t\t\tfillColor: '#ffffff',\r\n\t\t\tfillOpacity: 1,\r\n\t\t\tanchor: new google.maps.Point(16, 0),\r\n\t\t\tstrokeWeight: 1,\r\n\t\t\tstrokeOpacity: 1,\r\n\t\t\tstrokeColor: '#303030',\r\n\t\t\tscale: 1,\r\n\t\t\tid: 'handleIcon'\r\n\t\t};\r\n*/\r\n/*\r\n var startPinIcon = {\r\n path: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n fillColor: '#ffffff',\r\n fillOpacity: 1,\r\n anchor: new google.maps.Point(4, 4),\r\n strokeWeight: 1,\r\n strokeOpacity: 1,\r\n strokeColor: cs.strokeColor,\r\n scale: 1,\r\n\t\t\tid: 'startPinIcon'\r\n };\r\n*/\r\n/*\r\n var endPinIcon = {\r\n path: 'M4 4m-4,0a4,4,0 0,1 8,0a 4,4 0 0,1 -8,0z',\r\n fillColor: '#ffffff',\r\n fillOpacity: 1,\r\n anchor: new google.maps.Point(4, 4),\r\n strokeWeight: 1,\r\n strokeOpacity: 1,\r\n strokeColor: cs.strokeColor,\r\n scale: 1,\r\n\t\t\tid: 'endPinIcon'\r\n };\r\n*/\r\n function DistanceWidget(map, cs) {\r\n\r\n this.set('map', map);\r\n this.set('position', centerPoint);\r\n marker = new google.maps.Marker({\r\n icon: centerIcon,//handleIconDown,\r\n draggable: true,\r\n raiseOnDrag: false,\r\n title: 'Move me!',\r\n\t\t\t\tid: 'centerMarker'\r\n });\r\n marker.bindTo('map', this);\r\n marker.bindTo('position', this);\r\n\r\n var radiusWidget = new RadiusWidget();\r\n radiusWidget.bindTo('map', this);\r\n radiusWidget.bindTo('center', this, 'position');\r\n this.bindTo('distance', radiusWidget);\r\n this.bindTo('bounds', radiusWidget);\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(marker, 'click', function () {\r\n\t\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t\t\t//console.log(marker.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\t//console.log(m.id+' > '+m.getIcon().id);\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(marker.getIcon().id == 'centerIcon') {\r\n\t\t\t\t\t\tmarker.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tmarker.setIcon(centerIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(marker, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(marker.getIcon().id);\r\n\t\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\t//console.log(m.id+' > '+m.getIcon().id);\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmarker.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(marker);\r\n\t\t\t\t//console.log(controlMarkers);\r\n\t\t\t}\r\n\r\n return currentCircleSegment;\r\n }\r\n DistanceWidget.prototype = new google.maps.MVCObject();\r\n\r\n function RadiusWidget() {\r\n currentCircleSegment = new google.maps.Polygon({\r\n id: cs.id,\r\n strokeColor: cs.strokeColor,\r\n strokeOpacity: cs.strokeOpacity,\r\n strokeWeight: cs.strokeWeight,\r\n fillColor: cs.fillColor,\r\n fillOpacity: cs.fillOpacity,\r\n zIndex: cs.zIndex,\r\n isHole: cs.isHole\r\n });\r\n\r\n this.set('distance', initialRadius); //this sets the initial radius\r\n\r\n this.bindTo('bounds', currentCircleSegment);\r\n cs.setVisible(false);\r\n currentCircleSegment.bindTo('map', this);\r\n\r\n var circle = new google.maps.Circle({\r\n strokeColor: '#000000',\r\n strokeOpacity: 0.2,\r\n strokeWeight: 2,\r\n fillColor: '#000000',\r\n fillOpacity: 0.0,\r\n });\r\n this.bindTo('bounds', circle);\r\n circle.bindTo('center', this);\r\n circle.bindTo('map', this);\r\n circle.bindTo('radius', this);\r\n\r\n this.addSizerTop_();\r\n this.addSizerRight_();\r\n this.addSizerBottom_();\r\n this.addSizerLeft_();\r\n\r\n this.addStartPin_();\r\n this.addEndPin_();\r\n }\r\n RadiusWidget.prototype = new google.maps.MVCObject();\r\n\r\n RadiusWidget.prototype.distance_changed = function () {\r\n this.set('radius', this.get('distance'));\r\n };\r\n\r\n RadiusWidget.prototype.addStartPin_ = function () {\r\n var startPin = new google.maps.Marker({\r\n icon: startPinIcon,\r\n draggable: true,\r\n raiseOnDrag: false,\r\n title: 'Drag me!',\r\n\t\t\t\tid: 'startPin'\r\n });\r\n startPin.bindTo('map', this);\r\n startPin.bindTo('position', this, 'startPin_position');\r\n\r\n var sp = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(startPin, 'click', function () {\r\n\t\t\t\t\t//console.log(startPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(startPin.getIcon().id == 'startPinIcon') {\r\n\t\t\t\t\t\tif(startHeading > 90 && startHeading < 270) {\r\n\t\t\t\t\t\t\tstartPin.setIcon(handleIconDown);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstartPin.setIcon(handleIconUp);\r\n\t\t\t\t\t\t}\t\t\t\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstartPin.setIcon(startPinIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(startPin, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(startPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(startHeading > 90 && startHeading < 270) {\r\n\t\t\t\t\t\tstartPin.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstartPin.setIcon(handleIconUp);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(startPin);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(startPin, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = sp.get('startPin_position');\r\n var center = sp.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n startHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, min, startHeading));\r\n } else if (distance > max) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, max, startHeading));\r\n }\r\n sp.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(startPin, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = sp.get('startPin_position');\r\n var center = sp.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n startHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, min, startHeading));\r\n } else if (distance > max) {\r\n sp.set('startPin_position', google.maps.geometry.spherical.computeOffset(center, max, startHeading));\r\n }\r\n sp.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addEndPin_ = function () {\r\n var endPin = new google.maps.Marker({\r\n icon: endPinIcon,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'Drag me!',\r\n\t\t\t\tid: 'endPin'\r\n });\r\n endPin.bindTo('map', this);\r\n endPin.bindTo('position', this, 'endPin_position');\r\n\r\n var ep = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(endPin, 'click', function () {\r\n\t\t\t\t\t//console.log(endPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(endPin.getIcon().id == 'endPinIcon') {\r\n\t\t\t\t\t\tif(endHeading > 90 && endHeading < 270) {\r\n\t\t\t\t\t\t\tendPin.setIcon(handleIconDown);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tendPin.setIcon(handleIconUp);\r\n\t\t\t\t\t\t}\t\t\t\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tendPin.setIcon(endPinIcon);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(endPin, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(endPin.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(endHeading > 90 && endHeading < 270) {\r\n\t\t\t\t\t\tendPin.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tendPin.setIcon(handleIconUp);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(endPin);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(endPin, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = ep.get('endPin_position');\r\n var center = ep.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n endHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, min, endHeading));\r\n } else if (distance > max) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, max, endHeading));\r\n }\r\n ep.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(endPin, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n var pos = ep.get('endPin_position');\r\n var center = ep.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n endHeading = google.maps.geometry.spherical.computeHeading(center, pos);\r\n\r\n if (distance < min) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, min, endHeading));\r\n } else if (distance > max) {\r\n ep.set('endPin_position', google.maps.geometry.spherical.computeOffset(center, max, endHeading));\r\n }\r\n ep.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerTop_ = function () {\r\n sizerTop = new google.maps.Marker({\r\n icon: sizerIconTop,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the top radius sizer, drag me!',\r\n cursor: 'row-resize',\r\n\t\t\t\tid: 'sizerTop'\r\n });\r\n sizerTop.bindTo('map', this);\r\n sizerTop.bindTo('position', this, 'sizerTop_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerTop, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerTop.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerTop.getIcon().id == 'sizerIconTop') {\r\n\t\t\t\t\t\tsizerTop.setIcon(handleIconUp);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerTop.setIcon(sizerIconTop);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerTop, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerTop.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerTop.setIcon(handleIconUp);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerTop);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerTop, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerTop_position', new google.maps.LatLng(me.get('sizerTop_position').lat(), me.get('center').lng())); //this restricts sizerTop to vertical movement\r\n var pos = me.get('sizerTop_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, min, 0));\r\n } else if (distance > max) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, max, 0));\r\n }\r\n me.setDistanceTop();\r\n });\r\n\r\n google.maps.event.addListener(sizerTop, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerTop_position', new google.maps.LatLng(me.get('sizerTop_position').lat(), me.get('center').lng())); //this restricts sizerTop to vertical movement\r\n var pos = me.get('sizerTop_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, min, 0));\r\n } else if (distance > max) {\r\n me.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, max, 0));\r\n }\r\n me.setDistanceTop();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerRight_ = function () {\r\n sizerRight = new google.maps.Marker({\r\n icon: sizerIconRight,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the right radius sizer, drag me!',\r\n cursor: 'col-resize',\r\n\t\t\t\tid: 'sizerRight'\r\n });\r\n sizerRight.bindTo('map', this);\r\n sizerRight.bindTo('position', this, 'sizerRight_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerRight, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerRight.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerRight.getIcon().id == 'sizerIconRight') {\r\n\t\t\t\t\t\tsizerRight.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerRight.setIcon(sizerIconRight);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerRight, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerRight.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerRight.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerRight);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerRight, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerRight_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerRight_position').lng())); //this restricts sizerRight to horizontal movement\r\n var pos = me.get('sizerRight_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, min, 90));\r\n } else if (distance > max) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, max, 90));\r\n }\r\n me.setDistanceRight();\r\n });\r\n\r\n google.maps.event.addListener(sizerRight, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerRight_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerRight_position').lng())); //this restricts sizerRight to horizontal movement\r\n var pos = me.get('sizerRight_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, min, 90));\r\n } else if (distance > max) {\r\n me.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, max, 90));\r\n }\r\n me.setDistanceRight();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerBottom_ = function () {\r\n sizerBottom = new google.maps.Marker({\r\n icon: sizerIconBottom,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the bottom radius sizer, drag me!',\r\n cursor: 'row-resize',\r\n\t\t\t\tid: 'sizerBottom'\r\n });\r\n sizerBottom.bindTo('map', this);\r\n sizerBottom.bindTo('position', this, 'sizerBottom_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerBottom, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerBottom.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerBottom.getIcon().id == 'sizerIconBottom') {\r\n\t\t\t\t\t\tsizerBottom.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerBottom.setIcon(sizerIconBottom);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerBottom, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerBottom.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerBottom.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerBottom);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerBottom, 'drag', function () {\r\n var min = 5;\r\n var max = 2000;\r\n\r\n me.set('sizerBottom_position', new google.maps.LatLng(me.get('sizerBottom_position').lat(), me.get('center').lng())); //this restricts sizerBottom to vertical movement\r\n var pos = me.get('sizerBottom_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, min, 180));\r\n } else if (distance > max) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, max, 180));\r\n }\r\n me.setDistanceBottom();\r\n });\r\n\r\n google.maps.event.addListener(sizerBottom, 'dragend', function () {\r\n var min = 5;\r\n var max = 2000;\r\n\r\n me.set('sizerBottom_position', new google.maps.LatLng(me.get('sizerBottom_position').lat(), me.get('center').lng())); //this restricts sizerBottom to vertical movement\r\n var pos = me.get('sizerBottom_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, min, 180));\r\n } else if (distance > max) {\r\n me.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, max, 180));\r\n }\r\n me.setDistanceBottom();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.addSizerLeft_ = function () {\r\n sizerLeft = new google.maps.Marker({\r\n icon: sizerIconLeft,\r\n draggable: true,\r\n crossOnDrag: false,\r\n title: 'I\\'m the left radius sizer, drag me!',\r\n cursor: 'col-resize',\r\n\t\t\t\tid: 'sizerLeft'\r\n });\r\n sizerLeft.bindTo('map', this);\r\n sizerLeft.bindTo('position', this, 'sizerLeft_position');\r\n\r\n var me = this;\r\n\r\n\t\t\tif(isMobile) {\r\n\t\t\t\tgoogle.maps.event.addListener(sizerLeft, 'click', function () {\r\n\t\t\t\t\t//console.log(sizerLeft.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(sizerLeft.getIcon().id == 'sizerIconLeft') {\r\n\t\t\t\t\t\tsizerLeft.setIcon(handleIconDown);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsizerLeft.setIcon(sizerIconLeft);\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t});\t\r\n\t\t\t\tgoogle.maps.event.addListener(sizerLeft, 'dragstart', function () {\r\n\t\t\t\t\t//console.log(sizerLeft.getIcon().id);\r\n\t\t\t\t\tif(controlMarkers.length > 0) {\r\n\t\t\t\t\t\tcontrolMarkers.forEach(function(m,midx) {\r\n\t\t\t\t\t\t\tif(m.id == 'centerMarker' && m.getIcon().id != 'centerIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(centerIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'startPin' && m.getIcon().id != 'startPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(startPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'endPin' && m.getIcon().id != 'endPinIcon') {\r\n\t\t\t\t\t\t\t\tm.setIcon(endPinIcon);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerTop' && m.getIcon().id != 'sizerIconTop') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconTop);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerRight' && m.getIcon().id != 'sizerIconRight') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconRight);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerBottom' && m.getIcon().id != 'sizerIconBottom') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconBottom);\r\n\t\t\t\t\t\t\t} else if(m.id == 'sizerLeft' && m.getIcon().id != 'sizerIconLeft') {\r\n\t\t\t\t\t\t\t\tm.setIcon(sizerIconLeft);\r\n\t\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsizerLeft.setIcon(handleIconDown);\r\n\t\t\t\t});\t\r\n\t\t\t\tcontrolMarkers.push(sizerLeft);\r\n\t\t\t}\t\r\n\r\n google.maps.event.addListener(sizerLeft, 'drag', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerLeft_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerLeft_position').lng())); //this restricts sizerLeft to horizontal movement\r\n var pos = me.get('sizerLeft_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, min, 270));\r\n } else if (distance > max) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, max, 270));\r\n }\r\n me.setDistanceLeft();\r\n });\r\n\r\n google.maps.event.addListener(sizerLeft, 'dragend', function () {\r\n var min = 5; //min radius in m\r\n var max = 2000; //max radius in m\r\n\r\n me.set('sizerLeft_position', new google.maps.LatLng(me.get('center').lat(), me.get('sizerLeft_position').lng())); //this restricts sizerLeft to horizontal movement\r\n var pos = me.get('sizerLeft_position');\r\n var center = me.get('center');\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n if (distance < min) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, min, 270));\r\n } else if (distance > max) {\r\n me.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, max, 270));\r\n }\r\n me.setDistanceLeft();\r\n });\r\n };\r\n\r\n RadiusWidget.prototype.center_changed = function () {\r\n var rbounds = this.get('bounds');\r\n var center = this.get('center');\r\n var distance = this.get('distance');\r\n\r\n if (rbounds) {\r\n var segmentPath = new IQLCircleSegment().get(this.get('center').lat(), this.get('center').lng(), distance, startHeading, endHeading);\r\n currentCircleSegment.setPath(segmentPath);\r\n\r\n var latNE = rbounds.getNorthEast().lat();\r\n var lngNE = rbounds.getNorthEast().lng();\r\n var latSW = rbounds.getSouthWest().lat();\r\n var lngSW = rbounds.getSouthWest().lng();\r\n\r\n var positionTop = new google.maps.LatLng(latNE, this.get('center').lng());\r\n var positionRight = new google.maps.LatLng(this.get('center').lat(), lngNE);\r\n var positionBottom = new google.maps.LatLng(latSW, this.get('center').lng());\r\n var positionLeft = new google.maps.LatLng(this.get('center').lat(), lngSW);\r\n\r\n this.set('sizerTop_position', positionTop);\r\n this.set('sizerRight_position', positionRight);\r\n this.set('sizerBottom_position', positionBottom);\r\n this.set('sizerLeft_position', positionLeft);\r\n\r\n this.set('startPin_position', segmentPath[0]);\r\n this.set('endPin_position', segmentPath[segmentPath.length - 2]);\r\n }\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceTop = function () {\r\n var pos = this.get('sizerTop_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var segmentPath = new IQLCircleSegment().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSegment.setPath(segmentPath);\r\n this.set('startPin_position', segmentPath[0]);\r\n this.set('endPin_position', segmentPath[segmentPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceRight = function () {\r\n var pos = this.get('sizerRight_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var segmentPath = new IQLCircleSegment().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSegment.setPath(segmentPath);\r\n this.set('startPin_position', segmentPath[0]);\r\n this.set('endPin_position', segmentPath[segmentPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceBottom = function () {\r\n var pos = this.get('sizerBottom_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var segmentPath = new IQLCircleSegment().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSegment.setPath(segmentPath);\r\n this.set('startPin_position', segmentPath[0]);\r\n this.set('endPin_position', segmentPath[segmentPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerLeft_position', google.maps.geometry.spherical.computeOffset(center, distance, 270));\r\n\r\n };\r\n\r\n RadiusWidget.prototype.setDistanceLeft = function () {\r\n var pos = this.get('sizerLeft_position');\r\n var center = this.get('center');\r\n\r\n var distance = google.maps.geometry.spherical.computeDistanceBetween(center, pos);\r\n var segmentPath = new IQLCircleSegment().get(center.lat(), center.lng(), distance, startHeading, endHeading);\r\n currentCircleSegment.setPath(segmentPath);\r\n this.set('startPin_position', segmentPath[0]);\r\n this.set('endPin_position', segmentPath[segmentPath.length - 2]);\r\n // Set the distance property for any objects that are bound to it\r\n this.set('distance', distance);\r\n this.set('sizerTop_position', google.maps.geometry.spherical.computeOffset(center, distance, 0));\r\n this.set('sizerRight_position', google.maps.geometry.spherical.computeOffset(center, distance, 90));\r\n this.set('sizerBottom_position', google.maps.geometry.spherical.computeOffset(center, distance, 180));\r\n\r\n };\r\n\r\n return new DistanceWidget(map, cs);\r\n }\r\n\r\n}","'use strict';\n\n/**\n * Based off of [the offical Google document](https://developers.google.com/maps/documentation/utilities/polylinealgorithm)\n *\n * Some parts from [this implementation](http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/PolylineEncoder.js)\n * by [Mark McClure](http://facstaff.unca.edu/mcmcclur/)\n *\n * @module polyline\n */\n\nvar polyline = {};\n\nfunction encode(coordinate, factor) {\n coordinate = Math.round(coordinate * factor);\n coordinate <<= 1;\n if (coordinate < 0) {\n coordinate = ~coordinate;\n }\n var output = '';\n while (coordinate >= 0x20) {\n output += String.fromCharCode((0x20 | (coordinate & 0x1f)) + 63);\n coordinate >>= 5;\n }\n output += String.fromCharCode(coordinate + 63);\n return output;\n}\n\n/**\n * Decodes to a [latitude, longitude] coordinates array.\n *\n * This is adapted from the implementation in Project-OSRM.\n *\n * @param {String} str\n * @param {Number} precision\n * @returns {Array}\n *\n * @see https://github.com/Project-OSRM/osrm-frontend/blob/master/WebContent/routing/OSRM.RoutingGeometry.js\n */\npolyline.decode = function(str, precision) {\n var index = 0,\n lat = 0,\n lng = 0,\n coordinates = [],\n shift = 0,\n result = 0,\n byte = null,\n latitude_change,\n longitude_change,\n factor = Math.pow(10, precision || 5);\n\n // Coordinates have variable length when encoded, so just keep\n // track of whether we've hit the end of the string. In each\n // loop iteration, a single coordinate is decoded.\n while (index < str.length) {\n\n // Reset shift, result, and byte\n byte = null;\n shift = 0;\n result = 0;\n\n do {\n byte = str.charCodeAt(index++) - 63;\n result |= (byte & 0x1f) << shift;\n shift += 5;\n } while (byte >= 0x20);\n\n latitude_change = ((result & 1) ? ~(result >> 1) : (result >> 1));\n\n shift = result = 0;\n\n do {\n byte = str.charCodeAt(index++) - 63;\n result |= (byte & 0x1f) << shift;\n shift += 5;\n } while (byte >= 0x20);\n\n longitude_change = ((result & 1) ? ~(result >> 1) : (result >> 1));\n\n lat += latitude_change;\n lng += longitude_change;\n\n coordinates.push([lat / factor, lng / factor]);\n }\n\n return coordinates;\n};\n\n/**\n * Encodes the given [latitude, longitude] coordinates array.\n *\n * @param {Array.<Array.<Number>>} coordinates\n * @param {Number} precision\n * @returns {String}\n */\npolyline.encode = function(coordinates, precision) {\n if (!coordinates.length) { return ''; }\n\n var factor = Math.pow(10, precision || 5),\n output = encode(coordinates[0][0], factor) + encode(coordinates[0][1], factor);\n\n for (var i = 1; i < coordinates.length; i++) {\n var a = coordinates[i], b = coordinates[i - 1];\n output += encode(a[0] - b[0], factor);\n output += encode(a[1] - b[1], factor);\n }\n\n return output;\n};\n\nfunction flipped(coords) {\n var flipped = [];\n for (var i = 0; i < coords.length; i++) {\n flipped.push(coords[i].slice().reverse());\n }\n return flipped;\n}\n\n/**\n * Encodes a GeoJSON LineString feature/geometry.\n *\n * @param {Object} geojson\n * @param {Number} precision\n * @returns {String}\n */\npolyline.fromGeoJSON = function(geojson, precision) {\n if (geojson && geojson.type === 'Feature') {\n geojson = geojson.geometry;\n }\n if (!geojson || geojson.type !== 'LineString') {\n throw new Error('Input must be a GeoJSON LineString');\n }\n return polyline.encode(flipped(geojson.coordinates), precision);\n};\n\n/**\n * Decodes to a GeoJSON LineString geometry.\n *\n * @param {String} str\n * @param {Number} precision\n * @returns {Object}\n */\npolyline.toGeoJSON = function(str, precision) {\n var coords = polyline.decode(str, precision);\n return {\n type: 'LineString',\n coordinates: flipped(coords)\n };\n};\n\nif (typeof module === 'object' && module.exports) {\n module.exports = polyline;\n}\n","import { diffLatLng2Meters, formatBlockLabel, get_FillColorOpacity, get_FillColor } from './map.common';\r\nimport { ClearHTML } from '../../utils/mapUtils';\r\nimport { circleToPolygon } from './circle.functions';\r\nimport { IQLPolygonCustomEdit } from './shapes/polygon.customedit';\r\nimport { IQLFieldGeoLocation } from './field.geolocation';\r\nimport polylabel from 'polylabel';\r\nimport polyline from '@mapbox/polyline';\r\nimport { IQLCircleFull } from './shapes/circle.full';\r\nimport { IQLCircleSector } from './shapes/circle.sector';\r\nimport { IQLCircleSegment } from './shapes/circle.segment';\r\nimport { createSvgIcon } from '../../utils/iconUtils';\r\nimport { FieldValidator } from '../fieldEncapsulation/iql.fieldvalidator';\r\n\r\n\r\n\r\nexport class MapOverlayManager {\r\n constructor(mapInstance) {\r\n\r\n // #region Private variables\r\n var _this = this;\r\n var map = mapInstance;\r\n var mapId = null;\r\n var bounds = null;\r\n\r\n // listeners\r\n var zoomChangedListener = null;\r\n var polygonListeners = [];\r\n var markerListeners = [];\r\n var mapListeners = [];\r\n\r\n // event handlers\r\n var eventHandlers = {};\r\n\r\n // global variables\r\n var locPolygons = [];\r\n\tvar allPoints = []; \r\n var polygons = [];\r\n var polyLabels = [];\r\n var fpolies = [];\r\n\tvar controlMarkers = [];\r\n\tvar pointMarkers = [];\r\n\tvar rmarker = null;\r\n\tvar pmarker = null;\r\n\tvar dirmarkers = [];\r\n\tvar dpolylines = [];\r\n\tvar rpolylines = [];\r\n\tvar fmarkers = [];\r\n\r\n\tvar currentPolylineCustomEdit = null;\r\n\tvar currentPolygonCustomEdit = null;\r\n var currentCircleFull = null;\r\n var currentCircleSector = null;\r\n var currentCircleSegment = null;\r\n\t\r\n var diffLat, diffLng, wdppx, hdppx, hlat, hlng;\r\n\r\n // Tooltip\r\n var tipObj = null;\r\n var ttOffset = { x: 20, y: 20 };\r\n\r\n // Add new array for background fields\r\n var backgroundFields = [];\r\n\r\n function polygonsToMap_set() {\r\n polygons.forEach(function (p, index) {\r\n p.setMap(map);\r\n });\r\n\r\n locPolygons.forEach(function (lp, index) {\r\n lp.setMap(map);\r\n });\r\n\r\n if (map.getZoom() >= 13) {\r\n polyLabels.forEach(function (pl, index) {\r\n pl.setMap(map);\r\n });\r\n } else {\r\n polyLabels.forEach(function (pl, index) {\r\n pl.setMap(null);\r\n });\r\n }\r\n\r\n zoomChangedListener = google.maps.event.addListener(map, 'zoom_changed', function () {\r\n\t\t\t\r\n if (map.getZoom() >= 13) {\r\n polyLabels.forEach(function (pl, index) {\r\n pl.setMap(map);\r\n });\r\n } else {\r\n polyLabels.forEach(function (pl, index) {\r\n pl.setMap(null);\r\n });\r\n }\r\n });\r\n\r\n mapListeners.push(zoomChangedListener);\r\n }\r\n\r\n function AddLabel(location, labelColour = \"white\") {\r\n var polyCentroidCenter = get_polygon_centroid(location.Poly);\r\n var labelLat = polyCentroidCenter.y;\r\n var labelLon = polyCentroidCenter.x;\r\n var areaText = `${location.Area} ha`;\r\n var bl = formatBlockLabel(location.Id, location.LocationName, areaText, 8);\r\n\r\n var svgText = `<svg viewBox=\"0 0 200 30\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <text x=\"0\" y=\"12\" fill=\"${labelColour}\" font-family=\"Arial, sans-serif\" font-size=\"8px\">${ClearHTML.clearString(location.LocationName)}</text>\r\n <line x1=\"0\" y1=\"15\" x2=\"${Math.max(bl.nameWidth, bl.areaWidth)}\" y2=\"15\" style=\"stroke:${labelColour};stroke-width:0.6\"/>\r\n <text x=\"0\" y=\"24\" fill=\"${labelColour}\" font-family=\"Arial, sans-serif\" font-size=\"8px\">${areaText}</text>\r\n </svg>`;\r\n\r\n var polyLabel = new google.maps.Marker({\r\n map: map,\r\n position: new google.maps.LatLng(parseFloat(labelLat), parseFloat(labelLon)),\r\n icon: {\r\n anchor: new google.maps.Point(1.3 * bl.nameWidth / 2, 21),\r\n url: `data:image/svg+xml;utf-8, ${svgText}`\r\n },\r\n id: `pl_${location.Id}`\r\n });\r\n polyLabels.push(polyLabel);\r\n }\r\n\r\n function get_polygon_centroid(points) {\r\n var centroid = polylabel(points, 0.00001);\r\n return { x: centroid[0], y: centroid[1] };\r\n }\r\n\r\n function fields_BindPolyEvents() {\r\n deleteTooltip();\r\n\r\n polygons.forEach(function (poly) {\r\n polygonListeners.push(google.maps.event.addListener(poly, 'mouseover', function (event) {\r\n deleteTooltip();\r\n injectTooltip(event, poly.content);\r\n }));\r\n polygonListeners.push(google.maps.event.addListener(poly, 'mousemove', moveTooltip));\r\n polygonListeners.push(google.maps.event.addListener(poly, 'mouseout', deleteTooltip));\r\n polygonListeners.push(google.maps.event.addListener(poly, 'click', function (event) {\r\n deleteTooltip();\r\n eventHandlers[\"FieldOnClick\"](this.id);\r\n }));\r\n });\r\n }\r\n\r\n function farms_BindMarkerEvents() {\r\n deleteTooltip();\r\n fmarkers.forEach(function (marker) {\r\n var ttc = marker.id.split('|');\r\n markerListeners.push(marker.content.addEventListener('mouseover', function(event) {\r\n deleteTooltip();\r\n injectMarkerTooltip(event, ttc[1]+'<br>Farm '+ttc[2]);\r\n }));\r\n markerListeners.push(marker.content.addEventListener('mousemove', moveMarkerTooltip));\r\n markerListeners.push(marker.content.addEventListener('mouseout', deleteTooltip));\r\n });\r\n }\r\n\r\n function regions_BindPolyEvents() {\r\n deleteTooltip();\r\n \r\n fpolies.forEach(function (poly) {\r\n if (poly instanceof google.maps.Polygon) {\r\n polygonListeners.push(google.maps.event.addListener(poly, 'mouseover', function (event) {\r\n deleteTooltip();\r\n injectTooltip(event, poly.get('content'));\r\n }));\r\n polygonListeners.push(google.maps.event.addListener(poly, 'mousemove', moveTooltip));\r\n polygonListeners.push(google.maps.event.addListener(poly, 'mouseout', deleteTooltip));\r\n polygonListeners.push(google.maps.event.addListener(poly, 'click', function (event) {\r\n deleteTooltip();\r\n }));\r\n } else {\r\n console.warn('Invalid polygon object found in fpolies array:', poly);\r\n }\r\n });\r\n }\r\n\r\n function injectTooltip(event, data) {\r\n if (!tipObj && event) {\r\n tipObj = document.createElement(\"div\");\r\n tipObj.style.cssText = \"background: rgba(0, 0, 0, 0.5); color: #ffffff; border-radius: 4px; padding: 5px 10px; text-align: left; font-size: 12px; position: fixed;\";\r\n tipObj.innerHTML = data;\r\n tipObj.style.top = event.domEvent.clientY + window.scrollY + ttOffset.y + \"px\";\r\n tipObj.style.left = event.domEvent.clientX + window.scrollX + ttOffset.x + \"px\";\r\n document.body.appendChild(tipObj);\r\n }\r\n }\r\n\r\n function injectMarkerTooltip(event, data) {\r\n if (!tipObj && event) {\r\n tipObj = document.createElement(\"div\");\r\n tipObj.style.cssText = \"background: rgba(0, 0, 0, 0.5); color: #ffffff; border-radius: 4px; padding: 5px 10px; text-align: left; font-size: 12px; position: fixed;\";\r\n tipObj.innerHTML = data;\r\n tipObj.style.top = event.clientY + window.scrollY + ttOffset.y + \"px\";\r\n tipObj.style.left = event.clientX + window.scrollX + ttOffset.x + \"px\";\r\n document.body.appendChild(tipObj);\r\n }\r\n }\r\n\r\n function moveTooltip(event) {\r\n if (tipObj && event) {\r\n tipObj.style.top = event.domEvent.clientY + window.scrollY + ttOffset.y + \"px\";\r\n tipObj.style.left = event.domEvent.clientX + window.scrollX + ttOffset.x + \"px\";\r\n }\r\n }\r\n \r\n function moveMarkerTooltip(event) {\r\n if (tipObj && event) {\r\n tipObj.style.top = event.clientY + window.scrollY + ttOffset.y + \"px\";\r\n tipObj.style.left = event.clientX + window.scrollX + ttOffset.x + \"px\";\r\n }\r\n }\r\n\r\n function deleteTooltip() {\r\n if (tipObj) {\r\n document.body.removeChild(tipObj);\r\n tipObj = null;\r\n }\r\n }\r\n\r\n function AdvancedMarker(locations, icon, markerType = 'field') {\r\n if (map.getMapCapabilities().isAdvancedMarkersAvailable && locations && locations.length > 0) {\r\n var mapBounds = new google.maps.LatLngBounds();\r\n locations.forEach(function(v) {\r\n var fmarker;\r\n var bounds = new google.maps.LatLngBounds();\r\n \r\n if (markerType === 'farm') {\r\n bounds.extend(new google.maps.LatLng(v.minLat, v.minLng));\r\n bounds.extend(new google.maps.LatLng(v.maxLat, v.maxLng));\r\n } else {\r\n v.Poly[0].forEach(function(c) {\r\n bounds.extend(new google.maps.LatLng(parseFloat(c[1]), parseFloat(c[0])));\r\n });\r\n }\r\n \r\n mapBounds.extend(bounds.getCenter());\r\n \r\n var svgicon = createSvgIcon({\r\n iconName: icon.name,\r\n fillColor: icon.style.color,\r\n width: icon.style.width,\r\n height: icon.style.height,\r\n strokeColor: icon.style.strokeColor,\r\n strokeWidth: icon.style.strokeWidth\r\n });\r\n \r\n fmarker = new google.maps.marker.AdvancedMarkerElement({\r\n map: map,\r\n position: bounds.getCenter(),\r\n content: svgicon\r\n }); \r\n \r\n //we actually don't need this part when passing data as below\r\n const markerId = markerType === 'farm' \r\n ? `${v.farmId}|${v.farmOrganization}|${v.farmName}`\r\n : `${v.Id}|${v.OrganisationName}|${v.FarmName}`;\r\n \r\n fmarker.setAttribute(\"id\", markerId);\r\n \r\n if (markerType === 'farm') {\r\n markerListeners.push(fmarker.addListener(\"click\", () => {\r\n deleteTooltip();\r\n eventHandlers[\"AdvancedMarkerOnClick\"]({\r\n type: 'SUCCESS',\r\n message: 'farm marker with id ' + fmarker.id + ' clicked',\r\n code: 200,\r\n data: v\r\n });\r\n }));\r\n } else {\r\n markerListeners.push(fmarker.addListener(\"click\", () => {\r\n deleteTooltip();\r\n eventHandlers[\"AdvancedMarkerOnClick\"]({\r\n type: 'SUCCESS',\r\n message: 'field marker with id ' + fmarker.id + ' clicked',\r\n code: 200,\r\n data: v\r\n });\r\n }));\r\n }\r\n \r\n fmarkers.push(fmarker);\r\n });\r\n \r\n if (markerType === 'farm') {\r\n map.fitBounds(mapBounds);\r\n farms_BindMarkerEvents();\r\n }\r\n }\r\n }\r\n \r\n _this.eventHandlers_set = function (eH) {\r\n Object.assign(eventHandlers, eH);\r\n };\r\n\r\n _this.eventHandlers_get = function () {\r\n return eventHandlers;\r\n }; \r\n\r\n //#DRAW/DISPLAY FIELDS\r\n _this.RenderFields = function (locations, properties) {\r\n var mbounds = new google.maps.LatLngBounds();\r\n\r\n locations.forEach(function (location) {\r\n if (location && location.Poly && location.Poly.length > 0 && location.Id.length > 0) {\r\n var paths = location.Poly.map(poly => poly.map(v => new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0]))));\r\n paths[0].forEach(coord => mbounds.extend(coord));\r\n\r\n let content = `${location.FarmName} - ${location.LocationName}<br>${location.Area} ha${location.IsIrrigated ? ', irrigated' : ''}`;\r\n\r\n if (location.CropPlanted) {\r\n content += `<br>${location.CropPlanted}`;\r\n if (location.CultivarPlanted) {\r\n content += ` (${location.CultivarPlanted})`;\r\n }\r\n if (location.PlantingDate) {\r\n content += `<br>Planted: ${location.PlantingDate.replace(/-/g, \"/\")}`;\r\n }\r\n }\r\n \r\n var polygonOptions = {\r\n paths: paths,\r\n id: location.Id,\r\n content: content\r\n }\r\n\r\n if (location.MapLocationFeature) {\r\n polygonOptions = {\r\n ...polygonOptions,\r\n content,\r\n strokeColor: location.MapLocationFeature.StrokeColor,\r\n strokeOpacity: location.MapLocationFeature.StrokeOpacity,\r\n strokeWeight: location.MapLocationFeature.StrokeWeight,\r\n fillColor: location.MapLocationFeature.FillColor,\r\n fillOpacity: location.MapLocationFeature.FillOpacity,\r\n zIndex: location.MapLocationFeature.ZIndex\r\n };\r\n }\r\n else\r\n {\r\n polygonOptions = {\r\n ...polygonOptions,\r\n ...properties.polygonOptions.unselected,\r\n };\r\n }\r\n\r\n var polygon = new google.maps.Polygon(polygonOptions);\r\n polygons.push(polygon);\r\n if (properties.labelVisable) AddLabel(location);\r\n }\r\n });\r\n\r\n map.fitBounds(mbounds);\r\n fields_BindPolyEvents();\r\n \r\n if(properties.icon){\r\n AdvancedMarker(locations, properties.icon);\r\n }\r\n\r\n polygonsToMap_set();\r\n };\r\n\r\n _this.destroy = function () {\r\n mapId = null;\r\n mapConfig = null;\r\n locations = [];\r\n selectedProvinceFieldId = null;\r\n\r\n defaultCenterLatitude = null;\r\n defaultCenterLongitude = null;\r\n\r\n locPolygons = [];\r\n polygons = [];\r\n polyLabels = [];\r\n\r\n _this.map_clear();\r\n }\r\n\r\n _this.map_clear = function () {\r\n // Clear all event listeners\r\n polygonListeners_clear();\r\n markerListeners_clear();\r\n mapListeners_clear();\r\n\r\n // Clear all markers and controls\r\n pointMarkers_clear();\r\n controlMarkers_clear();\r\n fmarkers_clear();\r\n rmarker_clear();\r\n pmarker_clear();\r\n dirmarkers_clear();\r\n\r\n // Clear all shapes and labels\r\n polyLabels_clear();\r\n polygons_clear();\r\n locPolygons_clear();\r\n fPolies_clear();\r\n \r\n // Clear all lines and custom edits\r\n dpolyline_clear(); \r\n polylineCustomEdit_clear();\r\n\r\n // Clear custom shape editors\r\n if (currentPolygonCustomEdit) {\r\n currentPolygonCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolygonCustomEdit);\r\n currentPolygonCustomEdit = null;\r\n }\r\n if (currentCircleFull) {\r\n currentCircleFull.setMap(null);\r\n currentCircleFull = null;\r\n }\r\n if (currentCircleSector) {\r\n currentCircleSector.setMap(null);\r\n currentCircleSector = null;\r\n }\r\n if (currentCircleSegment) {\r\n currentCircleSegment.setMap(null);\r\n currentCircleSegment = null;\r\n }\r\n\r\n // Clear all overlays\r\n if (map.overlayMapTypes) {\r\n while (map.overlayMapTypes.getLength() > 0) {\r\n map.overlayMapTypes.pop();\r\n }\r\n }\r\n\r\n // Clear any remaining tooltips\r\n deleteTooltip();\r\n\r\n // Clear any background fields\r\n if (backgroundFields.length > 0) {\r\n backgroundFields.forEach(field => {\r\n if (field.setMap) {\r\n field.setMap(null);\r\n }\r\n });\r\n backgroundFields = [];\r\n }\r\n\r\n // Reset all arrays\r\n locPolygons = [];\r\n allPoints = [];\r\n polygons = [];\r\n polyLabels = [];\r\n fpolies = [];\r\n controlMarkers = [];\r\n pointMarkers = [];\r\n dirmarkers = [];\r\n dpolylines = [];\r\n rpolylines = [];\r\n fmarkers = [];\r\n \r\n // Reset bounds\r\n bounds = null;\r\n }\r\n\r\n //#region Clear events\r\n\r\n function rmarker_clear() {\r\n if(rmarker != null) {\r\n\t\t\t\r\n\t\t\trmarker.setMap(null);\r\n\t\t\trmarker = null;\r\n\t\t}\r\n }\r\n\r\n function pmarker_clear() {\r\n if(pmarker != null) {\r\n\t\t\tpmarker.setMap(null);\r\n\t\t\tpmarker = null;\r\n\t\t}\t\r\n }\r\n\r\n function dirmarkers_clear() {\r\n\t\t//console.log(dirmarkers);\r\n\t\tdirmarkers.forEach(function (dm) {\r\n dm.setMap(null);\r\n dm = null;\r\n });\r\n dirmarkers = [];\r\n }\r\n\r\n function dpolyline_clear() {\r\n\t\tdpolylines.forEach(function (dp) {\r\n dp.setMap(null);\r\n dp = null;\r\n });\r\n }\r\n\r\n function pointMarkers_clear() {\r\n\t\tpointMarkers.forEach(function (pm) {\r\n pm.setMap(null);\r\n pm = null;\r\n });\r\n pointMarkers = [];\r\n }\r\n\r\n function controlMarkers_clear() {\r\n\t\tcontrolMarkers.forEach(function (cm) {\r\n cm.setMap(null);\r\n cm = null;\r\n });\r\n controlMarkers = [];\r\n }\r\n\r\n function fmarkers_clear() {\r\n\t\tfmarkers.forEach(function (fm) {\r\n fm.setMap(null);\r\n fm = null;\r\n });\r\n fmarkers = [];\r\n }\r\n\r\n function polygonListeners_clear() {\r\n polygonListeners.forEach(function (polygonListener) {\r\n google.maps.event.removeListener(polygonListener);\r\n });\r\n polygonListeners = [];\r\n }\r\n\r\n function markerListeners_clear() {\r\n markerListeners.forEach(function (markerListener) {\r\n google.maps.event.removeListener(markerListener);\r\n });\r\n markerListeners = [];\r\n }\r\n\r\n function mapListeners_clear() {\r\n mapListeners.forEach(function (mapListener) {\r\n google.maps.event.removeListener(mapListener);\r\n });\r\n mapListeners = [];\r\n }\r\n\r\n function polyLabels_clear() {\r\n\t\tpolyLabels.forEach(function (pl) {\r\n pl.setMap(null);\r\n pl = null;\r\n });\r\n polyLabels = [];\r\n }\r\n\r\n function polygons_clear() {\r\n polygons.forEach(function (p) {\r\n p.setMap(null);\r\n p = null;\r\n });\r\n polygons = [];\r\n }\r\n\t\r\n function locPolygons_clear() {\r\n\t\tif (currentPolygonCustomEdit != null) {\r\n\t\t\tcurrentPolygonCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolygonCustomEdit);\t\r\n\t\t}\r\n\r\n locPolygons.forEach(function (lp) {\r\n lp.setMap(null);\r\n lp = null;\r\n });\r\n locPolygons = [];\r\n }\r\n\r\n function polylineCustomEdit_clear() {\r\n\t\tif (currentPolylineCustomEdit != null) {\r\n\t\t\tcurrentPolylineCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolylineCustomEdit);\t\r\n\t\t}\r\n rpolylines.forEach(function(rp) {\r\n\t\t\trp.setMap(null);\r\n\t\t\trp = null;\t\r\n\t\t});\r\n }\r\n\r\n function fPolies_clear() {\r\n fpolies.forEach(function (p, index) {\r\n p.setMap(null);\r\n p = null;\r\n });\r\n fpolies = [];\r\n }\r\n \r\n\t// #endregion\r\n \r\n _this.selectShape = function(shapeId, selectedStyle, unselectedStyle) {\r\n console.log('Selecting shape:', shapeId);\r\n console.log('Current locPolygons:', locPolygons);\r\n\r\n locPolygons.forEach(function(polygon) {\r\n if (polygon) {\r\n console.log('Applying unselected style to polygon:', polygon.id);\r\n \r\n if (currentPolygonCustomEdit != null && polygon.isPolygon) {\r\n currentPolygonCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolygonCustomEdit);\r\n currentPolygonCustomEdit = null;\r\n polygon.setMap(map);\r\n }\r\n if (currentCircleFull != null && polygon.isCircle) {\r\n currentCircleFull.set('map', null);\r\n currentCircleFull = null;\r\n }\r\n if (currentCircleSector != null && polygon.isCircleSector) {\r\n currentCircleSector.set('map', null);\r\n currentCircleSector = null;\r\n }\r\n if (currentCircleSegment != null && polygon.isCircleSegment) {\r\n currentCircleSegment.set('map', null);\r\n currentCircleSegment = null;\r\n }\r\n\r\n polygon.setOptions({\r\n ...unselectedStyle,\r\n editable: false,\r\n draggable: false\r\n });\r\n }\r\n });\r\n\r\n if (shapeId) {\r\n const selectedShape = locPolygons.find(p => p.id == shapeId);\r\n if (selectedShape) {\r\n console.log('Applying selected style to shape:', shapeId);\r\n selectedShape.setOptions(selectedStyle);\r\n } else {\r\n console.warn('Shape not found in locPolygons:', shapeId);\r\n }\r\n }\r\n };\r\n\r\n // Add this helper function to check if a shape is in locPolygons\r\n _this.isShapeInLocPolygons = function(shapeId) {\r\n return locPolygons.some(p => p.id == shapeId);\r\n };\r\n\r\n _this.panAndZoomToShape = function(shapeId) {\r\n let shape = locPolygons.find(p => p.id == shapeId) || polygons.find(p => p.id == shapeId);\r\n console.log(\"locPolygons - panAndZoomToShape\", locPolygons);\r\n \r\n if (shape && map) {\r\n const bounds = new google.maps.LatLngBounds();\r\n \r\n if (shape.getPath) {\r\n shape.getPath().forEach(latLng => bounds.extend(latLng));\r\n } else if (shape.getCenter && shape.getRadius) {\r\n const center = shape.getCenter();\r\n const radius = shape.getRadius();\r\n bounds.extend(google.maps.geometry.spherical.computeOffset(center, radius, 0));\r\n bounds.extend(google.maps.geometry.spherical.computeOffset(center, radius, 180));\r\n } else if (shape.getBounds) {\r\n bounds.union(shape.getBounds());\r\n }\r\n \r\n const currentZoom = map.getZoom();\r\n \r\n map.fitBounds(bounds, { padding: 50 });\r\n \r\n google.maps.event.addListenerOnce(map, 'bounds_changed', function() {\r\n const newZoom = map.getZoom();\r\n \r\n if (Math.abs(newZoom - currentZoom) > 3) {\r\n map.setZoom(Math.min(newZoom, 18));\r\n }\r\n });\r\n } else {\r\n console.error('Shape not found:', shapeId);\r\n }\r\n };\r\n\r\n _this.Shape_Edit = function (ShapeId) {\r\n locPolygons.forEach((polygon_selected, index) => {\r\n if (polygon_selected.id === ShapeId) {\r\n\t\t\t\tpolygon_selected.setEditable(true);\r\n if (index > 0) {\r\n polygon_selected.setDraggable(true);\r\n\t\t\t\t}\t\r\n }\r\n });\r\n }\r\n\r\n _this.Shape_DrawingDone = function (ShapeId) {\r\n locPolygons.forEach(function (polygon) {\r\n if (polygon.id == ShapeId) {\r\n\t\t\t\tif (polygon.isPolygon) {\r\n\t\t\t\t\tif(currentPolygonCustomEdit != null) {\r\n\t\t\t\t\t\tvar path = currentPolygonCustomEdit.getPath();\r\n\t\t\t\t\t\tpolygon.setPath(path);\r\n\t\t\t\t\t\tcurrentPolygonCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolygonCustomEdit);\r\n\t\t\t\t\t\tcurrentPolygonCustomEdit = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpolygon.setMap(map);\r\n\t\t\t\t\tpolygon.setEditable(false);\r\n polygon.setDraggable(false);\r\n polygon.setVisible(true);\r\n\t\t\t\t} else if (polygon.isCircle) {\r\n\t\t\t\t\tvar reducedPath = new IQLCircleFull().reduce(currentCircleFull.getPath(), polygon.isHole);\r\n\t\t\t\t\tpolygon.setPath(reducedPath);\r\n polygon.isPolygon = false;\r\n polygon.isCircle = true;\r\n polygon.setEditable(false);\r\n polygon.setDraggable(false);\r\n currentCircleFull.setMap(null);\r\n currentCircleFull = null;\r\n polygon.setVisible(true);\r\n\t\t\t\t} else if (polygon.isCircleSector) {\r\n var reducedPath = new IQLCircleSector().reduce(currentCircleSector.getPath(), polygon.isHole);\r\n polygon.setPath(reducedPath);\r\n polygon.isPolygon = false;\r\n polygon.isCircleSector = true;\r\n polygon.setEditable(false);\r\n polygon.setDraggable(false);\r\n currentCircleSector.setMap(null);\r\n currentCircleSector = null;\r\n polygon.setVisible(true);\r\n } else if (polygon.isCircleSegment) {\r\n var reducedPath = new IQLCircleSegment().reduce(currentCircleSegment.getPath(), polygon.isHole);\r\n polygon.setPath(reducedPath);\r\n polygon.isPolygon = false;\r\n polygon.isCircleSegment = true;\r\n polygon.setEditable(false);\r\n polygon.setDraggable(false);\r\n currentCircleSegment.setMap(null);\r\n currentCircleSegment = null;\r\n polygon.setVisible(true);\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n _this.Shape_Delete = function (ShapeId, EventHandlers) {\r\n\r\n const currentBounds = map.getBounds();\r\n const currentCenter = map.getCenter();\r\n const currentZoom = map.getZoom();\r\n\r\n polygonListeners_clear();\r\n this.eventHandlers_set(EventHandlers);\r\n\r\n // Check if we're deleting the main shape (first shape)\r\n const isMainShape = locPolygons.length > 0 && locPolygons[0].id == ShapeId;\r\n\r\n if (isMainShape) {\r\n // Delete all shapes if main shape is being deleted\r\n _this.Shape_DeleteAll();\r\n return;\r\n }\r\n\r\n // Otherwise, proceed with deleting just the selected shape\r\n var pIndex = -1;\r\n locPolygons.forEach(function (p, index) {\r\n if (p.id == ShapeId) {\r\n if (currentPolygonCustomEdit != null) {\r\n currentPolygonCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolygonCustomEdit); \r\n currentPolygonCustomEdit = null;\r\n }\r\n\r\n if (currentCircleFull != null) {\r\n currentCircleFull.set('map', null);\r\n currentCircleFull = null;\r\n }\r\n\r\n if (currentCircleSector != null) {\r\n currentCircleSector.set('map', null);\r\n currentCircleSector = null;\r\n }\r\n if (currentCircleSegment != null) {\r\n currentCircleSegment.set('map', null);\r\n currentCircleSegment = null;\r\n }\r\n\r\n p.setMap(null);\r\n pIndex = index;\r\n }\r\n });\r\n\r\n if (pIndex >= 0) {\r\n locPolygons.splice(pIndex, 1);\r\n }\r\n\r\n if (currentCenter && currentBounds) {\r\n map.setZoom(currentZoom);\r\n map.setCenter(currentCenter);\r\n map.fitBounds(currentBounds);\r\n }\r\n };\r\n\r\n _this.Shape_DeleteAll = function (isMobile) {\r\n const currentBounds = map.getBounds();\r\n const currentCenter = map.getCenter();\r\n const currentZoom = map.getZoom();\r\n polygonListeners_clear();\r\n\r\n locPolygons.forEach(function (lp) {\r\n if (currentPolygonCustomEdit != null) {\r\n\t\t\t\tcurrentPolygonCustomEdit = new IQLPolygonCustomEdit().delete(map, currentPolygonCustomEdit);\t\r\n\t\t\t\t//console.log(currentPolygonCustomEdit);\r\n\t\t\t\tcurrentPolygonCustomEdit = null;\r\n\t\t\t}\t\r\n if (currentCircleFull != null) {\r\n currentCircleFull.set('map', null);\r\n currentCircleFull = null;\r\n }\r\n if (currentCircleSector != null) {\r\n currentCircleSector.set('map', null);\r\n currentCircleSector = null;\r\n }\r\n if (currentCircleSegment != null) {\r\n currentCircleSegment.set('map', null);\r\n currentCircleSegment = null;\r\n }\r\n lp.setMap(null);\r\n lp = null;\r\n });\r\n locPolygons = [];\r\n\r\n if (currentCenter && currentBounds) {\r\n map.setZoom(currentZoom);\r\n map.setCenter(currentCenter);\r\n map.fitBounds(currentBounds);\r\n }\r\n }\r\n\r\n //#POLYGON\r\n \r\n _this.Shape_PolygonCustomEdit_Add = function (isHole, config, isMobile, mapWidth, mapHeight, vmWidth, offsetX, offsetY) {\r\n\r\n if (!isHole) {\r\n\r\n var mapBounds = map.getBounds();\r\n var mapCenter = map.getCenter();\r\n var mcLat = mapCenter.lat();\r\n var mcLng = mapCenter.lng();\r\n \r\n var path = [];\r\n \r\n if (mapBounds) {\r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx + 60*hdppx, mcLng + offsetX*wdppx - 80*wdppx));//nw\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx + 60*hdppx, mcLng + offsetX*wdppx + 80*wdppx));//ne\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx - 60*hdppx, mcLng + offsetX*wdppx + 80*wdppx));//se\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx - 60*hdppx, mcLng + offsetX*wdppx - 80*wdppx));//sw\r\n }\t\r\n\r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n\r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: path,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10100,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n isPolygon: true,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: false,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n\r\n locPolygons.push(shape);\r\n\r\n currentPolygonCustomEdit = new IQLPolygonCustomEdit().edit(map, shape, currentPolygonCustomEdit, isMobile);\r\n\r\n return pid;\r\n\r\n } else {\r\n\r\n var holeId = addPolygonHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile);\t\r\n\r\n return holeId;\t\r\n\r\n }\t\r\n }\r\n\r\n\r\n _this.Shape_Polygon_Add = function (isHole, config, isMobile, mapWidth, mapHeight, vmWidth, offsetX, offsetY) {\r\n\r\n if(!isHole) { \r\n \r\n var mapBounds = map.getBounds();\r\n var mapCenter = map.getCenter();\r\n var mcLat = mapCenter.lat();\r\n var mcLng = mapCenter.lng();\r\n \r\n var path = [];\r\n var points = [];\r\n if (mapBounds) {\r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n \r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx + 60*hdppx, mcLng + offsetX*wdppx - 80*wdppx));//nw\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx + 60*hdppx, mcLng + offsetX*wdppx + 80*wdppx));//ne\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx - 60*hdppx, mcLng + offsetX*wdppx + 80*wdppx));//se\r\n path.push(new google.maps.LatLng(mcLat + offsetY*hdppx - 60*hdppx, mcLng + offsetX*wdppx - 80*wdppx));//sw\r\n \r\n points.push([mcLng + offsetX*wdppx - 80*wdppx, mcLat + offsetY*hdppx + 60*hdppx]);\r\n points.push([mcLng + offsetX*wdppx + 80*wdppx, mcLat + offsetY*hdppx + 60*hdppx]);\r\n points.push([mcLng + offsetX*wdppx + 80*wdppx, mcLat + offsetY*hdppx - 60*hdppx]);\r\n points.push([mcLng + offsetX*wdppx - 80*wdppx, mcLat + offsetY*hdppx - 60*hdppx]);\r\n points.push([mcLng + offsetX*wdppx - 80*wdppx, mcLat + offsetY*hdppx + 60*hdppx]);\r\n \r\n allPoints.push(points);\r\n \r\n }\t\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: path,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10100,\r\n clickable: true,\r\n editable: true,\r\n draggable: true,\r\n isPolygon: true,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: isHole,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n console.log('shape', shape);\r\n \r\n locPolygons.push(shape);\r\n return pid;\r\n \r\n } else {\r\n \r\n var holeId = addPolygonHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile);\t\r\n \r\n return holeId;\t\r\n }\r\n \r\n }\r\n\r\n function addPolygonHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile) {\r\n\t\t\r\n var nhid;\r\n \r\n if(typeof wdppx == 'undefined' || typeof hdppx == 'undefined') {\r\n var mapBounds = map.getBounds();\r\n \r\n if (mapBounds) {\r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n }\r\n }\r\n \r\n allPoints = [];\r\n locPolygons.forEach(function(lp) {\t\t\r\n var sPath = lp.getPath();\r\n var points = [];\r\n for(var c = 0; c < sPath.length; c++) {\r\n points.push([sPath.getAt(c).lng(), sPath.getAt(c).lat()]);\r\n }\r\n if(sPath.getAt(0).lng() != sPath.getAt(sPath.length-1).lng() || sPath.getAt(0).lat() != sPath.getAt(sPath.length-1).lat()) {\r\n points.push([sPath.getAt(0).lng(), sPath.getAt(0).lat()]);\r\n }\t\r\n allPoints.push(points);\r\n });\t\r\n \r\n var polyCentroidCenter = get_polygon_centroid(allPoints);\r\n \r\n hlat = polyCentroidCenter.y;\r\n hlng = polyCentroidCenter.x;\r\n \r\n for(var i= 20; i > 0;i--) {\r\n \r\n var hps = [];\r\n hps.push([hlng - 2*i*wdppx, hlat + 0.75*2*i*hdppx]);\r\n hps.push([hlng + 2*i*wdppx, hlat + 0.75*2*i*hdppx]);\r\n hps.push([hlng + 2*i*wdppx, hlat - 0.75*2*i*hdppx]);\r\n hps.push([hlng - 2*i*wdppx, hlat - 0.75*2*i*hdppx]);\r\n hps.push([hlng - 2*i*wdppx, hlat + 0.75*2*i*hdppx]);\r\n allPoints.push(hps);\r\n \r\n var notInsideCount = 0;\r\n hps.forEach(function(pt,ptIndex) {\r\n if (!google.maps.geometry.poly.containsLocation(new google.maps.LatLng(parseFloat(pt[1]), parseFloat(pt[0])), locPolygons[0])) {\r\n notInsideCount++;\r\n }\r\n });\r\n \r\n if (notInsideCount == 0) {\r\n \r\n if(allPoints.length > 2) {\r\n var holeIntersectCount = 0;\r\n for (var n = 1; n < allPoints.length - 1; n++) {\r\n for (var m = n + 1; m < allPoints.length; m++) {\r\n if (calcIntersection(allPoints[n], allPoints[m])) {\r\n holeIntersectCount++;\r\n }\r\n }\r\n }\r\n \r\n if(holeIntersectCount == 0) {\r\n nhid = drawPolygonHole(i, config, offsetX, offsetY, vmWidth, isMobile);\r\n break;\r\n } else {\r\n allPoints.pop();\r\n }\t\r\n } else {\r\n nhid = drawPolygonHole(i, config, offsetX, offsetY, vmWidth, isMobile);\r\n break;\r\n }\r\n } else { \r\n allPoints.pop();\r\n }\r\n }\r\n \r\n return nhid;\r\n \r\n }\t\r\n\r\n function calcIntersection(poly1Points, poly2Points) {\r\n const polygon1 = new google.maps.Polygon({\r\n paths: poly1Points.map(p => new google.maps.LatLng(p[1], p[0]))\r\n });\r\n const polygon2 = new google.maps.Polygon({\r\n paths: poly2Points.map(p => new google.maps.LatLng(p[1], p[0]))\r\n });\r\n \r\n for (let i = 0; i < poly2Points.length; i++) {\r\n const point = new google.maps.LatLng(poly2Points[i][1], poly2Points[i][0]);\r\n if (google.maps.geometry.poly.containsLocation(point, polygon1)) {\r\n return true;\r\n }\r\n }\r\n \r\n for (let i = 0; i < poly1Points.length; i++) {\r\n const point = new google.maps.LatLng(poly1Points[i][1], poly1Points[i][0]);\r\n if (google.maps.geometry.poly.containsLocation(point, polygon2)) {\r\n return true;\r\n }\r\n }\r\n \r\n return false;\r\n }\r\n\r\n function drawPolygonHole(i, config, offsetX, offsetY, vmWidth, isMobile) {\r\n\t\t\r\n var path = [];\r\n \r\n path.push(new google.maps.LatLng(hlat + 0.75*2*i*hdppx, hlng - 2*i*wdppx));\r\n path.push(new google.maps.LatLng(hlat + 0.75*2*i*hdppx, hlng + 2*i*wdppx));\r\n path.push(new google.maps.LatLng(hlat - 0.75*2*i*hdppx, hlng + 2*i*wdppx));\r\n path.push(new google.maps.LatLng(hlat - 0.75*2*i*hdppx, hlng - 2*i*wdppx));\r\n \r\n path.reverse();\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n //map: map,\r\n path: path,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10200,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n isPolygon: true,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: true,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n \r\n var osBounds = new google.maps.LatLngBounds();\r\n var osPath = locPolygons[0].getPath();\r\n osPath.forEach(function(c,index) {\r\n osBounds.extend(c);\r\n });\t\r\n \r\n var mapPanned = false;\r\n \r\n var boundsChangedListener = google.maps.event.addListener(map, 'bounds_changed', function () {\t\r\n if(!mapPanned) {\r\n \r\n var psw = map.getProjection().fromLatLngToPoint(osBounds.getSouthWest());\r\n var pne = map.getProjection().fromLatLngToPoint(osBounds.getNorthEast());\r\n \r\n var zoom = map.getZoom();\r\n var scale = 1 << zoom;\r\n \r\n if((pne.x - psw.x)*scale >= vmWidth) {\r\n map.setZoom(zoom-1);\r\n }\r\n \r\n \r\n offsetCenter(osBounds.getCenter(), offsetX, offsetY);\r\n mapPanned = !mapPanned;\r\n \r\n currentPolygonCustomEdit = new IQLPolygonCustomEdit().edit(map, shape, currentPolygonCustomEdit, isMobile);\r\n }\t\r\n });\r\n mapListeners.push(boundsChangedListener);\r\n \r\n map.fitBounds(osBounds);\r\n \r\n return pid;\r\n \r\n }\r\n\r\n //#CIRCLE ADD\r\n _this.Shape_CircleFull_Add = function (isHole, config, isMobile, mapWidth, mapHeight, vmWidth, vmcLat, vmcLng, offsetX, offsetY) {\r\n\r\n if(!isHole) { \r\n \r\n var startHeading = 0;\r\n var endHeading = 360;\r\n var mapBounds = map.getBounds();\r\n var mapCenter = map.getCenter();\r\n var mcLat = mapCenter.lat();\r\n var mcLng = mapCenter.lng();\r\n \r\n var cfLat = mcLat, cfLng = mcLng;\t\r\n \r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n \r\n var cfLat = mcLat + offsetY*hdppx;\r\n var cfLng = mcLng + offsetX*wdppx;\r\n \r\n var cp = new google.maps.LatLng(cfLat,cfLng);\r\n \r\n var crLat = cfLat;\r\n var crLng = cfLng + 80*wdppx;\r\n \r\n var rm = diffLatLng2Meters(cfLat, cfLng, crLat, crLng);\r\n \r\n var shapePath = new IQLCircleFull().get(cfLat, cfLng, rm, startHeading, endHeading);\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: shapePath,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10100,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: false,\r\n isPolygon: false,\r\n isCircle: true,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: isHole,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n currentCircleFull = new IQLCircleFull();\r\n currentCircleFull = currentCircleFull.edit(map, shape, currentCircleFull, cp, rm, isMobile, controlMarkers);\r\n\r\n return pid;\r\n } else {\r\n \r\n var holeId = addCircleFullHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile, controlMarkers);\r\n \r\n return holeId;\r\n }\t\t\r\n \r\n }\r\n\r\n _this.Shape_CircleSector_Add = function (isHole, config, isMobile, mapWidth, mapHeight, vmWidth, vmcLat, vmcLng, offsetX, offsetY) {\r\n\t\t\r\n if(!isHole) {\r\n \r\n var startHeading = 60;\r\n var endHeading = 120;\r\n var mapBounds = map.getBounds();\r\n var mapCenter = map.getCenter();\r\n var mcLat = mapCenter.lat();\r\n var mcLng = mapCenter.lng();\r\n \r\n var cfLat = mcLat, cfLng = mcLng;\t\r\n \r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n \r\n var cfLat = mcLat + offsetY*hdppx;\r\n var cfLng = mcLng + offsetX*wdppx;\r\n \r\n var cp = new google.maps.LatLng(cfLat,cfLng);\r\n \r\n var crLat = cfLat;\r\n var crLng = cfLng + 80*wdppx;\r\n \r\n var rm = diffLatLng2Meters(cfLat, cfLng, crLat, crLng);\r\n \r\n var shapePath = new IQLCircleSector().get(cfLat, cfLng, rm, startHeading, endHeading); \r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: shapePath,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: isHole ? 10200 : 10100,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: false,\r\n isPolygon: false,\r\n isCircle: false,\r\n isCircleSector: true,\r\n isCircleSegment: false,\r\n isHole: isHole,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n currentCircleSector = new IQLCircleSector();\r\n currentCircleSector = currentCircleSector.edit(map, shape, currentCircleSector, cp, rm, isMobile, controlMarkers);\r\n \r\n return pid;\r\n \r\n } else {\r\n \r\n var holeId = addCircleSectorHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile, controlMarkers);\r\n \r\n return holeId;\r\n \r\n }\t\t\r\n }\r\n \r\n _this.Shape_CircleSegment_Add = function (isHole, config, isMobile, mapWidth, mapHeight, vmWidth, vmcLat, vmcLng, offsetX, offsetY) {\r\n\t\t\r\n if(!isHole) {\r\n \r\n var startHeading = 0;\r\n var endHeading = 160;\r\n var mapBounds = map.getBounds();\r\n var mapCenter = map.getCenter();\r\n var mcLat = mapCenter.lat();\r\n var mcLng = mapCenter.lng();\r\n \r\n var cfLat = mcLat, cfLng = mcLng;\t\r\n \r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n \r\n var cfLat = mcLat + offsetY*hdppx;\r\n var cfLng = mcLng + offsetX*wdppx;\r\n \r\n var cp = new google.maps.LatLng(cfLat,cfLng);\r\n \r\n var crLat = cfLat;\r\n var crLng = cfLng + 80*wdppx;\r\n \r\n var rm = diffLatLng2Meters(cfLat, cfLng, crLat, crLng);\r\n \r\n var shapePath = new IQLCircleSegment().get(cfLat, cfLng, rm, startHeading, endHeading);\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: shapePath,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: isHole ? 10200 : 10100,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: false,\r\n isPolygon: false,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: true,\r\n isHole: isHole,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n currentCircleSegment = new IQLCircleSegment();\r\n \r\n currentCircleSegment = currentCircleSegment.edit(map, shape, currentCircleSegment, cp, rm, isMobile, controlMarkers);\r\n \r\n return pid;\r\n \r\n } else {\r\n var holeId = addCircleSegmentHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile, controlMarkers);\r\n \r\n return holeId;\r\n }\t\t\r\n }\r\n \r\n //#CIRCLE HOLE\r\n function addCircleFullHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile, controlMarkers) {\r\n\t\t\r\n var nhid;\r\n \r\n if(typeof wdppx == 'undefined' || typeof hdppx == 'undefined') { //this is the case on Select Field or Upload File\r\n var mapBounds = map.getBounds();\r\n \r\n if (mapBounds) {\r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n }\r\n }\r\n \r\n allPoints = [];\r\n locPolygons.forEach(function(lp) {\t\t\r\n var sPath = lp.getPath();\r\n var points = [];\r\n for(var c = 0; c < sPath.length; c++) {\r\n points.push([sPath.getAt(c).lng(), sPath.getAt(c).lat()]);\r\n }\r\n if(sPath.getAt(0).lng() != sPath.getAt(sPath.length-1).lng() || sPath.getAt(0).lat() != sPath.getAt(sPath.length-1).lat()) {\r\n points.push([sPath.getAt(0).lng(), sPath.getAt(0).lat()]);\r\n }\t\r\n allPoints.push(points);\r\n });\t\r\n \r\n var polyCentroidCenter = get_polygon_centroid(allPoints);\r\n \r\n hlat = polyCentroidCenter.y;\r\n hlng = polyCentroidCenter.x;\r\n \r\n var startHeading = 0;\r\n var endHeading = 360;\r\n \r\n for(var i = 20; i > 0;i--) {\r\n \r\n var hps = [];\r\n \r\n var crLat = hlat;\r\n var crLng = hlng + 2*i*wdppx;\r\n \r\n var cp = new google.maps.LatLng(hlat, hlng);\r\n \r\n var rm = diffLatLng2Meters(hlat, hlng, crLat, crLng);\r\n \r\n var shapePath = new IQLCircleFull().get(hlat, hlng, rm, startHeading, endHeading);\r\n \r\n shapePath.forEach(function(sp) {\r\n hps.push([sp.lng(), sp.lat()]);\t\t\r\n });\r\n \r\n allPoints.push(hps);\r\n \r\n var notInsideCount = 0;\r\n hps.forEach(function(pt,ptIndex) {\r\n if (!google.maps.geometry.poly.containsLocation(new google.maps.LatLng(parseFloat(pt[1]), parseFloat(pt[0])), locPolygons[0])) {\r\n notInsideCount++;\r\n }\r\n });\r\n \r\n if (notInsideCount == 0) {\r\n \r\n if(allPoints.length > 2) {\r\n var holeIntersectCount = 0;\r\n for (var n = 1; n < allPoints.length - 1; n++) {\r\n for (var m = n + 1; m < allPoints.length; m++) {\r\n if (calcIntersection(allPoints[n], allPoints[m])) {\r\n holeIntersectCount++;\r\n }\r\n }\r\n }\r\n \r\n if(holeIntersectCount == 0) {\r\n nhid = drawCircleFullHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers);\r\n break;\r\n } else {\r\n allPoints.pop();\r\n }\t\r\n } else {\r\n nhid = drawCircleFullHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers);\r\n break;\r\n }\r\n } else {\r\n allPoints.pop();\r\n }\r\n }\r\n \r\n return nhid;\r\n \r\n }\t\r\n\r\n function addCircleSectorHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile, controlMarkers) {\r\n\t\t\r\n var nhid;\r\n \r\n if(typeof wdppx == 'undefined' || typeof hdppx == 'undefined') { //this is the case on Select Field or Upload File\r\n var mapBounds = map.getBounds();\r\n \r\n if (mapBounds) {\r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n }\r\n }\r\n \r\n allPoints = [];\r\n locPolygons.forEach(function(lp) {\t\t\r\n var sPath = lp.getPath();\r\n var points = [];\r\n for(var c = 0; c < sPath.length; c++) {\r\n points.push([sPath.getAt(c).lng(), sPath.getAt(c).lat()]);\r\n }\r\n if(sPath.getAt(0).lng() != sPath.getAt(sPath.length-1).lng() || sPath.getAt(0).lat() != sPath.getAt(sPath.length-1).lat()) {\r\n points.push([sPath.getAt(0).lng(), sPath.getAt(0).lat()]);\r\n }\t\r\n allPoints.push(points);\r\n });\t\r\n \r\n var polyCentroidCenter = get_polygon_centroid(allPoints);\r\n \r\n hlat = polyCentroidCenter.y;\r\n hlng = polyCentroidCenter.x;\r\n \r\n var startHeading = 60;\r\n var endHeading = 120;\r\n \r\n for(var i = 20; i > 0;i--) {\r\n \r\n var hps = [];\r\n \r\n var crLat = hlat;\r\n var crLng = hlng + 2*i*wdppx;\r\n \r\n var cp = new google.maps.LatLng(hlat, hlng);\r\n \r\n var rm = diffLatLng2Meters(hlat, hlng, crLat, crLng);\r\n \r\n var shapePath = new IQLCircleSector().get(hlat, hlng, rm, startHeading, endHeading);\r\n \r\n shapePath.forEach(function(sp) {\r\n hps.push([sp.lng(), sp.lat()]);\t\t\r\n });\r\n \r\n allPoints.push(hps);\r\n \r\n var notInsideCount = 0;\r\n hps.forEach(function(pt,ptIndex) {\r\n if (!google.maps.geometry.poly.containsLocation(new google.maps.LatLng(parseFloat(pt[1]), parseFloat(pt[0])), locPolygons[0])) {\r\n notInsideCount++;\r\n }\r\n });\r\n \r\n if (notInsideCount == 0) { //all points inside outer poly\r\n \r\n if(allPoints.length > 2) {\r\n var holeIntersectCount = 0;\r\n for (var n = 1; n < allPoints.length - 1; n++) {\r\n for (var m = n + 1; m < allPoints.length; m++) {\r\n if (calcIntersection(allPoints[n], allPoints[m])) {\r\n holeIntersectCount++;\r\n }\r\n }\r\n }\r\n \r\n if(holeIntersectCount == 0) {\r\n nhid = drawCircleSectorHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers);\r\n break;\r\n } else {\r\n allPoints.pop();\r\n }\t\r\n } else {\r\n nhid = drawCircleSectorHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers);\r\n break;\r\n }\r\n } else {\r\n allPoints.pop();\r\n }\r\n }\r\n \r\n return nhid;\r\n \r\n }\t\r\n \r\n function addCircleSegmentHole(config, mapWidth, mapHeight, offsetX, offsetY, vmWidth, isMobile, controlMarkers) {\r\n var nhid;\r\n \r\n if(typeof wdppx == 'undefined' || typeof hdppx == 'undefined') { //this is the case on Select Field or Upload File\r\n var mapBounds = map.getBounds();\r\n \r\n if (mapBounds) {\r\n diffLat = Math.abs(mapBounds.getSouthWest().lat() - mapBounds.getNorthEast().lat());\r\n diffLng = Math.abs(mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng());\r\n wdppx = diffLng/mapWidth;\t\t\r\n hdppx = diffLat/mapHeight;\r\n }\r\n }\r\n\r\n allPoints = [];\r\n locPolygons.forEach(function(lp) {\t\t\r\n var sPath = lp.getPath();\r\n var points = [];\r\n for(var c = 0; c < sPath.length; c++) {\r\n points.push([sPath.getAt(c).lng(), sPath.getAt(c).lat()]);\r\n }\r\n if(sPath.getAt(0).lng() != sPath.getAt(sPath.length-1).lng() || sPath.getAt(0).lat() != sPath.getAt(sPath.length-1).lat()) {\r\n points.push([sPath.getAt(0).lng(), sPath.getAt(0).lat()]);\r\n }\t\r\n allPoints.push(points);\r\n });\t\r\n \r\n var polyCentroidCenter = get_polygon_centroid(allPoints);\r\n \r\n hlat = polyCentroidCenter.y;\r\n hlng = polyCentroidCenter.x;\r\n\r\n var startHeading = 0;\r\n var endHeading = 160;\r\n\r\n for(var i = 20; i > 0;i--) {\r\n\r\n var hps = [];\r\n \r\n var crLat = hlat;\r\n var crLng = hlng + 2*i*wdppx;\r\n \r\n var cp = new google.maps.LatLng(hlat, hlng);\r\n\r\n var rm = diffLatLng2Meters(hlat, hlng, crLat, crLng);\r\n\r\n var shapePath = new IQLCircleSector().get(hlat, hlng, rm, startHeading, endHeading);\r\n\r\n shapePath.forEach(function(sp) {\r\n hps.push([sp.lng(), sp.lat()]);\t\t\r\n });\r\n\r\n allPoints.push(hps);\r\n\r\n var notInsideCount = 0;\r\n hps.forEach(function(pt,ptIndex) {\r\n if (!google.maps.geometry.poly.containsLocation(new google.maps.LatLng(parseFloat(pt[1]), parseFloat(pt[0])), locPolygons[0])) {\r\n notInsideCount++;\r\n }\r\n });\r\n\r\n if (notInsideCount == 0) { //all points inside outer poly\r\n\r\n if(allPoints.length > 2) {\r\n var holeIntersectCount = 0;\r\n for (var n = 1; n < allPoints.length - 1; n++) {\r\n for (var m = n + 1; m < allPoints.length; m++) {\r\n if (calcIntersection(allPoints[n], allPoints[m])) {\r\n holeIntersectCount++;\r\n }\r\n }\r\n }\r\n \r\n if(holeIntersectCount == 0) {\r\n nhid = drawCircleSegmentHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers);\r\n break;\r\n } else {\r\n allPoints.pop();\r\n }\t\r\n } else {\r\n nhid = drawCircleSegmentHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers);\r\n break;\r\n }\r\n } else {\r\n allPoints.pop();\r\n }\r\n }\r\n\r\n return nhid;\r\n\r\n }\t\r\n\r\n function drawCircleFullHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers) {\r\n\r\n var path = [];\r\n shapePath.forEach(function(sp) {\r\n path.push(new google.maps.LatLng(sp.lat(), sp.lng()));\t\t\r\n });\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: path,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10200,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: false,\r\n isPolygon: false,\r\n isCircle: true,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: true,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n currentCircleFull = new IQLCircleFull();\r\n currentCircleFull = currentCircleFull.edit(map, shape, currentCircleFull, cp, rm, isMobile, controlMarkers);\r\n \r\n var osBounds = new google.maps.LatLngBounds();\r\n var osPath = locPolygons[0].getPath();\r\n osPath.forEach(function(c,index) {\r\n osBounds.extend(c);\r\n });\t\r\n \r\n var mapPanned = false;\r\n \r\n var boundsChangedListener = google.maps.event.addListener(map, 'bounds_changed', function () {\r\n \r\n if(!mapPanned) {\r\n \r\n var psw = map.getProjection().fromLatLngToPoint(osBounds.getSouthWest());\r\n var pne = map.getProjection().fromLatLngToPoint(osBounds.getNorthEast());\r\n \r\n var zoom = map.getZoom();\r\n var scale = 1 << zoom;\r\n \r\n if((pne.x - psw.x)*scale >= vmWidth) {\r\n map.setZoom(zoom-1);\r\n }\r\n \r\n offsetCenter(osBounds.getCenter(), offsetX, offsetY);\r\n mapPanned = !mapPanned;\r\n }\t\r\n });\r\n mapListeners.push(boundsChangedListener);\r\n \r\n map.fitBounds(osBounds);\r\n \r\n return pid;\r\n \r\n }\r\n\r\n function drawCircleSectorHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers) {\r\n\r\n var path = [];\r\n shapePath.forEach(function(sp) {\r\n path.push(new google.maps.LatLng(sp.lat(), sp.lng()));\t\t\r\n });\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: path,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10200,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: false,\r\n isPolygon: false,\r\n isCircle: false,\r\n isCircleSector: true,\r\n isCircleSegment: false,\r\n isHole: true,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n currentCircleSector = new IQLCircleSector();\r\n \r\n currentCircleSector = currentCircleSector.edit(map, shape, currentCircleSector, cp, rm, isMobile, controlMarkers);\r\n \r\n var osBounds = new google.maps.LatLngBounds();\r\n var osPath = locPolygons[0].getPath();\r\n osPath.forEach(function(c,index) {\r\n osBounds.extend(c);\r\n });\t\r\n \r\n var mapPanned = false;\r\n \r\n var boundsChangedListener = google.maps.event.addListener(map, 'bounds_changed', function () {\r\n \r\n //console.log('CircleSectorHole, map bounds changed');\r\n \r\n if(!mapPanned) {\r\n \r\n var psw = map.getProjection().fromLatLngToPoint(osBounds.getSouthWest());\r\n var pne = map.getProjection().fromLatLngToPoint(osBounds.getNorthEast());\r\n \r\n var zoom = map.getZoom();\r\n var scale = 1 << zoom;\r\n \r\n if((pne.x - psw.x)*scale >= vmWidth) {\r\n map.setZoom(zoom-1);\r\n }\r\n \r\n offsetCenter(osBounds.getCenter(), offsetX, offsetY);\r\n mapPanned = !mapPanned;\r\n }\t\r\n });\r\n mapListeners.push(boundsChangedListener);\r\n \r\n map.fitBounds(osBounds);\r\n \r\n return pid;\r\n \r\n }\r\n \r\n function drawCircleSegmentHole(config, offsetX, offsetY, vmWidth, shapePath, cp, rm, isMobile, controlMarkers) {\r\n\r\n var path = [];\r\n shapePath.forEach(function(sp) {\r\n path.push(new google.maps.LatLng(sp.lat(), sp.lng()));\t\t\r\n });\r\n \r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n \r\n var shape = new google.maps.Polygon({\r\n map: map,\r\n path: path,\r\n id: pid.toString(),\r\n content: \"\",\r\n strokeColor: config.strokeColor,\r\n strokeOpacity: config.strokeOpacity,\r\n strokeWeight: config.strokeWeight,\r\n fillColor: config.fillColor,\r\n fillOpacity: config.fillOpacity,\r\n zIndex: 10200,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: false,\r\n isPolygon: false,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: true,\r\n isHole: true,\r\n latitude: 0,\r\n longitude: 0,\r\n poly: 0,\r\n area: 0,\r\n perimeter: 0\r\n });\r\n \r\n locPolygons.push(shape);\r\n currentCircleSegment = new IQLCircleSegment();\r\n \r\n currentCircleSegment = currentCircleSegment.edit(map, shape, currentCircleSegment, cp, rm, isMobile, controlMarkers);\r\n \r\n var osBounds = new google.maps.LatLngBounds();\r\n var osPath = locPolygons[0].getPath();\r\n osPath.forEach(function(c,index) {\r\n osBounds.extend(c);\r\n });\t\r\n \r\n var mapPanned = false;\r\n \r\n var boundsChangedListener = google.maps.event.addListener(map, 'bounds_changed', function () {\t\r\n \r\n if(!mapPanned) {\r\n \r\n var psw = map.getProjection().fromLatLngToPoint(osBounds.getSouthWest());\r\n var pne = map.getProjection().fromLatLngToPoint(osBounds.getNorthEast());\r\n \r\n var zoom = map.getZoom();\r\n var scale = 1 << zoom;\r\n \r\n if((pne.x - psw.x)*scale >= vmWidth) {\r\n map.setZoom(zoom-1);\r\n }\r\n \r\n offsetCenter(osBounds.getCenter(), offsetX, offsetY);\r\n mapPanned = !mapPanned;\r\n }\t\r\n });\r\n mapListeners.push(boundsChangedListener);\r\n \r\n map.fitBounds(osBounds);\r\n \r\n return pid;\r\n \r\n }\r\n \r\n function offsetCenter(latlng, offsetX, offsetY) {\r\n\r\n var zoom = map.getZoom();\r\n var scale = 1 << zoom;\r\n var worldCoordinateCenter = map.getProjection().fromLatLngToPoint(latlng);\r\n var pixelOffset = new google.maps.Point((offsetX/scale) || 0,(offsetY/scale) || 0);\r\n \r\n var worldCoordinateNewCenter = new google.maps.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n \r\n var newCenter = map.getProjection().fromPointToLatLng(worldCoordinateNewCenter);\r\n \r\n map.setCenter(newCenter);\r\n \r\n }\r\n\r\n _this.RenderRegionFarms = function (locationsJson, icon) {\r\n if(icon){\r\n AdvancedMarker(locationsJson, icon, 'farm');\r\n } \r\n }\t\r\n\r\n _this.TriggerField_ChangeEvent = function () {\r\n var area = 0;\r\n var perimeter = 0;\r\n var path = '';\r\n var latitude = 0;\r\n var longitude = 0;\r\n var bounds = new google.maps.LatLngBounds();\r\n var isValid = \"\";\r\n var polyPath = [];\r\n \r\n locPolygons.forEach(function (polygon, index) {\r\n var poly;\r\n poly = polygon.getPath();\r\n \r\n ({ perimeter, area, path } = fieldArea_calculate(index, poly, bounds, perimeter, area, path));\r\n polyPath.push({path: path.split(',')[index], isHole: polygon.isHole});\r\n });\r\n\r\n path = path.substr(0, path.length - 1);\r\n if (path !== \"\") {\r\n console.log('Checking field overlaps...');\r\n if (!_this.checkForBackgroundFieldOverlaps()) {\r\n console.log('Overlap detected - setting error message');\r\n isValid = \"Error: Field overlaps with an existing field\";\r\n }\r\n }\r\n \r\n area = -area;\r\n latitude = parseFloat(bounds.getCenter().lat());\r\n longitude = parseFloat(bounds.getCenter().lng());\r\n \r\n return new IQLFieldGeoLocation(path, area, perimeter, latitude, longitude, isValid);\r\n }\r\n\r\n function fieldArea_calculate(index, poly, bounds, perimeter, area, path) {\r\n var mapCoords = [];\r\n var i;\r\n \r\n if (index === 0) {\r\n \r\n for (i = 0; i < poly.getLength(); i++) {\r\n mapCoords.push(poly.getAt(i));\r\n bounds.extend(poly.getAt(i));\r\n if (i < poly.getLength() - 1) {\r\n perimeter += google.maps.geometry.spherical.computeDistanceBetween(poly.getAt(i), poly.getAt(i + 1));\r\n }\r\n }\r\n \r\n if (mapCoords[0].lat() != mapCoords[mapCoords.length - 1].lat() && mapCoords[0].lng() != mapCoords[mapCoords.length - 1].lng()) {\r\n mapCoords.push(mapCoords[0]);\r\n }\r\n \r\n if (google.maps.geometry.spherical.computeSignedArea(mapCoords) > 0) {\r\n mapCoords.reverse();\r\n }\r\n \r\n area += google.maps.geometry.spherical.computeSignedArea(mapCoords);\r\n path = google.maps.geometry.encoding.encodePath(mapCoords) + ',';\r\n \r\n } else {\r\n \r\n for (i = 0; i < poly.getLength(); i++) {\r\n mapCoords.push(poly.getAt(i));\r\n bounds.extend(poly.getAt(i));\r\n if (i < poly.getLength() - 1) {\r\n perimeter += google.maps.geometry.spherical.computeDistanceBetween(poly.getAt(i), poly.getAt(i + 1));\r\n }\r\n }\r\n \r\n area += google.maps.geometry.spherical.computeSignedArea(mapCoords);\r\n path += google.maps.geometry.encoding.encodePath(mapCoords) + ',';\r\n \r\n }\r\n return { perimeter, area, path };\r\n }\r\n\r\n _this.DrawField_AttachEvents = function (eHandlers) {\r\n\r\n locPolygons.forEach(function (polygon) {\r\n \r\n var moverListener = google.maps.event.addListener(polygon, 'mouseover', function () {\r\n eHandlers[\"JS_ShapeOnMouseIn\"](this.id);\r\n });\r\n polygonListeners.push(moverListener);\r\n \r\n var moutListener = google.maps.event.addListener(polygon, 'mouseout', function () {\r\n eHandlers[\"JS_ShapeOnMouseOut\"](this.id);\r\n });\r\n polygonListeners.push(moutListener);\r\n \r\n var mclListener = google.maps.event.addListener(polygon, 'click', function () {\r\n eHandlers[\"ShapeSelect\"](this.id);\r\n });\r\n polygonListeners.push(mclListener);\r\n });\r\n \r\n }\r\n\r\n _this.PolygonCustomEdit_Edit = function (ShapeId, isMobile) {\r\n var polygonCE = locPolygons.find(p => p.id == ShapeId);\r\n if (polygonCE) {\r\n \r\n var pcePath = polygonCE.getPath(); \r\n if(pcePath.getAt(0).lat() == pcePath.getAt(pcePath.getLength()-1).lat() && pcePath.getAt(0).lng() == pcePath.getAt(pcePath.getLength()-1).lng()) {\r\n pcePath.pop();\r\n }\r\n \r\n polygonCE.setPath(pcePath);\r\n polygonCE.setMap(null);\r\n currentPolygonCustomEdit = new IQLPolygonCustomEdit().edit(map, polygonCE, currentPolygonCustomEdit, isMobile);\r\n }\r\n }\r\n\r\n _this.CircleSector_Edit = function (ShapeId, isMobile) {\r\n var circleSec = locPolygons.find(p => p.id == ShapeId);\r\n \r\n if (circleSec) {\r\n // Delete the original shape\r\n //_this.Shape_Delete(ShapeId);\r\n \r\n // Calculate center point from the polygon's bounds\r\n var bounds = new google.maps.LatLngBounds();\r\n circleSec.getPath().forEach(point => bounds.extend(point));\r\n var centerPoint = bounds.getCenter();\r\n\r\n // Calculate radius as distance from center to first point\r\n var initialRadius = google.maps.geometry.spherical.computeDistanceBetween(\r\n centerPoint,\r\n circleSec.getPath().getAt(0)\r\n );\r\n\r\n currentCircleSector = new IQLCircleSector().edit(\r\n map, \r\n circleSec, \r\n currentCircleSector, \r\n centerPoint,\r\n initialRadius,\r\n isMobile, \r\n controlMarkers\r\n );\r\n } \r\n }\r\n\r\n \r\n _this.CircleFull_Edit = function (ShapeId, isMobile) {\r\n var circleFull = locPolygons.find(p => p.id == ShapeId);\r\n \r\n if (circleFull) {\r\n \r\n var bounds = new google.maps.LatLngBounds();\r\n circleFull.getPath().forEach(point => bounds.extend(point));\r\n var centerPoint = bounds.getCenter();\r\n \r\n var initialRadius = google.maps.geometry.spherical.computeDistanceBetween(\r\n centerPoint,\r\n circleFull.getPath().getAt(0)\r\n );\r\n \r\n currentCircleFull = new IQLCircleFull().edit(\r\n map, \r\n circleFull, \r\n currentCircleFull, \r\n centerPoint,\r\n initialRadius,\r\n isMobile, \r\n controlMarkers\r\n );\r\n } \r\n }\r\n\r\n _this.CircleSegment_Edit = function (ShapeId, isMobile) {\r\n var circleSeg = locPolygons.find(p => p.id == ShapeId);\r\n\r\n if (circleSeg) {\r\n // Delete the original shape\r\n _this.Shape_Delete(ShapeId);\r\n \r\n // Calculate center point from the polygon's bounds\r\n var bounds = new google.maps.LatLngBounds();\r\n circleSeg.getPath().forEach(point => bounds.extend(point));\r\n var centerPoint = bounds.getCenter();\r\n\r\n // Calculate radius as distance from center to first point\r\n var initialRadius = google.maps.geometry.spherical.computeDistanceBetween(\r\n centerPoint,\r\n circleSeg.getPath().getAt(0)\r\n );\r\n\r\n currentCircleSegment = new IQLCircleSegment().edit(\r\n map, \r\n circleSeg, \r\n currentCircleSegment, \r\n centerPoint,\r\n initialRadius,\r\n isMobile, \r\n controlMarkers\r\n );\r\n } \r\n }\r\n\r\n _this.RenderRegions = function (locations, properties) {\r\n var polygon = null;\r\n var polyPath = null;\r\n var path = null;\r\n fpolies = [];\r\n\t\tvar rbounds = new google.maps.LatLngBounds();\r\n \r\n locations.forEach(function (location) {\r\n \r\n const hasId = typeof location.Id === \"string\"\r\n ? location.Id.length > 0\r\n : typeof location.Id === \"number\" && location.Id > 0;\r\n \r\n\t\t\tif (location && hasId) {\r\n var polies = [];\r\n if(!location.Poly.length > 0){\r\n polies = location.Coords;\r\n }\r\n else{\r\n polies = location.Poly.split(',');\r\n }\r\n \r\n\t\t\t\tvar paths = [];\r\n \r\n\t\t\t\tpolies.forEach(function (poly, pIndex) {\r\n\t\t\t\t\tif(!location.Poly.length > 0){\r\n\t\t\t\t\t\t//geoJson\r\n\t\t\t\t\t\tpath = [];\r\n\t\t\t\t\t\tpoly.forEach(function (v) {\r\n\t\t\t\t\t\t\tpath.push(new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0])));\r\n\t\t\t\t\t\t\trbounds.extend(new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0])));\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tpaths.push(path);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//encoded polyline\r\n\t\t\t\t\t\tpolyPath = polyline.decode(poly);\r\n\t\t\t\t\t\tpath = [];\r\n\t\t\t\t\t\tpolyPath.forEach(function (v) {\r\n\t\t\t\t\t\t\tpath.push(new google.maps.LatLng(parseFloat(v[0]), parseFloat(v[1])));\r\n\t\t\t\t\t\t\trbounds.extend(new google.maps.LatLng(parseFloat(v[0]), parseFloat(v[1])));\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tpaths.push(path);\r\n\t\t\t\t\t}\t\r\n\t\t\t\t});\r\n\r\n var polygonOptions = {\r\n ...properties.polygonOptions.unselected,\r\n paths: paths,\r\n id: location.Id,\r\n content: location.LocationName,\r\n map: map\r\n }\r\n\r\n\t\t\t\tpolygon = new google.maps.Polygon(polygonOptions);\r\n fpolies.push(polygon);\r\n }\r\n });\r\n\t\tmap.fitBounds(rbounds);\r\n regions_BindPolyEvents();\r\n }\r\n\r\n _this.Shape_Convert = function (ShapeId) {\r\n locPolygons.forEach(function (p) {\r\n if (p.id == ShapeId) {\r\n if (!p.isPolygon) {\r\n\r\n var shape;\r\n var pid = Date.now() + Math.floor(Math.random() * 100000);\r\n\r\n if (p.isCircle) {\r\n var shapePaths = circleToPolygon([p.getCenter().lng(), p.getCenter().lat()], p.getRadius(), 72, p.isHole);\r\n shape = new google.maps.Polygon({\r\n map: p.map,\r\n path: shapePaths,\r\n id: pid,\r\n content: p.content,\r\n strokeColor: p.strokeColor,\r\n strokeOpacity: p.strokeOpacity,\r\n strokeWeight: p.strokeWeight,\r\n fillColor: p.fillColor,\r\n fillOpacity: p.fillOpacity,\r\n zIndex: p.zIndex,\r\n clickable: p.clickable,\r\n editable: p.editable,\r\n draggable: p.draggable,\r\n visible: false,\r\n isPolygon: true,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: p.isHole,\r\n latitude: p.latitude,\r\n longitude: p.longitude,\r\n poly: p.poly,\r\n area: p.area,\r\n perimeter: p.perimeter\r\n });\r\n\r\n } else if (p.isCircleSector) {\r\n\r\n shape = new google.maps.Polygon({\r\n map: p.map,\r\n paths: p.paths,\r\n id: pid,\r\n content: p.content,\r\n strokeColor: p.strokeColor,\r\n strokeOpacity: p.strokeOpacity,\r\n strokeWeight: p.strokeWeight,\r\n fillColor: p.fillColor,\r\n fillOpacity: p.fillOpacity,\r\n zIndex: p.zIndex,\r\n clickable: p.clickable,\r\n editable: p.editable,\r\n draggable: p.draggable,\r\n visible: false,\r\n isPolygon: true,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: false,\r\n isHole: p.isHole,\r\n latitude: p.latitude,\r\n longitude: p.longitude,\r\n poly: p.poly,\r\n area: p.area,\r\n perimeter: p.perimeter\r\n });\r\n\r\n } else if (p.isCircleSegment) {\r\n\r\n shape = new google.maps.Polygon({\r\n map: p.map,\r\n paths: p.paths,\r\n id: pid,\r\n content: p.content,\r\n strokeColor: p.strokeColor,\r\n strokeOpacity: p.strokeOpacity,\r\n strokeWeight: p.strokeWeight,\r\n fillColor: p.fillColor,\r\n fillOpacity: p.fillOpacity,\r\n zIndex: p.zIndex,\r\n clickable: p.clickable,\r\n editable: p.editable,\r\n draggable: p.draggable,\r\n visible: false,\r\n isPolygon: true,\r\n isCircle: false,\r\n isCircleSector: false,\r\n isCircleSegment: true,\r\n isHole: p.isHole,\r\n latitude: p.latitude,\r\n longitude: p.longitude,\r\n poly: p.poly,\r\n area: p.area,\r\n perimeter: p.perimeter\r\n });\r\n\r\n }\r\n\r\n locPolygons.push(shape);\r\n\r\n return pid;\r\n }\r\n }\r\n });\r\n }\r\n\r\n _this.addToLocPolygons = function(shape) {\r\n locPolygons = [];\r\n locPolygons.push(shape);\r\n };\r\n\r\n _this.RenderBackgroundFields = function (locations, properties) {\r\n var mbounds = new google.maps.LatLngBounds();\r\n\r\n backgroundFields.forEach(field => {\r\n field.setMap(null);\r\n });\r\n backgroundFields = [];\r\n\r\n locations.forEach(function (location) {\r\n if (location && location.Poly && location.Poly.length > 0 && location.Id.length > 0) {\r\n var paths = location.Poly.map(poly => \r\n poly.map(v => new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0])))\r\n );\r\n paths[0].forEach(coord => mbounds.extend(coord));\r\n\r\n let content = `${location.FarmName} - ${location.LocationName}<br>${location.Area} ha${location.IsIrrigated ? ', irrigated' : ''}`;\r\n\r\n if (location.CropPlanted) {\r\n content += `<br>${location.CropPlanted}`;\r\n if (location.CultivarPlanted) {\r\n content += ` (${location.CultivarPlanted})`;\r\n }\r\n if (location.PlantingDate) {\r\n content += `<br>Planted: ${location.PlantingDate.replace(/-/g, \"/\")}`;\r\n }\r\n }\r\n \r\n var polygonOptions = {\r\n ...properties.polygonOptions.other,\r\n paths: paths,\r\n id: location.Id,\r\n content: content,\r\n map: map\r\n }\r\n\r\n var polygon = new google.maps.Polygon(polygonOptions);\r\n backgroundFields.push(polygon);\r\n }\r\n });\r\n\r\n map.fitBounds(mbounds);\r\n };\r\n\r\n _this.clearBackgroundFields = function() {\r\n backgroundFields.forEach(field => {\r\n field.setMap(null);\r\n });\r\n backgroundFields = [];\r\n };\r\n\r\n _this.checkForBackgroundFieldOverlaps = function() {\r\n console.log('Checking overlaps - Background Fields:', backgroundFields.length, 'Local Polygons:', locPolygons.length);\r\n \r\n if (!backgroundFields.length || !locPolygons.length) {\r\n console.log('No fields to check for overlap');\r\n return true;\r\n }\r\n\r\n for (const locPolygon of locPolygons) {\r\n for (const bgField of backgroundFields) {\r\n const locPath = locPolygon.getPath().getArray();\r\n const bgPath = bgField.getPath().getArray();\r\n\r\n for (const point of locPath) {\r\n if (google.maps.geometry.poly.containsLocation(point, bgField)) {\r\n console.log('Overlap detected: Local polygon point inside background field');\r\n return false;\r\n }\r\n }\r\n\r\n for (const point of bgPath) {\r\n if (google.maps.geometry.poly.containsLocation(point, locPolygon)) {\r\n console.log('Overlap detected: Background field point inside local polygon');\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n \r\n console.log('No overlaps detected');\r\n return true;\r\n };\r\n\r\n _this.NDVI_AddOverlay_DEA = function (locationJson, ndviTileURL, validGMTiles, eosLocationCropperRefId, eosViewId, spinnerURL, spinnerLat, spinnerLon, paletteId, colorMapTypeIdValue, isFullView, onComplete) {\r\n var locationParsed = locationJson;\r\n var location = locationParsed[0];\r\n var centerLat, centerLng;\r\n var polyBounds = new google.maps.LatLngBounds();\r\n \r\n if (location && location.Poly && location.Poly.length > 0 && location.Id > 0) {\r\n var centroid = get_polygon_centroid(location.Poly);\r\n centerLat = centroid.y;\r\n centerLng = centroid.x;\r\n \r\n location.Poly.forEach(function (poly, pIndex) {\r\n poly.forEach(function (v) {\r\n if(pIndex == 0) {\r\n polyBounds.extend(new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0])));\r\n } \r\n });\r\n });\r\n \r\n } else {\r\n centerLat = spinnerLat;\r\n centerLng = spinnerLon;\r\n } \r\n \r\n var vgmTilesIn = validGMTiles;\r\n \r\n var fullView = 0;\r\n if(isFullView) {\r\n fullView = 1;\r\n } \r\n \r\n var vgmTiles = vgmTilesIn;\r\n \r\n console.log(vgmTiles);\r\n \r\n var spinnerSet = false;\r\n \r\n if(!spinnerSet) {\r\n const spinnerImg = document.createElement('img');\r\n spinnerImg.src = spinnerURL;\r\n spinnerImg.width = 120;\r\n spinnerImg.height = 120;\r\n spinnerImg.style.transform = 'translate(0, 50%)';\r\n const position = new google.maps.LatLng(centerLat, centerLng);\r\n \r\n var spinnerMarker = new google.maps.marker.AdvancedMarkerElement({\r\n map: map,\r\n position: position,\r\n content: spinnerImg,\r\n });\r\n fmarkers.push(spinnerMarker);\r\n spinnerSet = true;\r\n } \r\n \r\n var tilesToLoad = [];\r\n \r\n if (map.getZoom() > 17) {\r\n var zoomOnAddOverlayChangedListener = google.maps.event.addListenerOnce(map, 'zoom_changed', function () {\r\n tilesToLoad = [];\r\n \r\n var vdiMapType = new google.maps.ImageMapType({\r\n getTileUrl: function (coord, zoom) {\r\n if(vgmTiles.indexOf(zoom+'|'+coord.x+'|'+coord.y) > -1) {\r\n const booleanFullView = fullView ? 'true' : 'false';\r\n console.log([ndviTileURL.replace(/{l}/,eosLocationCropperRefId).replace(/{v}/,eosViewId).replace(/{p}/,paletteId).replace(/{f}/,booleanFullView).replace(/{z}/,zoom).replace(/{x}/,coord.x).replace(/{y}/,coord.y)].join('')); \r\n tilesToLoad.push({eosLocationCropperRefId: eosLocationCropperRefId, eosViewId: eosViewId, z: zoom});\r\n return [ndviTileURL.replace(/{l}/,eosLocationCropperRefId).replace(/{v}/,eosViewId).replace(/{p}/,paletteId).replace(/{f}/,booleanFullView).replace(/{z}/,zoom).replace(/{x}/,coord.x).replace(/{y}/,coord.y)].join('');\r\n } \r\n },\r\n tileSize: new google.maps.Size(256, 256),\r\n minZoom: 13,\r\n maxZoom: 17\r\n });\r\n \r\n vdiMapType.addListener(\"tilesloaded\", function() {\r\n if(spinnerSet) {\r\n fmarkers.forEach(function(l,index) {\r\n //if(l.id == 'spinnerMarker') {\r\n l.setMap(null);\r\n fmarkers.splice(index, 1);\r\n spinnerSet = false;\r\n //}\r\n });\r\n }\r\n \r\n \r\n var fullView = false;\r\n if(tilesToLoad.length > 0) {\r\n if(tilesToLoad[0].fullView == 1) {\r\n fullView = true;\r\n } \r\n }\r\n \r\n if (typeof onComplete === 'function') {\r\n if(tilesToLoad.length > 0) {\r\n const currentZoom = map.getZoom();\r\n let zoomTileCount = 0;\r\n validGMTiles.forEach((tile) => {\r\n if(parseInt(tile.substring(0,tile.indexOf('|'))) == currentZoom ) {\r\n zoomTileCount++;\r\n } \r\n })\r\n if(tilesToLoad.length == zoomTileCount) {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'SUCCESS',\r\n message: 'NDVI overlay completed',\r\n code: 200,\r\n data: tilesToLoad[0]\r\n });\r\n } else {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'ERROR',\r\n message: 'Not all tiles loaded',\r\n code: 400,\r\n data: null\r\n });\r\n } \r\n } else {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'ERROR',\r\n message: 'No tiles loaded',\r\n code: 400,\r\n data: null\r\n });\r\n } \r\n }\r\n \r\n tilesToLoad = []; \r\n \r\n });\r\n \r\n map.overlayMapTypes.push(vdiMapType);\r\n });\r\n mapListeners.push(zoomOnAddOverlayChangedListener);\r\n \r\n map.setZoom(17);\r\n \r\n } else if (map.getZoom() < 13) {\r\n var zoomOnAddOverlayChangedListener = google.maps.event.addListenerOnce(map, 'zoom_changed', function () {\r\n \r\n tilesToLoad = [];\r\n \r\n var vdiMapType = new google.maps.ImageMapType({\r\n getTileUrl: function (coord, zoom) {\r\n if(vgmTiles.indexOf(zoom+'|'+coord.x+'|'+coord.y) > -1) {\r\n const booleanFullView = fullView ? 'true' : 'false';\r\n console.log([ndviTileURL.replace(/{l}/,eosLocationCropperRefId).replace(/{v}/,eosViewId).replace(/{p}/,paletteId).replace(/{f}/,booleanFullView).replace(/{z}/,zoom).replace(/{x}/,coord.x).replace(/{y}/,coord.y)].join('')); \r\n tilesToLoad.push({eosLocationCropperRefId: eosLocationCropperRefId, eosViewId: eosViewId, z: zoom});\r\n return [ndviTileURL.replace(/{l}/,eosLocationCropperRefId).replace(/{v}/,eosViewId).replace(/{p}/,paletteId).replace(/{f}/,booleanFullView).replace(/{z}/,zoom).replace(/{x}/,coord.x).replace(/{y}/,coord.y)].join('');\r\n } \r\n },\r\n tileSize: new google.maps.Size(256, 256),\r\n minZoom: 13,\r\n maxZoom: 17\r\n });\r\n \r\n vdiMapType.addListener(\"tilesloaded\", function() {\r\n if(spinnerSet) {\r\n fmarkers.forEach(function(l,index) {\r\n //if(l.id == 'spinnerMarker') {\r\n l.setMap(null);\r\n fmarkers.splice(index, 1);\r\n spinnerSet = false;\r\n //}\r\n });\r\n }\r\n \r\n var fullView = false;\r\n if(tilesToLoad.length > 0) {\r\n if(tilesToLoad[0].fullView == 1) {\r\n fullView = true;\r\n } \r\n }\r\n \r\n //if (typeof onComplete === 'function') {\r\n if(tilesToLoad.length > 0) {\r\n const currentZoom = map.getZoom();\r\n let zoomTileCount = 0; \r\n validGMTiles.forEach((tile) => {\r\n if(parseInt(tile.substring(0,tile.indexOf('|'))) == currentZoom ) {\r\n zoomTileCount++;\r\n } \r\n })\r\n if(tilesToLoad.length == zoomTileCount) {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'SUCCESS',\r\n message: 'NDVI overlay completed',\r\n code: 200,\r\n data: tilesToLoad[0]\r\n });\r\n } else {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'ERROR',\r\n message: 'Not all tiles loaded',\r\n code: 400,\r\n data: null\r\n });\r\n } \r\n } else {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'ERROR',\r\n message: 'No tiles loaded',\r\n code: 400,\r\n data: null\r\n });\r\n } \r\n //}\r\n\r\n tilesToLoad = [];\t\t\r\n\r\n\t\t\t\t});\t\r\n\r\n\t\t\t\tmap.overlayMapTypes.push(vdiMapType);\r\n\t\t\t});\r\n\t\t\tmapListeners.push(zoomOnAddOverlayChangedListener);\r\n\t\t\r\n\t\t\tmap.setZoom(13);\r\n\r\n\t\t} else {\r\n\t\t\ttilesToLoad = [];\r\n\r\n\t\t\tvar vdiMapType = new google.maps.ImageMapType({\r\n\t\t\t\tgetTileUrl: function (coord, zoom) {\r\n\t\t\t\t\tif(vgmTiles.indexOf(zoom+'|'+coord.x+'|'+coord.y) > -1) {\r\n\t\t\t\t\t\tconst booleanFullView = fullView ? 'true' : 'false';\r\n\t\t\t\t\t\tconsole.log([ndviTileURL.replace(/{l}/,eosLocationCropperRefId).replace(/{v}/,eosViewId).replace(/{p}/,paletteId).replace(/{f}/,booleanFullView).replace(/{z}/,zoom).replace(/{x}/,coord.x).replace(/{y}/,coord.y)].join(''));\t\t\t\r\n\t\t\t\t\t\ttilesToLoad.push({eosLocationCropperRefId: eosLocationCropperRefId, eosViewId: eosViewId, z: zoom});\r\n\t\t\t\t\t\treturn [ndviTileURL.replace(/{l}/,eosLocationCropperRefId).replace(/{v}/,eosViewId).replace(/{p}/,paletteId).replace(/{f}/,booleanFullView).replace(/{z}/,zoom).replace(/{x}/,coord.x).replace(/{y}/,coord.y)].join('');\r\n\t\t\t\t\t}\t\r\n\t\t\t\t},\r\n\t\t\t\ttileSize: new google.maps.Size(256, 256),\r\n\t\t\t\tminZoom: 13,\r\n\t\t\t\tmaxZoom: 17\r\n\t\t\t});\r\n\r\n\t\t\tvdiMapType.addListener(\"tilesloaded\", function() {\r\n\t\t\t\tif(spinnerSet) {\r\n \r\n\t\t\t\t\tfmarkers.forEach(function(l,index) {\r\n\t\t\t\t\t\t\tl.setMap(null);\r\n\t\t\t\t\t\t\tfmarkers.splice(index, 1);\r\n\t\t\t\t\t\t\tspinnerSet = false;\r\n\t\t\t\t\t});\t\r\n\t\t\t\t}\r\n\r\n var fullView = false;\r\n if(tilesToLoad.length > 0) {\r\n if(tilesToLoad[0].fullView == 1) {\r\n fullView = true;\r\n } \r\n }\r\n\r\n if(tilesToLoad.length > 0) {\r\n const currentZoom = map.getZoom();\r\n let zoomTileCount = 0;\r\n validGMTiles.forEach((tile) => {\r\n if(parseInt(tile.substring(0,tile.indexOf('|'))) == currentZoom ) {\r\n zoomTileCount++;\r\n } \r\n })\r\n if(tilesToLoad.length == zoomTileCount) {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'SUCCESS',\r\n message: 'NDVI overlay completed',\r\n code: 200,\r\n data: tilesToLoad[0]\r\n });\r\n } else {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'ERROR',\r\n message: 'Not all tiles loaded',\r\n code: 400,\r\n data: null\r\n });\r\n } \r\n } else {\r\n eventHandlers[\"OverlayTilesLoaded\"]({\r\n type: 'ERROR',\r\n message: 'No tiles loaded',\r\n code: 400,\r\n data: null\r\n });\r\n } \r\n \r\n tilesToLoad = [];\r\n \r\n });\r\n \r\n map.overlayMapTypes.push(vdiMapType);\r\n } \r\n }\r\n \r\n _this.NDVI_RemoveOverlay = function () {\r\n map.overlayMapTypes.clear();\r\n }\r\n\r\n \r\n _this.NDVI_DrawLocation = function (locationJson, offsetX, offsetY, vMapWidth, showTooltip) {\r\n var locationParsed = locationJson;\r\n var location = locationParsed[0];\r\n var polygon = null;\r\n\t\tvar mapPanned = false;\r\n\t\r\n if (location && location.Poly && location.Poly.length > 0 && location.Id > 0) {\r\n\t\t\tvar paths = [];\r\n var polyBounds = new google.maps.LatLngBounds();\r\n\t\t\t\r\n \r\n location.Poly.forEach(function (poly, pIndex) {\r\n var path = [];\r\n\r\n poly.forEach(function (v) {\r\n path.push(new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0])));\r\n\t\t\t\t\tif(pIndex == 0) {\r\n\t\t\t\t\t\tpolyBounds.extend(new google.maps.LatLng(parseFloat(v[1]), parseFloat(v[0])));\r\n\t\t\t\t\t}\t\r\n });\r\n\t\t\t\tpaths.push(path);\r\n\t\t\t});\r\n\t\t\t\r\n polygon = new google.maps.Polygon({\r\n map: map,\r\n\t\t\t\tpaths: paths,\r\n fillColor: 'transparent'\r\n \r\n });\r\n\r\n\t\t\tvar boundsChangedListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function () {\r\n\t\t\t\tif(!mapPanned) {\r\n\t\t\t\t\r\n\t\t\t\t\tvar psw = map.getProjection().fromLatLngToPoint(polyBounds.getSouthWest());\r\n\t\t\t\t\tvar pne = map.getProjection().fromLatLngToPoint(polyBounds.getNorthEast());\r\n\r\n\t\t\t\t\tvar zoom = map.getZoom();\r\n\t\t\t\t\tvar scale = 1 << zoom;\r\n\r\n\t\t\t\t\tif((pne.x - psw.x)*scale >= vMapWidth) {\r\n\t\t\t\t\t\tmap.setZoom(zoom-1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\tif (map.getZoom() > 16) {\r\n\t\t\t\t\t\tmap.setZoom(16);\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\toffsetCenter(polyBounds.getCenter(), offsetX, offsetY);\r\n\t\t\t\t\tmapPanned = !mapPanned;\r\n\t\t\t\t}\t\r\n\t\t\t});\r\n\t\t\tmapListeners.push(boundsChangedListener);\r\n\t\t\t\r\n\t\t\tmap.fitBounds(polyBounds);\r\n\r\n\t\t\tif(showTooltip) {\t\r\n\r\n\t\t\t\tvar polygonMouseoverListener = google.maps.event.addListener(polygon, \"mouseover\", function(event) {\r\n\t\t\t\t\tinjectTooltip(event, polygon.content);\r\n\t\t\t\t});\r\n \r\n\t\t\t\tvar polygonMousemoveListener = google.maps.event.addListener(polygon, 'mousemove', function(event) {\r\n\t\t\t\t\tmoveTooltip(event);\r\n\t\t\t\t});\r\n \r\n\t\t\t\tvar polygonMouseoutListener = google.maps.event.addListener(polygon, 'mouseout', function(event) {\r\n\t\t\t\t\tdeleteTooltip(event);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tpolygonListeners.push(polygonMouseoverListener);\r\n\t\t\t\tpolygonListeners.push(polygonMousemoveListener);\r\n\t\t\t\tpolygonListeners.push(polygonMouseoutListener);\r\n\r\n\t\t\t}\t\r\n\r\n fpolies.push(polygon);\r\n }\r\n\r\n if (map.getZoom() >= 13) {\r\n polyLabels.forEach(function (pl) {\r\n pl.setMap(map);\r\n });\r\n } else {\r\n polyLabels.forEach(function (pl) {\r\n pl.setMap(null);\r\n });\r\n }\r\n\r\n var zoomChangedListener = google.maps.event.addListener(map, 'zoom_changed', function () {\r\n\r\n\t\t\tif (map.getZoom() >= 13) {\r\n polyLabels.forEach(function (pl, index) {\r\n pl.setMap(map);\r\n });\r\n } else {\r\n polyLabels.forEach(function (pl, index) {\r\n pl.setMap(null);\r\n });\r\n }\r\n });\r\n mapListeners.push(zoomChangedListener);\r\n }\r\n}\r\n}","export function createSvgIcon(options) {\r\n const { iconName = \"pinIcon\", fillColor = '#f1a81e', width = 30, height = 41, strokeColor = '#000000', strokeWidth = 1 } = options;\r\n const svgNamespace = \"http://www.w3.org/2000/svg\";\r\n\r\n const svgIcon = document.createElementNS(svgNamespace, \"svg\");\r\n svgIcon.setAttribute(\"viewBox\", \"0 0 57.64 83.57\");\r\n svgIcon.setAttribute(\"width\", width);\r\n svgIcon.setAttribute(\"height\", height);\r\n svgIcon.style.opacity = 0.8;\r\n svgIcon.style.zIndex = 11000;\r\n\r\n const defs = document.createElementNS(svgNamespace, \"defs\");\r\n\r\n const clipPath = document.createElementNS(svgNamespace, \"clipPath\");\r\n clipPath.setAttribute(\"id\", `clippath-${iconName}`);\r\n const rect = document.createElementNS(svgNamespace, \"rect\");\r\n rect.setAttribute(\"width\", \"57.64\");\r\n rect.setAttribute(\"height\", \"83.57\");\r\n defs.appendChild(clipPath);\r\n clipPath.appendChild(rect);\r\n\r\n const style = document.createElementNS(svgNamespace, \"style\");\r\n style.textContent = `\r\n .cls-1 { clip-path: url(#clippath-${iconName}); }\r\n .cls-2 { fill: none; stroke: ${strokeColor}; stroke-width: ${strokeWidth}; }\r\n .cls-3 { fill: ${fillColor}; }\r\n `;\r\n defs.appendChild(style);\r\n svgIcon.appendChild(defs);\r\n\r\n const g = document.createElementNS(svgNamespace, \"g\");\r\n g.setAttribute(\"class\", \"cls-1\");\r\n\r\n const pathData = {\r\n 'pinIcon': 'M16.01,31.23c-.07,7.22,5.73,12.51,11.98,12.86,3.84.22,7.17-1.04,9.9-3.73,2.36-2.32,3.64-5.2,3.77-8.49.31-7.8-5.87-13.21-12.29-13.47-7.66-.3-13.54,6.01-13.37,12.83M28.82.1c.43,0,.87-.03,1.3,0,.98.07,1.97.16,2.95.27,1.85.21,3.65.69,5.4,1.31,1.89.66,3.68,1.52,5.38,2.57,1.49.91,2.88,1.95,4.18,3.12,1.68,1.51,3.21,3.15,4.45,5.04.84,1.29,1.65,2.62,2.35,4,1.05,2.06,1.76,4.25,2.2,6.52.25,1.25.41,2.53.5,3.81.1,1.31.15,2.64.07,3.95-.15,2.38-.58,4.72-1.32,6.99-.64,1.97-1.49,3.87-2.54,5.67-1.07,1.83-2.08,3.7-3.13,5.54-.82,1.44-1.67,2.87-2.49,4.31-.8,1.39-1.58,2.78-2.37,4.17-.83,1.45-1.68,2.89-2.51,4.33-.68,1.18-1.34,2.37-2.02,3.55-1.3,2.26-2.61,4.52-3.91,6.79-1.02,1.77-2.02,3.55-3.04,5.32-.92,1.6-1.79,3.24-2.79,4.79-1.33,2.04-4.29,1.81-5.44-.18-1.33-2.3-2.67-4.6-3.99-6.91-1.42-2.46-2.82-4.93-4.23-7.39-1.18-2.06-2.36-4.12-3.54-6.18-1.36-2.37-2.74-4.73-4.1-7.1-1.29-2.25-2.57-4.5-3.83-6.76-1.21-2.17-2.46-4.32-3.6-6.53-1-1.93-1.66-4.01-2.09-6.14-.31-1.54-.58-3.09-.58-4.67,0-.48-.08-.96-.06-1.43.07-1.28.16-2.57.28-3.85.18-1.93.66-3.8,1.3-5.62.75-2.13,1.72-4.16,2.94-6.06,1.27-1.98,2.75-3.79,4.45-5.41,1.55-1.47,3.26-2.75,5.1-3.85,1.63-.98,3.36-1.77,5.14-2.42,1.61-.59,3.28-1.02,4.97-1.26,1.53-.22,3.09-.28,4.63-.41v.1'\r\n };\r\n\r\n const fillPath = document.createElementNS(svgNamespace, \"path\");\r\n fillPath.setAttribute(\"class\", \"cls-3\");\r\n fillPath.setAttribute(\"d\", pathData[iconName] || '');\r\n\r\n const outlinePath = document.createElementNS(svgNamespace, \"path\");\r\n outlinePath.setAttribute(\"class\", \"cls-2\");\r\n outlinePath.setAttribute(\"d\", pathData[iconName] || '');\r\n\r\n g.appendChild(fillPath); \r\n g.appendChild(outlinePath);\r\n\r\n svgIcon.appendChild(g);\r\n\r\n return svgIcon;\r\n}","import { useRef, useEffect, useCallback } from 'react';\r\nimport { MapOverlayManager } from \"../js/mapEncapsulation/mapOverlayManager\";\r\nimport { ModeType, Properties } from '../interfaces/Mode';\r\nimport { LocationData } from '../interfaces/Data/LocationData';\r\nimport { CustomMapOptions } from '../interfaces/CustomMapOptions';\r\n\r\n\r\ninterface UseMapManagerProps {\r\n mapInstance: google.maps.Map | null;\r\n}\r\nexport const useMapManager = ({\r\n mapInstance,\r\n}: UseMapManagerProps) => {\r\n const mapOverlayManagerRef = useRef<MapOverlayManager | null>(null);\r\n\r\n useEffect(() => {\r\n if (mapInstance) {\r\n const mapOverlayManager = new MapOverlayManager(mapInstance);\r\n mapOverlayManagerRef.current = mapOverlayManager;\r\n //handleMode();\r\n return () => {\r\n if (mapOverlayManagerRef.current) {\r\n mapOverlayManagerRef.current.map_clear();\r\n }\r\n };\r\n }\r\n }, [mapInstance]);\r\n \r\n/*\r\n const handleMode = useCallback(() => {\r\n if (!mapOverlayManagerRef.current || !mapInstance){\r\n console.log('No map instance found.');\r\n return;\r\n }\r\n\r\n }, [mapInstance]);\r\n\r\n useEffect(() => {\r\n if (mapOverlayManagerRef.current) {\r\n handleMode();\r\n }\r\n }, [handleMode]);\r\n*/\r\n\r\n return {\r\n mapManager: mapOverlayManagerRef.current\r\n };\r\n};\r\n","import React, { memo, useState, useCallback, useEffect } from \"react\";\r\nimport { GoogleMap, useJsApiLoader, Libraries } from \"@react-google-maps/api\";\r\nimport { useMapManager } from \"../hooks/useMapManager\";\r\n\r\nconst containerStyle = {\r\n width: \"960px\",\r\n height: \"480px\",\r\n}\r\n\r\nconst center = {\r\n lat: -25.7652061,\r\n lng: 28.2710333,\r\n}\r\n\r\nexport type jpMapType = {\r\n isMapInitialized: boolean;\r\n mapObject: google.maps.Map;\r\n mapManager: any;\r\n}\r\n\r\n\r\ninterface JPMapComponentProps {\r\n gmAPIkey: string,\r\n jpMap: (jpMap: jpMapType) => void, \r\n};\r\n\r\nconst libraries: Libraries = ['places', 'marker', 'geometry'];\r\n\r\nconst mapOptions = {\r\n disableDefaultUI: true,\r\n mapId: 'JP_DEMO_MAP', //needed for AdvancedMarker map capability \r\n mapTypeId: 'hybrid', //this causes the reloading of tiles if const mapOptions is inside the component\r\n mapTypeControl: true,\r\n zoomControl: true,\r\n\r\n};\r\n\r\n\r\nconst JPMapComponent: React.FC<JPMapComponentProps> = ({ gmAPIkey, jpMap }) => {\r\n/*\r\n const mapOptions = {\r\n mapId: 'JP_DEMO_MAP', //needed for AdvancedMarker map capability \r\n mapTypeId: 'hybrid', //this causes the reloading of tiles if const mapOptions is inside the component\r\n };\r\n*/\r\n const [mapInstance, setMapInstance] = useState<google.maps.Map | null>(null);\r\n \r\n const {\r\n mapManager,\r\n } = useMapManager({\r\n mapInstance,\r\n });\r\n\r\n const { isLoaded } = useJsApiLoader({\r\n id: \"google-map-script\",\r\n googleMapsApiKey: gmAPIkey,//\"AIzaSyAyy8BzMlKKQCPsQRgvhMW4MxfjGuIEWUc\",\r\n libraries: libraries\r\n })\r\n \r\n const onLoad = useCallback(function callback(map: any) {\r\n //setMap(map);\r\n setMapInstance(map);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if(mapInstance !== null) {\r\n //console.log(map);\r\n jpMap({ isMapInitialized: true, mapObject: mapInstance, mapManager: mapManager});\r\n //isMapInitialized(true);\r\n //mapObject(map); \r\n }\r\n }, [mapInstance, jpMap]);\r\n\r\n const onUnmount = useCallback(function callback(map: any) {\r\n setMapInstance(null);\r\n }, []);\r\n\r\n \r\n return isLoaded ? (\r\n <GoogleMap\r\n mapContainerStyle={containerStyle}\r\n center={center}\r\n zoom={5}\r\n options={mapOptions}\r\n onLoad={onLoad}\r\n onUnmount={onUnmount}\r\n >\r\n {/* Child components, such as markers, info windows, etc. */}\r\n <></>\r\n </GoogleMap>\r\n ) : (\r\n <></>\r\n )\r\n};\r\n\r\nexport default memo(JPMapComponent);"],"names":["process","env","NODE_ENV","React","require$$0","REACT_ELEMENT_TYPE","Symbol","for","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","iterator","ReactSharedInternals","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","error","format","_len2","arguments","length","args","Array","_key2","level","ReactDebugCurrentFrame","stack","getStackAddendum","concat","argsWithFormat","map","item","String","unshift","Function","prototype","apply","call","console","printWarning","REACT_MODULE_REFERENCE","getContextName","type","displayName","getComponentNameFromType","tag","name","$$typeof","_context","outerType","innerType","wrapperName","functionName","getWrappedName","render","outerName","lazyComponent","payload","_payload","init","_init","x","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","assign","Object","disabledDepth","disabledLog","__reactDisabledLog","prefix","ReactCurrentDispatcher","describeBuiltInComponentFrame","source","ownerFn","undefined","Error","match","trim","componentFrameCache","reentry","PossiblyWeakMap","WeakMap","Map","describeNativeComponentFrame","fn","construct","control","frame","get","previousDispatcher","previousPrepareStackTrace","prepareStackTrace","current","log","info","warn","group","groupCollapsed","groupEnd","props","configurable","enumerable","value","writable","defineProperties","disableLogs","Fake","defineProperty","set","Reflect","sample","sampleLines","split","controlLines","s","c","_frame","replace","includes","reenableLogs","syntheticFrame","describeUnknownElementTypeFrameInDEV","isReactComponent","hasOwnProperty","loggedTypeFailures","setCurrentlyValidatingElement","element","owner","_owner","_source","setExtraStackFrame","isArrayImpl","isArray","a","testStringCoercion","checkKeyStringCoercion","e","willCoercionThrow","toStringTag","constructor","typeName","specialPropKeyWarningShown","specialPropRefWarningShown","didWarnAboutStringRefs","ReactCurrentOwner","RESERVED_PROPS","key","ref","__self","__source","jsxDEV","config","maybeKey","self","propName","getter","getOwnPropertyDescriptor","isReactWarning","hasValidKey","hasValidRef","stateNode","componentName","warnIfStringRefCannotBeAutoConverted","defaultProps","warnAboutAccessingKey","defineKeyPropWarningGetter","warnAboutAccessingRef","defineRefPropWarningGetter","_store","freeze","ReactElement","propTypesMisspellWarningShown","ReactCurrentOwner$1","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement$1","isValidElement","object","getDeclarationErrorAddendum","ownerHasKeyUseWarning","validateExplicitKey","parentType","validated","currentComponentErrorInfo","parentName","getCurrentComponentErrorInfo","childOwner","validateChildKeys","node","i","child","iteratorFn","maybeIterable","maybeIterator","getIteratorFn","entries","step","next","done","validatePropTypes","propTypes","typeSpecs","values","location","has","bind","typeSpecName","error$1","err","ex","message","checkPropTypes","PropTypes","getDefaultProps","isReactClassApproved","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","getModuleId","isValidElementType","keys","typeString","children","filter","k","beforeExample","join","fragment","validateFragmentProps","jsx","jsxs","reactJsxRuntime_development","Fragment","jsxRuntimeModule","exports","f","l","m","n","p","q","g","b","d","h","reactJsxRuntime_production_min","require$$1","extendStatics","setPrototypeOf","__proto__","__extends","TypeError","__","this","create","__assign","t","__rest$1","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter$1","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","rejected","result","then","__generator","body","y","_","label","sent","trys","ops","verb","throw","return","v","op","pop","push","getDefaultExportFromCjs","__esModule","invariant$1","condition","argIndex","framesToPop","MapContext","createContext","applyUpdaterToNextProps","updaterMap","prevProps","nextProps","instance","obj","nextValue","forEach","registerEvents","eventMap","acc","registeredList","googleEventName","onEventName","google","maps","event","addListener","reduce","newAcc","unregisterEvent","registered","removeListener","unregisterEvents","events","applyUpdatersToPropsAndRegisterEvents","_a","registeredEvents","eventMap$i","onDblClick","onDragEnd","onDragStart","onMapTypeIdChanged","onMouseMove","onMouseOut","onMouseOver","onMouseDown","onMouseUp","onRightClick","onTilesLoaded","onBoundsChanged","onCenterChanged","onClick","onDrag","onHeadingChanged","onIdle","onProjectionChanged","onResize","onTiltChanged","onZoomChanged","updaterMap$i","extraMapTypes","extra","it","mapTypes","center","setCenter","clickableIcons","clickable","setClickableIcons","heading","setHeading","mapTypeId","setMapTypeId","options","setOptions","streetView","setStreetView","tilt","setTilt","zoom","setZoom","memo","id","mapContainerStyle","mapContainerClassName","onLoad","onUnmount","_b","useState","setMap","useRef","_c","centerChangedListener","setCenterChangedListener","_d","dblclickListener","setDblclickListener","_e","dragendListener","setDragendListener","_f","dragstartListener","setDragstartListener","_g","mousedownListener","setMousedownListener","_h","mousemoveListener","setMousemoveListener","_j","mouseoutListener","setMouseoutListener","_k","mouseoverListener","setMouseoverListener","_l","mouseupListener","setMouseupListener","_m","rightclickListener","setRightclickListener","_o","clickListener","setClickListener","_p","dragListener","setDragListener","useEffect","style","className","Provider","GoogleMap","_super","_this","state","mapRef","getInstance","panTo","latLng","setMapCallback","getRef","componentDidMount","setState","componentDidUpdate","componentWillUnmount","PureComponent","isBrowser","document","injectScript","url","nonce","existingScript","getElementById","windowWithGoogleMap","window","dataStateAttribute","getAttribute","src","originalInitMap_1","initMap","originalErrorCallback_1","onerror","remove","script","createElement","async","setAttribute","head","appendChild","catch","isGoogleFontStyle","href","tagName","toLowerCase","styleSheet","cssText","innerHTML","preventGoogleFonts","getElementsByTagName","trueInsertBefore_1","insertBefore","newElement","referenceElement","trueAppend_1","textNode","makeLoadScriptUrl","googleMapsApiKey","googleMapsClientId","version","language","region","libraries","channel","mapIds","authReferrerPolicy","params","sort","cleaningUp","DefaultLoadingElement","previouslyLoadedUrl","defaultLoadScriptProps","LoadScript","check","createRef","loaded","cleanupCallback","isCleaningUp","promiseCallback","timer_1","setInterval","clearInterval","cleanup","parentNode","removeChild","slice","link","innerText","preventGoogleFontsLoading","onError","setTimeout","loadingElement","defaultLoadingElement","__awaiter","isMounted","isLoaded","setLoaded","loadError","setLoadError","setLoadedIfMounted","prevLibraries","useLoadScript","fastDeepEqual$1","equal","RegExp","flags","valueOf","toString","DEFAULT_ID","LoaderStatus","Loader","apiKey","client","retries","callbacks","loading","errors","JSON","stringify","status","FAILURE","SUCCESS","LOADING","INITIALIZED","failed","createUrl","deleteScript","load","loadPromise","loadCallback","importLibrary","execute","setScript","callback","r","Set","URLSearchParams","u","querySelector","append","add","libraryPromises","library","all","ErrorEvent","loadErrorCallback","reset","onerrorEvent","resetIfRetryingFailed","delay","Math","pow","cb","defaultLibraries","eventMap$h","updaterMap$h","useContext","setInstance","trafficLayer","TrafficLayer","setTrafficLayerCallback","context","contextType","bicyclingLayer","BicyclingLayer","setBicyclingLayerCallback","transitLayer","TransitLayer","setTransitLayerCallback","eventMap$g","onCircleComplete","onMarkerComplete","onOverlayComplete","onPolygonComplete","onPolylineComplete","onRectangleComplete","updaterMap$g","drawingMode","setDrawingMode","circlecompleteListener","setCircleCompleteListener","markercompleteListener","setMarkerCompleteListener","overlaycompleteListener","setOverlayCompleteListener","polygoncompleteListener","setPolygonCompleteListener","polylinecompleteListener","setPolylineCompleteListener","rectanglecompleteListener","setRectangleCompleteListener","drawing","drawingManager","DrawingManager","setDrawingManagerCallback","eventMap$f","onAnimationChanged","onClickableChanged","onCursorChanged","onDraggableChanged","onFlatChanged","onIconChanged","onPositionChanged","onShapeChanged","onTitleChanged","onVisibleChanged","onZindexChanged","updaterMap$f","animation","setAnimation","setClickable","cursor","setCursor","draggable","setDraggable","icon","setIcon","setLabel","opacity","setOpacity","position","setPosition","shape","setShape","title","setTitle","visible","setVisible","zIndex","setZIndex","defaultOptions$5","clusterer","noClustererRedraw","clickableChangedListener","setClickableChangedListener","cursorChangedListener","setCursorChangedListener","_q","animationChangedListener","setAnimationChangedListener","_r","draggableChangedListener","setDraggableChangedListener","_s","flatChangedListener","setFlatChangedListener","_t","iconChangedListener","setIconChangedListener","_u","positionChangedListener","setPositionChangedListener","_v","shapeChangedListener","setShapeChangedListener","_w","titleChangedListener","setTitleChangedListener","_x","visibleChangedListener","setVisibleChangedListener","_y","zIndexChangedListener","setZindexChangedListener","markerOptions","marker","Marker","addMarker","removeMarker","chx","useMemo","Children","elementChild","cloneElement","anchor","ClusterIcon","cluster","styles","getClusterer","extend","OverlayView","clusterClassName","getClusterClass","div","sums","boundsChangedListener","height","width","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","cMouseDownInCluster","cDraggingMapByCluster","timeOut","getMap","onAdd","onRemove","draw","hide","show","useStyle","getPosFromLatLng","markerClusterer_1","trigger","getZoomOnClick","maxZoom_1","getMaxZoom","bounds_1","getBounds","fitBounds","getZoom","cancelBubble","stopPropagation","getPanes","overlayMouseTarget","addEventListener","removeEventListener","clearTimeout","pos","top","left","display","divTitle","getTitle","bp","spriteH","parseInt","spriteV","img","alt","enableRetinaIcons","clip","textElm","text","html","getStyles","min","max","index","latlng","getProjection","fromLatLngToDivPixel","Cluster$1","Cluster","markerClusterer","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","bounds","clusterIcon","getSize","getMarkers","getCenter","isMarkerInClusterBounds","calculateBounds","updateIcon","isMarkerAlreadyAdded","LatLngBounds","_i","markers_1","getPosition","length_1","LatLng","lat","lng","isAdded","mCount","maxZoom","contains","getExtendedBounds","getCalculator","CALCULATOR","numStyles","count","numberOfDigits","IMAGE_SIZES","Clusterer","optMarkers","optOptions","setMinimumClusterSize","getEnableRetinaIcons","setEnableRetinaIcons","addToClosestCluster","getImageExtension","setImageExtension","setAverageCenter","getTotalClusters","fitMapToMarkers","getIgnoreHidden","setIgnoreHidden","setClusterClass","getTotalMarkers","setZoomOnClick","getBatchSizeIE","setBatchSizeIE","createClusters","getImageSizes","setImageSizes","setCalculator","removeMarkers","resetViewport","getImagePath","setImagePath","pushMarkerTo","clearMarkers","setupStyles","setGridSize","getClusters","setMaxZoom","addMarkers","setStyles","repaint","redraw","clusters","listeners","activeMap","ready","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","timerRefStatic","listener","fromContainerPixelToLatLng","fromDivPixelToLatLng","fromLatLngToContainerPixel","getVisibleRegion","getWorldWidth","bindTo","notify","setValues","unbind","unbindAll","optNoDraw","getDraggable","removeMarker_","splice","removed","markers_2","oldClusters","oldClusters_1","projection","trPix","getNorthEast","blPix","getSouthWest","point1","point2","optHide","distanceBetweenPoints","p1","p2","dLat","PI","dLon","sin","cos","atan2","sqrt","isMarkerInBounds","distance","clusterToAddTo","iFirst","mapBounds","extendedMapBounds","iLast","getVisible","obj1","obj2","property","prop","eventMap$e","onClusteringBegin","onClusteringEnd","updaterMap$e","defaultOptions$4","cancelHandler","clusteringBeginListener","setClusteringBeginListener","clusteringEndListener","setClusteringEndListener","clustererOptions","ClustererComponent","setClustererCallback","InfoBox","getCloseClickHandler","closeClickHandler","createInfoBoxDiv","addClickHandler","getCloseBoxImg","getBoxWidths","setBoxStyle","setContent","getContent","getZIndex","panBox","close","open","content","disableAutoPan","maxWidth","pixelOffset","Size","boxClass","boxStyle","closeBoxMargin","closeBoxURL","infoBoxClearance","isHidden","alignBottom","pane","enableEventPropagation","closeListener","moveListener","mapListener","contextListener","eventListeners","fixedWidthSet","panes","offsetWidth","bw","right","events_1","event_1","returnValue","preventDefault","firstChild","disablePan","xOffset","yOffset","mapDiv","getDiv","mapWidth","mapHeight","offsetHeight","iwOffsetX","iwOffsetY","iwWidth","iwHeight","padX","padY","pixPosition","panBy","webkitTransform","parseFloat","msFilter","visibility","overflow","bottom","defaultView","ownerDocument","computedStyle","getComputedStyle","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","documentElement","currentStyle","isVisible","eventListener","eventMap$d","onCloseClick","onContentChanged","onDomReady","updaterMap$d","defaultOptions$3","closeClickListener","setCloseClickListener","domReadyClickListener","setDomReadyClickListener","contentChangedClickListener","setContentChangedClickListener","positionChangedClickListener","setPositionChangedClickListener","zIndexChangedClickListener","setZindexChangedClickListener","containerElementRef","positionLatLng","position_1","infoBoxOptions","infoBox","createPortal","only","InfoBoxComponent","containerElement","setInfoBoxCallback","fastDeepEqual","ARRAY_TYPES","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","KDBush","from","data","ArrayBuffer","magic","versionAndType","ArrayType","nodeSize","numItems","isNaN","IndexArrayType","arrayTypeIndex","coordsByteSize","BYTES_PER_ELEMENT","idsByteSize","padCoords","ids","coords","_pos","_finished","finish","numAdded","range","minX","minY","maxX","maxY","axis","within","qx","qy","r2","sqDist","select","z","exp","sd","floor","j","swapItem","swap","arr","tmp","ax","ay","bx","by","dx","dy","defaultOptions$2","minZoom","minPoints","radius","extent","generateId","fround","Supercluster","trees","stride","clusterProps","points","time","timerId","geometry","coordinates","lngX","latY","Infinity","tree","_createTree","timeEnd","now","Date","_cluster","bbox","minLng","minLat","maxLng","maxLat","easternHem","westernHem","_limitZoom","getClusterJSON","getChildren","clusterId","originId","_getOriginId","originZoom","_getOriginZoom","errorMsg","getLeaves","limit","offset","leaves","_appendLeaves","getTile","z2","tile","features","_addTileFeatures","getClusterExpansionZoom","expansionZoom","properties","cluster_id","skipped","point_count","isCluster","tags","px","py","getClusterProperties","round","nextData","neighborIds","numPointsOrigin","numPoints","neighborId","clusterProperties","wx","wy","clusterPropIndex","numPoints2","_map","clone","original","yLat","abbrev","propIndex","point_count_abbreviated","y2","atan","MarkerUtils","isAdvancedMarkerAvailable","getMapCapabilities","isAdvancedMarkersAvailable","isAdvancedMarker","AdvancedMarkerElement","_position","AbstractAlgorithm","noop","noop$1","SuperClusterAlgorithm","__rest","super","superCluster","calculate","input","changed","feature","transformCluster","leaf","ClusterStats","sum","clusterMarkerCounts","clusterMarkerSum","mean","DefaultRenderer","stats","svg","Number","MAX_ZINDEX","svgEl","DOMParser","parseFromString","clusterOptions","btoa","Point","OverlayViewSafe","type1","type2","MarkerClustererEvents","defaultOnClusterClickHandler","MarkerClusterer","algorithmOptions","algorithm","renderer","onClusterClick","noDraw","CLUSTERING_BEGIN","mapCanvasProjection","singleMarker","groupMarkers","renderClusters","requestAnimationFrame","CLUSTERING_END","idleListener","delete","CLUSTER_CLICK","useGoogleMarkerClusterer","useGoogleMap","setMarkerClusterer","markerCluster","eventMap$c","updaterMap$c","closeclickListener","domreadyclickListener","contentchangedclickListener","positionchangedclickListener","zindexchangedclickListener","infoWindow","InfoWindow","setInfoWindowCallback","eventMap$b","updaterMap$b","editable","setEditable","path","setPath","defaultOptions$1","polyline","Polyline","setPolylineCallback","eventMap$a","updaterMap$a","paths","setPaths","onEdit","getPath","polygon","Polygon","setPolygonCallback","eventMap$9","updaterMap$9","setBounds","rightClickListener","setRightClickListener","setBoundsChangedListener","rectangle","Rectangle","setRectangleCallback","eventMap$8","onRadiusChanged","updaterMap$8","setRadius","defaultOptions","radiusChangedListener","setRadiusChangedListener","circle","Circle","setCircleCallback","eventMap$7","onAddFeature","onRemoveFeature","onRemoveProperty","onSetGeometry","onSetProperty","updaterMap$7","addgeojson","geojson","addGeoJson","foreach","loadgeojson","loadGeoJson","overridestyle","overrideStyle","revertstyle","revertStyle","controlposition","controlPosition","setControlPosition","controls","setControls","drawingmode","mode","setStyle","togeojson","toGeoJson","addFeatureListener","setAddFeatureListener","removeFeatureListener","setRemoveFeatureListener","removePropertyListener","setRemovePropertyListener","setGeometryListener","setSetGeometryListener","setPropertyListener","setSetPropertyListener","Data","setDataCallback","data_1","eventMap$6","onDefaultViewportChanged","onStatusChanged","updaterMap$6","setUrl","getOffsetOverride","getPixelPositionOffset","createLatLng","inst","Type","createLatLngBounds","ne","sw","getLayoutStyles","getLayoutStylesByBounds","factory","point","getLayoutStylesByPosition","ensureOfType","convertToLatLngString","latLngLike","convertToLatLngBoundsString","latLngBoundsLike","south","east","north","west","KmlLayer","kmlLayer","setKmlLayerCallback","mapPaneName","container","overlay","Overlay","layoutStyles","createOverlay","ReactDOM","paneEl","containerStyle","updatePane","mapPanes","overlayView","onPositionElement","currentPosition","previousPosition","containerRef","prevPositionString","positionString","prevBoundsString","boundsString","FLOAT_PANE","MAP_PANE","MARKER_LAYER","OVERLAY_LAYER","OVERLAY_MOUSE_TARGET","eventMap$5","updaterMap$5","imageBounds","groundOverlay","GroundOverlay","newBounds","setGroundOverlayCallback","eventMap$4","updaterMap$4","setData","visualization","heatmapLayer","HeatmapLayer","setHeatmapLayerCallback","eventMap$3","onPanoChanged","onPovChanged","updaterMap$3","register","provider","registerPanoProvider","links","setLinks","motionTracking","setMotionTracking","pano","setPano","pov","setPov","StreetViewPanorama","streetViewPanorama","setStreetViewPanoramaCallback","getStreetView","StreetViewService","streetViewService","setStreetViewServiceCallback","DirectionsService","directionsService","setDirectionsServiceCallback","route","eventMap$2","onDirectionsChanged","updaterMap$2","directions","setDirections","panel","setPanel","routeIndex","setRouteIndex","DirectionsRenderer","directionsRenderer","setDirectionsRendererCallback","DistanceMatrixService","distanceMatrixService","setDistanceMatrixServiceCallback","getDistanceMatrix","eventMap$1","onPlacesChanged","updaterMap$1","StandaloneSearchBox","searchBox","setSearchBoxCallback","places","searchBox_1","SearchBox","onPlaceChanged","restrictions","setComponentRestrictions","fields","setFields","types","setTypes","diffLatLng2Meters","lat1","lng1","lat2","lng2","dLng","Autocomplete","autocomplete","setAutocompleteCallback","autocomplete_1","ClearHTML","clearString","str","toRadians","angleInDegrees","toDegrees","angleInRadians","IQLPolygonCustomEdit","currentPolygonCustomEdit","vertex","ghostMarker","edit","isMobile","pointIcon","svgpi","midPointIcon","svgmpi","handleIconUp","svgup","handleIconDown","svgdown","fillColor","fillOpacity","strokeWeight","strokeOpacity","strokeColor","scale","ghostPath","at","getAt","vertexGhostDragStart","polygonBounds","polygonBoundsCenter","vertexGhostDrag","getLength","editIndex","setAt","moveGhostMarkers","previous","spherical","interpolate","vertexGhostDragEnd","insertAt","createMarkerVertex","createGhostMarkerVertex","raiseOnDrag","vertexDragStart","vertexDrag","vertexDragEnd","PolygonCustomEditWidget","mIcon","MVCObject","IQLFieldGeoLocation","IsValid","Poly","Area","Perimeter","Latitude","Longitude","area","perimeter","latitude","longitude","GeoJSON","TinyQueue","compare","_down","_up","peek","parent","halfLength","bestChild","polylabel","precision","debug","cellSize","cellQueue","Queue","bestCell","len","centroid","Cell","getCentroidCell","bboxCell","numProbes","potentiallyQueue","cell","ch","inside","minDistSq","ring","getSegDistSq","pointToPolygonDist","SQRT2","py2_round","abs","encode","factor","coordinate","output","fromCharCode","flipped","coord","decode","latitude_change","shift","byte","isInteger","charCodeAt","fromGeoJSON","toGeoJSON","module","IQLCircleFull","centerPoint","startH","endH","PRlat","PRlng","PGpoints","PGlat","PGlon","theta","gamma","isHole","reducedPath","reverse","cf","currentCircleFull","initialRadius","controlMarkers","endHeading","svgci","sizerIconTop","sizerIconRight","sizerIconBottom","sizerIconLeft","centerIcon","DistanceWidget","radiusWidget","RadiusWidget","midx","getIcon","addSizerTop_","addSizerRight_","addSizerBottom_","addSizerLeft_","distance_changed","sizerTop","crossOnDrag","me","computeDistanceBetween","computeOffset","setDistanceTop","sizerRight","setDistanceRight","sizerBottom","setDistanceBottom","sizerLeft","setDistanceLeft","center_changed","rbounds","circlePath","latNE","lngNE","latSW","lngSW","positionTop","positionRight","positionBottom","positionLeft","IQLCircleSector","cs","currentCircleSector","startHeading","startPinIcon","endPinIcon","addStartPin_","addEndPin_","startPin","sp","computeHeading","endPin","ep","sectorPath","IQLCircleSegment","currentCircleSegment","segmentPath","MapOverlayManager","mapInstance","diffLat","diffLng","wdppx","hdppx","hlat","hlng","zoomChangedListener","polygonListeners","markerListeners","mapListeners","eventHandlers","locPolygons","allPoints","polygons","polyLabels","fpolies","pointMarkers","dirmarkers","dpolylines","rpolylines","fmarkers","tipObj","ttOffset","backgroundFields","AddLabel","labelColour","polyCentroidCenter","get_polygon_centroid","labelLat","labelLon","areaText","bl","Id","locname","locarea","fontSize","textContent","ae","nce","ace","nameElem","areaElem","nameContainerElem","areaContainerElem","nameWidth","clientWidth","areaWidth","formatBlockLabel","LocationName","svgText","polyLabel","farms_BindMarkerEvents","deleteTooltip","ttc","clientY","scrollY","clientX","scrollX","injectMarkerTooltip","moveMarkerTooltip","injectTooltip","domEvent","moveTooltip","AdvancedMarker","locations","markerType","fmarker","svgicon","iconName","strokeWidth","svgNamespace","svgIcon","createElementNS","defs","clipPath","rect","pathData","pinIcon","fillPath","outlinePath","createSvgIcon","color","markerId","farmId","farmOrganization","farmName","OrganisationName","FarmName","code","polygonListeners_clear","polygonListener","addPolygonHole","offsetX","offsetY","vmWidth","nhid","lp","sPath","hps","notInsideCount","pt","ptIndex","poly","containsLocation","drawPolygonHole","holeIntersectCount","calcIntersection","poly1Points","poly2Points","polygon1","polygon2","pid","random","isPolygon","isCircle","isCircleSector","isCircleSegment","osBounds","mapPanned","psw","fromLatLngToPoint","pne","offsetCenter","drawCircleFullHole","shapePath","cp","rm","drawCircleSectorHole","drawCircleSegmentHole","worldCoordinateCenter","worldCoordinateNewCenter","newCenter","fromPointToLatLng","eventHandlers_set","eH","eventHandlers_get","RenderFields","mbounds","IsIrrigated","CropPlanted","CultivarPlanted","PlantingDate","polygonOptions","MapLocationFeature","StrokeColor","StrokeOpacity","StrokeWeight","FillColor","FillOpacity","ZIndex","unselected","labelVisable","pl","destroy","mapConfig","selectedProvinceFieldId","defaultCenterLatitude","defaultCenterLongitude","map_clear","markerListener","pm","cm","fm","dm","locPolygons_clear","dp","rp","overlayMapTypes","field","selectShape","shapeId","selectedStyle","unselectedStyle","selectedShape","find","isShapeInLocPolygons","some","panAndZoomToShape","getRadius","union","currentZoom","padding","addListenerOnce","newZoom","Shape_Edit","ShapeId","polygon_selected","Shape_DrawingDone","Shape_Delete","EventHandlers","currentBounds","currentCenter","Shape_DeleteAll","pIndex","Shape_PolygonCustomEdit_Add","mapCenter","mcLat","mcLng","Shape_Polygon_Add","Shape_CircleFull_Add","vmcLat","vmcLng","holeId","crLat","crLng","addCircleFullHole","cfLat","cfLng","Shape_CircleSector_Add","addCircleSectorHole","Shape_CircleSegment_Add","addCircleSegmentHole","RenderRegionFarms","locationsJson","TriggerField_ChangeEvent","isValid","polyPath","mapCoords","computeSignedArea","encoding","encodePath","fieldArea_calculate","substr","checkForBackgroundFieldOverlaps","DrawField_AttachEvents","eHandlers","moverListener","moutListener","mclListener","PolygonCustomEdit_Edit","polygonCE","pcePath","CircleSector_Edit","circleSec","CircleFull_Edit","circleFull","CircleSegment_Edit","circleSeg","RenderRegions","hasId","polies","Coords","Shape_Convert","shapePaths","numberOfWaypoints","c1","bearing","lon1","dByR","lon","asin","circleToPolygon","addToLocPolygons","RenderBackgroundFields","other","clearBackgroundFields","locPolygon","bgField","locPath","getArray","bgPath","NDVI_AddOverlay_DEA","locationJson","ndviTileURL","validGMTiles","eosLocationCropperRefId","eosViewId","spinnerURL","spinnerLat","spinnerLon","paletteId","colorMapTypeIdValue","isFullView","onComplete","centerLat","centerLng","polyBounds","fullView","vgmTiles","spinnerSet","spinnerImg","transform","spinnerMarker","tilesToLoad","zoomOnAddOverlayChangedListener","vdiMapType","ImageMapType","getTileUrl","booleanFullView","tileSize","zoomTileCount","substring","NDVI_RemoveOverlay","clear","NDVI_DrawLocation","vMapWidth","showTooltip","polygonMouseoverListener","polygonMousemoveListener","polygonMouseoutListener","mapOptions","disableDefaultUI","mapId","mapTypeControl","zoomControl","gmAPIkey","jpMap","setMapInstance","mapManager","mapOverlayManagerRef","mapOverlayManager","useMapManager","loader","useJsApiLoader","useCallback","isMapInitialized","mapObject","_jsx","_Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,9,10,11,15]}