diff --git a/CMakeLists.txt b/CMakeLists.txt index 567653aa..f98bc2a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,7 +85,8 @@ set(QT_MODULES Core Core5Compat Multimedia - Widgets) + Widgets + Positioning) if(NOT DEFINED WITH_WEBENGINE) set(WITH_WEBENGINE true) @@ -96,7 +97,8 @@ if(WITH_WEBENGINE) WebEngineCore WebEngineQuick WebChannel - WebEngineWidgets) + WebEngineWidgets + ) endif() set(CMAKE_CXX_FLAGS @@ -176,6 +178,7 @@ set(COMMON_SOURCES ${APP_SRC_DIR}/utils.cpp ${APP_SRC_DIR}/mainapplication.cpp ${APP_SRC_DIR}/messagesadapter.cpp + ${APP_SRC_DIR}/positionmanager.cpp ${APP_SRC_DIR}/accountadapter.cpp ${APP_SRC_DIR}/calladapter.cpp ${APP_SRC_DIR}/conversationsadapter.cpp @@ -211,7 +214,9 @@ set(COMMON_SOURCES ${APP_SRC_DIR}/videodevices.cpp ${APP_SRC_DIR}/videoprovider.cpp ${APP_SRC_DIR}/callparticipantsmodel.cpp - ${APP_SRC_DIR}/tipsmodel.cpp) + ${APP_SRC_DIR}/tipsmodel.cpp + ${APP_SRC_DIR}/positioning.cpp +) set(COMMON_HEADERS ${APP_SRC_DIR}/avatarimageprovider.h @@ -228,6 +233,7 @@ set(COMMON_HEADERS ${APP_SRC_DIR}/mainapplication.h ${APP_SRC_DIR}/qrimageprovider.h ${APP_SRC_DIR}/messagesadapter.h + ${APP_SRC_DIR}/positionmanager.h ${APP_SRC_DIR}/accountadapter.h ${APP_SRC_DIR}/calladapter.h ${APP_SRC_DIR}/conversationsadapter.h @@ -267,7 +273,8 @@ set(COMMON_HEADERS ${APP_SRC_DIR}/videodevices.h ${APP_SRC_DIR}/videoprovider.h ${APP_SRC_DIR}/callparticipantsmodel.h - ${APP_SRC_DIR}/tipsmodel.h) + ${APP_SRC_DIR}/tipsmodel.h + ${APP_SRC_DIR}/positioning.h) if(WITH_WEBENGINE) list(APPEND COMMON_SOURCES diff --git a/resources/icons/minimize.svg b/resources/icons/minimize.svg new file mode 100644 index 00000000..fc0588d2 --- /dev/null +++ b/resources/icons/minimize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/icons/move.svg b/resources/icons/move.svg new file mode 100644 index 00000000..555682bb --- /dev/null +++ b/resources/icons/move.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/icons/my_location.svg b/resources/icons/my_location.svg new file mode 100644 index 00000000..a0be01d1 --- /dev/null +++ b/resources/icons/my_location.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/icons/share_location.svg b/resources/icons/share_location.svg new file mode 100644 index 00000000..39ec497e --- /dev/null +++ b/resources/icons/share_location.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/commoncomponents/MaterialButton.qml b/src/app/commoncomponents/MaterialButton.qml index 83de3912..fb7a38fd 100644 --- a/src/app/commoncomponents/MaterialButton.qml +++ b/src/app/commoncomponents/MaterialButton.qml @@ -48,6 +48,7 @@ AbstractButton { property var preferredWidth property real textLeftPadding property real textRightPadding + property real fontSize: JamiTheme.wizardViewDescriptionFontPixelSize Binding on width { when: root.preferredWidth !== undefined || @@ -183,7 +184,7 @@ AbstractButton { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter color: contentColorProvider - font.pixelSize: JamiTheme.wizardViewDescriptionFontPixelSize + font.pixelSize: fontSize } } } diff --git a/src/app/constant/JamiStrings.qml b/src/app/constant/JamiStrings.qml index 18300572..ebc1248c 100644 --- a/src/app/constant/JamiStrings.qml +++ b/src/app/constant/JamiStrings.qml @@ -299,6 +299,16 @@ Item { property string raiseHand: qsTr("Raise hand") property string layoutSettings: qsTr("Layout settings") + // Share location + property string shareLocation: qsTr("Share location") + property string stopSharingLocation: qsTr("Stop sharing location") + property string shortSharing: qsTr("10 minutes") + property string longSharing: qsTr("One hour") + property string minutesLeft: qsTr("%1 minutes left") + property string minuteLeft: qsTr("%1 minute left") + property string locationServicesError: qsTr("Jami needs to access to your location.\nIn Device Settings, please turn on Location Services.\nOther participants' location can still be received.") + property string locationServicesClosedError: qsTr("Please check your Internet connection.") + // Chatview header property string hideChat: qsTr("Hide chat") property string placeAudioCall: qsTr("Place audio call") diff --git a/src/app/constant/JamiTheme.qml b/src/app/constant/JamiTheme.qml index 994eb68c..613e81c0 100644 --- a/src/app/constant/JamiTheme.qml +++ b/src/app/constant/JamiTheme.qml @@ -210,6 +210,10 @@ Item { property color messageWebViewFooterButtonImageColor: darkTheme ? "#838383" : "#656565" property color chatviewUsernameColor : "#A7A7A7" + //mapPosition + property color mapButtonsOverlayColor: darkTheme ? "#000000" : "#f0f0f0" + property color mapButtonColor: darkTheme ? "#f0f0f0" : "#000000" + // Files To Send Container property color removeFileButtonColor: Qt.rgba(96, 95, 97, 0.5) @@ -314,6 +318,7 @@ Item { property real preferredDialogWidth: 400 property real preferredDialogHeight: 300 property real minimumPreviewWidth: 120 + property real minimumMapWidth: 230 property real pluginHandlersPopupViewHeight: 200 property real pluginHandlersPopupViewDelegateHeight: 50 property real secondaryDialogDimension: 500 @@ -463,6 +468,9 @@ Item { property real tipBoxTitleFontSize: calcSize(13) property real tipBoxContentFontSize: calcSize(12) + //sharePosition + property real timerButtonsFontSize: calcSize(11) + //Popups property real popuptextSize: calcSize(15) property real popupButtonsMargin: 20 diff --git a/src/app/conversationlistmodel.h b/src/app/conversationlistmodel.h index 16b0a2a1..0e66e6f3 100644 --- a/src/app/conversationlistmodel.h +++ b/src/app/conversationlistmodel.h @@ -30,6 +30,7 @@ class ConversationListModel final : public ConversationListModelBase { Q_OBJECT + QML_PROPERTY(MapStringString, position) public: explicit ConversationListModel(LRCInstance* instance, QObject* parent = nullptr); @@ -49,7 +50,8 @@ public: bool lessThan(const QModelIndex& left, const QModelIndex& right) const override; Q_INVOKABLE void setFilterRequests(bool filterRequests); - Q_INVOKABLE void ignoreFiltering(const QStringList& highlighted) { + Q_INVOKABLE void ignoreFiltering(const QStringList& highlighted) + { ignored_ = highlighted; } diff --git a/src/app/mainview/MainView.qml b/src/app/mainview/MainView.qml index 24481701..c2191227 100644 --- a/src/app/mainview/MainView.qml +++ b/src/app/mainview/MainView.qml @@ -410,7 +410,10 @@ Rectangle { objectName: "chatView" visible: false - Component.onCompleted: MessagesAdapter.setQmlObject(this) + Component.onCompleted: { + MessagesAdapter.setQmlObject(this) + PositionManager.setQmlObject(this) + } } NewSwarmPage { diff --git a/src/app/mainview/components/ChatView.qml b/src/app/mainview/components/ChatView.qml index d6b694d9..28024a6f 100644 --- a/src/app/mainview/components/ChatView.qml +++ b/src/app/mainview/components/ChatView.qml @@ -47,10 +47,19 @@ Rectangle { color: JamiTheme.chatviewBgColor - HostPopup { + property string currentConvId: CurrentConversation.id + onCurrentConvIdChanged: PositionManager.setMapActive(false); + + Loader { + id: mapLoader + + active: PositionManager.isMapActive + z: 10 + source: WITH_WEBENGINE ? "qrc:/webengine/map/MapPosition.qml" : "" + } +HostPopup { id: hostPopup } - ColumnLayout { anchors.fill: root diff --git a/src/app/mainview/components/ChatViewFooter.qml b/src/app/mainview/components/ChatViewFooter.qml index beb8d56e..fa956409 100644 --- a/src/app/mainview/components/ChatViewFooter.qml +++ b/src/app/mainview/components/ChatViewFooter.qml @@ -18,6 +18,7 @@ import QtQuick import QtQuick.Layouts +import QtQuick.Controls import net.jami.Models 1.1 import net.jami.Constants 1.1 @@ -185,6 +186,11 @@ Rectangle { emojiPickerLoader.openEmojiPicker() } + + onShowMapClicked: { + PositionManager.setMapActive(true); + } + onSendFileButtonClicked: jamiFileDialog.open() onSendMessageButtonClicked: { // Send text message diff --git a/src/app/mainview/components/MessageBar.qml b/src/app/mainview/components/MessageBar.qml index 344bad29..7e7069b2 100644 --- a/src/app/mainview/components/MessageBar.qml +++ b/src/app/mainview/components/MessageBar.qml @@ -38,6 +38,7 @@ ColumnLayout { signal sendFileButtonClicked signal audioRecordMessageButtonClicked signal videoRecordMessageButtonClicked + signal showMapClicked signal emojiButtonClicked implicitHeight: messageBarRowLayout.height @@ -129,6 +130,27 @@ ColumnLayout { Component.onCompleted: JamiQmlUtils.videoRecordMessageButtonObj = videoRecordMessageButton } + PushButton { + id: showMapButton + + Layout.alignment: Qt.AlignVCenter + Layout.preferredWidth: JamiTheme.chatViewFooterButtonSize + Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize + visible: WITH_WEBENGINE + + radius: JamiTheme.chatViewFooterButtonRadius + preferredSize: JamiTheme.chatViewFooterButtonIconSize + + toolTipText: JamiStrings.shareLocation + + source: JamiResources.share_location_svg + + normalColor: JamiTheme.primaryBackgroundColor + imageColor: JamiTheme.messageWebViewFooterButtonImageColor + + onClicked: root.showMapClicked() + } + MessageBarTextArea { id: textArea diff --git a/src/app/positioning.cpp b/src/app/positioning.cpp new file mode 100644 index 00000000..e1f8ebc3 --- /dev/null +++ b/src/app/positioning.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2022 Savoir-faire Linux Inc. + * Author: Nicolas Vengeon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "positioning.h" + +#include +#include + +Positioning::Positioning(QString uri, QObject* parent) + : QObject(parent) + , uri_(uri) +{ + source_ = QGeoPositionInfoSource::createDefaultSource(this); + QTimer* timer = new QTimer(this); + connect(timer, &QTimer::timeout, this, &Positioning::requestPosition); + timer->start(2000); + connect(source_, &QGeoPositionInfoSource::errorOccurred, this, &Positioning::slotError); + connect(source_, &QGeoPositionInfoSource::positionUpdated, this, &Positioning::positionUpdated); + // if location services are activated, positioning will be activated automatically + connect(source_, + &QGeoPositionInfoSource::supportedPositioningMethodsChanged, + this, + &Positioning::locationServicesActivated); +} + +Positioning::~Positioning() +{ + sendStopSharingMsg(); +} + +void +Positioning::start() +{ + if (source_ && !isPositioning) { + source_->startUpdates(); + isPositioning = true; + } +} + +void +Positioning::stop() +{ + if (source_ && isPositioning) + source_->stopUpdates(); + isPositioning = false; +} + +void +Positioning::sendStopSharingMsg() +{ + QJsonObject jsonObj; + jsonObj.insert("type", QJsonValue("Stop")); + QJsonDocument doc(jsonObj); + QString strJson(doc.toJson(QJsonDocument::Compact)); + Q_EMIT newPosition(uri_, strJson, -1, ""); +} + +QString +Positioning::convertToJson(const QGeoPositionInfo& info) +{ + QJsonObject jsonObj; + jsonObj.insert("type", QJsonValue("Position")); + jsonObj.insert("lat", QJsonValue(info.coordinate().latitude())); + jsonObj.insert("long", QJsonValue(info.coordinate().longitude())); + jsonObj.insert("time", QJsonValue(info.timestamp().toMSecsSinceEpoch())); + + QJsonDocument doc(jsonObj); + QString strJson(doc.toJson(QJsonDocument::Compact)); + + return strJson; +} + +void +Positioning::setUri(QString uri) +{ + uri_ = uri; +} + +void +Positioning::positionUpdated(const QGeoPositionInfo& info) +{ + Q_EMIT positioningError(""); + Q_EMIT newPosition(uri_, convertToJson(info), -1, ""); +} + +void +Positioning::requestPosition() +{ + if (source_) + source_->requestUpdate(); +} + +void +Positioning::locationServicesActivated() +{ + Q_EMIT positioningError(""); + start(); +} + +static QString +errorToString(QGeoPositionInfoSource::Error error) +{ + if (error == 0) { + return QObject::tr("locationServicesError"); + } + if (error == 1) { + return QObject::tr("locationServicesClosedError"); + } + return QObject::tr("locationServicesUnknownError"); +} + +void +Positioning::slotError(QGeoPositionInfoSource::Error error) +{ + Q_EMIT positioningError(errorToString(error)); +} diff --git a/src/app/positioning.h b/src/app/positioning.h new file mode 100644 index 00000000..ae59b2ed --- /dev/null +++ b/src/app/positioning.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2022 Savoir-faire Linux Inc. + * Author: Nicolas Vengeon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include +#include +#include +#include + +class Positioning : public QObject +{ + Q_OBJECT + +public: + Positioning(QString uri, QObject* parent = 0); + ~Positioning(); + + /** + * start to retreive the current position + */ + void start(); + /** + * stop to retreive the current position + */ + void stop(); + /** + * send a stop signal to other peers to tell them + * you stoped sharing yout position + */ + void sendStopSharingMsg(); + QString convertToJson(const QGeoPositionInfo& info); + + void setUri(QString uri); + +private Q_SLOTS: + void slotError(QGeoPositionInfoSource::Error error); + void positionUpdated(const QGeoPositionInfo& info); + /** + * Force to send position at regular intervals + */ + void requestPosition(); + /** + * Triggered when location services are activated + */ + void locationServicesActivated(); + +Q_SIGNALS: + void newPosition(const QString& peerId, + const QString& body, + const uint64_t& timestamp, + const QString& daemonId); + void positioningError(const QString error); + +private: + QString uri_; + QGeoPositionInfoSource* source_ = nullptr; + bool isPositioning = false; +}; diff --git a/src/app/positionmanager.cpp b/src/app/positionmanager.cpp new file mode 100644 index 00000000..119b68be --- /dev/null +++ b/src/app/positionmanager.cpp @@ -0,0 +1,252 @@ +#include "positionmanager.h" + +#include "qtutils.h" + +#include +#include +#include +#include +#include +#include + +PositionManager::PositionManager(LRCInstance* instance, QObject* parent) + : QmlAdapterBase(instance, parent) +{ + timerTimeLeftSharing_ = new QTimer(this); + timerStopSharing_ = new QTimer(this); + connect(timerTimeLeftSharing_, &QTimer::timeout, [=] { + set_timeSharingRemaining(timerStopSharing_->remainingTime()); + }); + connect(timerStopSharing_, &QTimer::timeout, [=] { stopSharingPosition(); }); + connect(lrcInstance_, &LRCInstance::selectedConvUidChanged, [this]() { + set_mapAutoOpening(true); + }); +} + +void +PositionManager::safeInit() +{ + connect(lrcInstance_, &LRCInstance::currentAccountIdChanged, [this]() { + connectConversationModel(); + localPositioning_->setUri(lrcInstance_->getCurrentAccountInfo().profileInfo.uri); + }); + localPositioning_.reset(new Positioning(lrcInstance_->getCurrentAccountInfo().profileInfo.uri)); + connectConversationModel(); +} + +void +PositionManager::connectConversationModel() +{ + auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); + + QObject::connect(currentConversationModel, + &ConversationModel::newPosition, + this, + &PositionManager::onPositionReceived, + Qt::UniqueConnection); +} + +void +PositionManager::startPositioning() +{ + sharingUris_.clear(); + + localPositioning_->start(); + connect(localPositioning_.get(), + &Positioning::newPosition, + this, + &PositionManager::onPositionReceived, + Qt::UniqueConnection); + connect(localPositioning_.get(), + &Positioning::positioningError, + this, + &PositionManager::onPositionErrorReceived, + Qt::UniqueConnection); +} + +void +PositionManager::stopPositioning() +{ + localPositioning_->stop(); +} + +void +PositionManager::onOwnPositionReceived(const QString& peerId, const QString& body) +{ + try { + Q_FOREACH (const auto& id, positionShareConvIds_) { + const auto& convInfo = lrcInstance_->getConversationFromConvUid(id); + Q_FOREACH (const QString& uri, convInfo.participantsUris()) { + if (peerId != uri) { + lrcInstance_->getCurrentAccountInfo() + .contactModel->sendDhtMessage(uri, body, APPLICATION_GEO); + } + } + } + + } catch (const std::exception& e) { + qDebug() << Q_FUNC_INFO << e.what(); + } +} + +void +PositionManager::sharePosition(int maximumTime) +{ + connect(localPositioning_.get(), + &Positioning::newPosition, + this, + &PositionManager::onOwnPositionReceived, + Qt::UniqueConnection); + + try { + startPositionTimers(maximumTime); + const auto convUid = lrcInstance_->get_selectedConvUid(); + positionShareConvIds_.append(convUid); + Q_EMIT positionShareConvIdsChanged(); + } catch (...) { + qDebug() << "Exception during sharePosition:"; + } +} + +void +PositionManager::stopSharingPosition() +{ + localPositioning_->sendStopSharingMsg(); + stopPositionTimers(); + set_positionShareConvIds({}); +} + +void +PositionManager::setMapActive(bool state) +{ + set_isMapActive(state); + Q_EMIT isMapActiveChanged(); +} + +QString +PositionManager::getAvatar(const QString& uri) +{ + QString avatarBase64; + QByteArray ba; + QBuffer bu(&ba); + + auto& accInfo = lrcInstance_->getCurrentAccountInfo(); + auto currentAccountUri = accInfo.profileInfo.uri; + if (currentAccountUri == uri) { + // use accountPhoto + Utils::accountPhoto(lrcInstance_, accInfo.id).save(&bu, "PNG"); + } else { + // use contactPhoto + Utils::contactPhoto(lrcInstance_, uri).save(&bu, "PNG"); + } + return ba.toBase64(); +} + +QVariantMap +PositionManager::parseJsonPosition(const QString& body, const QString& peerId) +{ + QJsonDocument temp = QJsonDocument::fromJson(body.toUtf8()); + QJsonObject jsonObject = temp.object(); + QVariantMap pos; + + for (auto i = jsonObject.begin(); i != jsonObject.end(); i++) { + if (i.key() == "long") + pos["long"] = i.value().toVariant(); + if (i.key() == "lat") + pos["lat"] = i.value().toVariant(); + if (i.key() == "type") + pos["type"] = i.value().toVariant(); + if (i.key() == "time") + pos["time"] = i.value().toVariant(); + + pos["author"] = peerId; + } + return pos; +} + +void +PositionManager::startPositionTimers(int timeSharing) +{ + set_timeSharingRemaining(timeSharing); + timerTimeLeftSharing_->start(1000); + timerStopSharing_->start(timeSharing); +} + +void +PositionManager::stopPositionTimers() +{ + set_timeSharingRemaining(0); + timerTimeLeftSharing_->stop(); + timerStopSharing_->stop(); +} + +void +PositionManager::onPositionErrorReceived(const QString error) +{ + Q_EMIT positioningError(error); +} + +void +PositionManager::onPositionReceived(const QString& peerId, + const QString& body, + const uint64_t& timestamp, + const QString& daemonId) +{ + // only show shared positions from contacts in the current conversation + const auto& convParticipants = lrcInstance_ + ->getConversationFromConvUid( + lrcInstance_->get_selectedConvUid()) + .participantsUris(); + bool isPeerIdInConv = (std::find(convParticipants.begin(), convParticipants.end(), peerId) + != convParticipants.end()); + if (!isPeerIdInConv) + return; + + QVariantMap newPosition = parseJsonPosition(body, peerId); + auto getShareInfo = [&](bool update) -> QVariantMap { + QVariantMap shareInfo; + shareInfo["author"] = peerId; + if (!update) { + shareInfo["avatar"] = getAvatar(peerId); + } + shareInfo["long"] = newPosition["long"]; + shareInfo["lat"] = newPosition["lat"]; + return shareInfo; + }; + auto endSharing = newPosition["type"] == "Stop"; + + if (!endSharing) { + // open map on position reception + if (!isMapActive_ && mapAutoOpening_ + && peerId != lrcInstance_->getCurrentAccountInfo().profileInfo.uri) { + set_isMapActive(true); + } + } + auto iter = std::find(sharingUris_.begin(), sharingUris_.end(), peerId); + if (iter == sharingUris_.end()) { + // New share + if (!endSharing) { + sharingUris_.insert(peerId); + Q_EMIT positionShareAdded(getShareInfo(false)); + } + + } else { + // Update/remove existing + if (endSharing) { + // Remove (avoid self) + if (peerId != lrcInstance_->getCurrentAccountInfo().profileInfo.uri) { + sharingUris_.remove(peerId); + Q_EMIT positionShareRemoved(peerId); + // close the map if you're not sharing and the only remaining position is yours + if (!positionShareConvIds_.length() && sharingUris_.size() == 1 + && sharingUris_.contains( + lrcInstance_->getCurrentAccountInfo().profileInfo.uri)) { + set_isMapActive(false); + } + } + } else { + // Update + Q_EMIT positionShareUpdated(getShareInfo(true)); + } + } +} diff --git a/src/app/positionmanager.h b/src/app/positionmanager.h new file mode 100644 index 00000000..74148a31 --- /dev/null +++ b/src/app/positionmanager.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2022 Savoir-faire Linux Inc. + * Author: Nicolas Vengeon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "lrcinstance.h" +#include "qmladapterbase.h" +#include "positioning.h" + +#include +#include + +class PositionManager : public QmlAdapterBase +{ + Q_OBJECT + QML_RO_PROPERTY(bool, isMapActive) + QML_RO_PROPERTY(int, timeSharingRemaining) + QML_PROPERTY(QList, positionShareConvIds) + QML_PROPERTY(bool, mapAutoOpening) +public: + explicit PositionManager(LRCInstance* instance, QObject* parent = nullptr); + ~PositionManager() = default; + +Q_SIGNALS: + void positioningError(const QString error); + void positionShareAdded(const QVariantMap& shareInfo); + void positionShareUpdated(const QVariantMap& posInfo); + void positionShareRemoved(const QString& uri); + +protected: + void safeInit() override; + + QString getAvatar(const QString& peerId); + QVariantMap parseJsonPosition(const QString& body, const QString& peerId); + void positionWatchDog(); + void startPositionTimers(int timeSharing); + void stopPositionTimers(); + + Q_INVOKABLE void connectConversationModel(); + Q_INVOKABLE void setMapActive(bool state); + Q_INVOKABLE void sharePosition(int maximumTime); + Q_INVOKABLE void startPositioning(); + Q_INVOKABLE void stopPositioning(); + Q_INVOKABLE void stopSharingPosition(); + +private Q_SLOTS: + void onPositionErrorReceived(const QString error); + void onPositionReceived(const QString& peerId, + const QString& body, + const uint64_t& timestamp, + const QString& daemonId); + void onOwnPositionReceived(const QString& peerId, const QString& body); + +private: + std::unique_ptr localPositioning_; + QTimer* timerTimeLeftSharing_ = nullptr; + QTimer* timerStopSharing_ = nullptr; + QSet sharingUris_; +}; diff --git a/src/app/qmlregister.cpp b/src/app/qmlregister.cpp index 285f7814..6b8e2237 100644 --- a/src/app/qmlregister.cpp +++ b/src/app/qmlregister.cpp @@ -24,6 +24,7 @@ #include "contactadapter.h" #include "pluginadapter.h" #include "messagesadapter.h" +#include "positionmanager.h" #include "tipsmodel.h" #include "previewengine.h" #include "utilsadapter.h" @@ -110,6 +111,7 @@ registerTypes(QQmlEngine* engine, // setup the adapters (their lifetimes are that of MainApplication) auto callAdapter = new CallAdapter(systemTray, lrcInstance, parent); auto messagesAdapter = new MessagesAdapter(settingsManager, previewEngine, lrcInstance, parent); + auto positionManager = new PositionManager(lrcInstance, parent); auto conversationsAdapter = new ConversationsAdapter(systemTray, lrcInstance, parent); auto avAdapter = new AvAdapter(lrcInstance, parent); auto contactAdapter = new ContactAdapter(lrcInstance, parent); @@ -126,6 +128,7 @@ registerTypes(QQmlEngine* engine, QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, callAdapter, "CallAdapter"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, tipsModel, "TipsModel"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, messagesAdapter, "MessagesAdapter"); + QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, positionManager, "PositionManager"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, conversationsAdapter, "ConversationsAdapter"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, avAdapter, "AvAdapter"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_ADAPTERS, contactAdapter, "ContactAdapter"); diff --git a/src/app/utils.cpp b/src/app/utils.cpp index ea6e85e2..b97887b4 100644 --- a/src/app/utils.cpp +++ b/src/app/utils.cpp @@ -817,6 +817,9 @@ QByteArray Utils::QByteArrayFromFile(const QString& filename) { QFile file(filename); + if (!file.exists()) { + qDebug() << "QByteArrayFromFile: file does not exist" << filename; + } if (file.open(QIODevice::ReadOnly)) { return file.readAll(); } else { diff --git a/src/app/webengine/map/MapPosition.qml b/src/app/webengine/map/MapPosition.qml new file mode 100644 index 00000000..e8f7f28c --- /dev/null +++ b/src/app/webengine/map/MapPosition.qml @@ -0,0 +1,351 @@ +/* + * Copyright (C) 2022 Savoir-faire Linux Inc. + * Author: Nicolas Vengeon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Qt5Compat.GraphicalEffects +import QtWebEngine + +import net.jami.Models 1.1 +import net.jami.Adapters 1.1 +import net.jami.Constants 1.1 + +import "../../commoncomponents" + +Rectangle { + id: mapPopup + + x: xPos + y: yPos + width: isFullScreen ? root.width : windowSize + height: isMinimised + ? buttonOverlay.height + buttonsChoseSharing.height + 30 + : isFullScreen ? root.height - yPos : windowSize + + property bool isFullScreen: false + property bool isMinimised: false + property real windowSize: windowPreferedSize > JamiTheme.minimumMapWidth + ? windowPreferedSize + : JamiTheme.minimumMapWidth + property real windowPreferedSize: root.width > root.height + ? root.height / 3 + : root.width / 3 + property real xPos: 0 + property real yPos: JamiTheme.chatViewHeaderPreferredHeight + + WebEngineView { + id: webView + + width: parent.width + height: parent.height + + property string mapHtml: ":/webengine/map/map.html" + property string olCss: ":/webengine/map/ol.css" + property string mapJs: "../../webengine/map/map.js" + property string olJs: "../../webengine/map/ol.js" + property bool isLoaded: false + property var positionList: PositionManager.positionList; + property var avatarPositionList: PositionManager.avatarPositionList; + property bool isSharing: (PositionManager.positionShareConvIds.length !== 0 ) + + function loadScripts () { + var scriptMapJs = { + sourceUrl: Qt.resolvedUrl(mapJs), + injectionPoint: WebEngineScript.DocumentReady, + worldId: WebEngineScript.MainWorld + } + + var scriptOlJs = { + sourceUrl: Qt.resolvedUrl(olJs), + injectionPoint: WebEngineScript.DocumentReady, + worldId: WebEngineScript.MainWorld + } + + userScripts.collection = [ scriptOlJs, scriptMapJs ] + } + Connections { + target: PositionManager + + function onPositionShareAdded(shareInfo) { + if(webView.isLoaded) { + var curLong = shareInfo.long + var curLat = shareInfo.lat + webView.runJavaScript("newPosition([" + curLong + "," + curLat + "], '" + shareInfo.author + "', '" + shareInfo.avatar + "' )" ); + webView.runJavaScript("zoomTolayersExtent()" ); + } + + } + + function onPositionShareUpdated(shareInfo) { + if(webView.isLoaded) { + var curLong = shareInfo.long + var curLat = shareInfo.lat + webView.runJavaScript("updatePosition([" + curLong + "," + curLat + "], '" + shareInfo.author + "' )" ); + } + } + + function onPositionShareRemoved(author) { + if(webView.isLoaded) { + webView.runJavaScript("removePosition( '" + author + "' )" ); + webView.runJavaScript("zoomTolayersExtent()" ); + } + } + } + Component.onDestruction: { + PositionManager.stopSharingPosition(); + PositionManager.stopPositioning(); + } + + Component.onCompleted: { + loadHtml(UtilsAdapter.qStringFromFile(mapHtml), mapHtml) + loadScripts() + } + + onLoadingChanged: function (loadingInfo) { + if (loadingInfo.status === WebEngineView.LoadSucceededStatus) { + runJavaScript(UtilsAdapter.getStyleSheet("olcss",UtilsAdapter.qStringFromFile(olCss))) + webView.isLoaded = true + runJavaScript("setMapView([" + 0 + ","+ 0 + "], " + 1 + " );" ); + PositionManager.startPositioning() + } + } + } + + ColumnLayout { + id: buttonsChoseSharing + + anchors.horizontalCenter: mapPopup.horizontalCenter + anchors.margins: 10 + anchors.bottom: mapPopup.bottom + + property bool shortSharing: true + + RowLayout { + Layout.alignment: Qt.AlignHCenter + + MaterialButton { + id: shortSharingButton + + preferredWidth: text.contentWidth + visible: !webView.isSharing + textLeftPadding: JamiTheme.buttontextPadding + textRightPadding: JamiTheme.buttontextPadding + primary: true + text: JamiStrings.shortSharing + color: buttonsChoseSharing.shortSharing ? JamiTheme.buttonTintedBluePressed : JamiTheme.buttonTintedBlue + fontSize: JamiTheme.timerButtonsFontSize + onClicked: { + buttonsChoseSharing.shortSharing = true + } + + } + + MaterialButton { + id: longSharingButton + + preferredWidth: text.contentWidth + visible: !webView.isSharing + textLeftPadding: JamiTheme.buttontextPadding + textRightPadding: JamiTheme.buttontextPadding + primary: true + text: JamiStrings.longSharing + color: !buttonsChoseSharing.shortSharing ? JamiTheme.buttonTintedBluePressed : JamiTheme.buttonTintedBlue + fontSize: JamiTheme.timerButtonsFontSize + onClicked: { + buttonsChoseSharing.shortSharing = false; + } + } + + Rectangle { + + radius: 10 + width: textTimer.width + 15 + height: textTimer.height + 15 + color: JamiTheme.mapButtonsOverlayColor + visible: webView.isSharing && PositionManager.timeSharingRemaining + + Text { + id: textTimer + + anchors.centerIn: parent + color: JamiTheme.mapButtonColor + text: remainingTimeMs <= 1 + ? JamiStrings.minuteLeft.arg(remainingTimeMs) + : JamiStrings.minutesLeft.arg(remainingTimeMs) + + Layout.alignment: Qt.AlignHCenter + + property int remainingTimeMs: Math.ceil(PositionManager.timeSharingRemaining / 1000 / 60) + } + } + } + + MaterialButton { + id: sharePositionButton + + preferredWidth: text.contentWidth + textLeftPadding: JamiTheme.buttontextPadding + textRightPadding: JamiTheme.buttontextPadding + primary: true + text: webView.isSharing ? JamiStrings.stopSharingLocation : JamiStrings.shareLocation + color: isError + ? JamiTheme.buttonTintedGreyInactive + : webView.isSharing ? JamiTheme.buttonTintedRed : JamiTheme.buttonTintedBlue + hoveredColor: isError + ? JamiTheme.buttonTintedGreyInactive + : webView.isSharing ? JamiTheme.buttonTintedRedHovered : JamiTheme.buttonTintedBlueHovered + pressedColor: isError + ? JamiTheme.buttonTintedGreyInactive + : webView.isSharing ? JamiTheme.buttonTintedRedPressed: JamiTheme.buttonTintedBluePressed + Layout.alignment: Qt.AlignHCenter + + property bool isHovered: false + property string positioningError: "default" + property bool isError: positioningError.length + + function errorString(posError) { + if (posError === "locationServicesError") + return JamiStrings.locationServicesError + return JamiStrings.locationServicesClosedError + } + + onClicked: { + if (!isError) { + if (webView.isSharing) { + PositionManager.stopSharingPosition(); + } else { + if (buttonsChoseSharing.shortSharing) + PositionManager.sharePosition(10 * 60 * 1000); + else + PositionManager.sharePosition(60 * 60 * 1000); + } + } + } + + onHoveredChanged: { + isHovered = !isHovered + } + + MaterialToolTip { + visible: sharePositionButton.isHovered + && sharePositionButton.isError && (sharePositionButton.positioningError !== "default") + x: 0 + y: 0 + text: sharePositionButton.errorString(sharePositionButton.positioningError) + } + + Connections { + target: PositionManager + function onPositioningError (err) { + sharePositionButton.positioningError = err; + } + } + } + } + + Rectangle { + id: buttonOverlay + + anchors.right: webView.right + anchors.top: webView.top + anchors.margins: 10 + radius: 10 + width: lay.width + 10 + height: lay.height + 10 + color: JamiTheme.mapButtonsOverlayColor + + RowLayout { + id: lay + + anchors.centerIn: parent + + PushButton { + id: btnCenter + + imageColor: JamiTheme.mapButtonColor + normalColor: JamiTheme.transparentColor + source: JamiResources.share_location_svg + onClicked: { + webView.runJavaScript("zoomTolayersExtent()" ); + } + } + + PushButton { + id: btnMove + + imageColor: JamiTheme.mapButtonColor + normalColor: JamiTheme.transparentColor + source: JamiResources.move_svg + + MouseArea { + anchors.fill: parent + drag.target: mapPopup + drag.minimumX: 0 + drag.maximumX: root.width - mapPopup.width + drag.minimumY: 0 + drag.maximumY: root.height - mapPopup.height + } + } + + PushButton { + id: btnminimise + + imageColor: JamiTheme.mapButtonColor + normalColor: JamiTheme.transparentColor + source: isMinimised + ? JamiResources.close_fullscreen_24dp_svg + : JamiResources.minimize_svg + onClicked: { + isMinimised = !isMinimised + isFullScreen = false; + } + } + + PushButton { + id: btnmaximise + + imageColor: JamiTheme.mapButtonColor + normalColor: JamiTheme.transparentColor + source: isFullScreen? JamiResources.close_fullscreen_24dp_svg : JamiResources.open_in_full_24dp_svg + onClicked: { + if (!isFullScreen && !isMinimised) { + mapPopup.x = mapPopup.xPos + mapPopup.y = mapPopup.yPos + } + isFullScreen = !isFullScreen + isMinimised = false; + } + } + + PushButton { + id: btnClose + + imageColor: JamiTheme.mapButtonColor + normalColor: JamiTheme.transparentColor + source: JamiResources.round_close_24dp_svg + + onClicked: { + PositionManager.setMapActive(false); + PositionManager.mapAutoOpening = false; + + } + } + } + } +} + diff --git a/src/app/webengine/map/map.css b/src/app/webengine/map/map.css new file mode 100644 index 00000000..bf76942f --- /dev/null +++ b/src/app/webengine/map/map.css @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2022 Savoir-faire Linux Inc. + * Author: Nicolas Vengeon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +html, +body { + margin: 0; + height: 100%; +} + +#map { + position: absolute; + top: 0; + bottom: 0; + width: 100%; +} diff --git a/src/app/webengine/map/map.html b/src/app/webengine/map/map.html new file mode 100644 index 00000000..9bb97d6a --- /dev/null +++ b/src/app/webengine/map/map.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
+ + diff --git a/src/app/webengine/map/map.js b/src/app/webengine/map/map.js new file mode 100644 index 00000000..679a269b --- /dev/null +++ b/src/app/webengine/map/map.js @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2022 Savoir-faire Linux Inc. + * Author: Nicolas Vengeon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +const {Map,View} = ol +const TileLayer = ol.layer.Tile +const ImageLayer = ol.layer.Image +const {OSM,ImageStatic} = ol.source + +var basemap = new TileLayer({ source: new OSM() }) +basemap.layer_type = "map" + +var dict = [] + +const map = new Map({ + target: 'map', + layers: [basemap], + view: new View({ + center: ol.proj.fromLonLat([2.1734, 41.3851]), + zoom: 2 + }) +}) + +function setMapView(coordos, zoom) { + map.getView().setCenter(ol.proj.fromLonLat(coordos)) + map.getView().setZoom(zoom) +} + +function dynamicZoom(longMin, latMin, longMax, latMax) { + var coordMin = ol.proj.fromLonLat([longMin,latMin]) + var coordMax = ol.proj.fromLonLat([longMax,latMax]) + var extent = [coordMin[0],coordMin[1],coordMax[0],coordMax[1]] + map.getView().fit(extent, {size: map.getSize(), maxZoom: 16, duration:500, + padding: [80 ,80 ,80 ,80]}) +} + +var extent = [0,0,50,50] +var projection = new ol.proj.Projection({ + code: 'local_image', + units: 'pixels', + extent: extent +}) + +var proj = new ol.proj.Projection({ + code: 'static-image', + units: 'pixels', + extent: extent +}) + +function setSource (coordos, authorI,imageI) { + var coord = ol.proj.fromLonLat(coordos) + var pointFeature = new ol.Feature({ + geometry: new ol.geom.Point(coord), + weight: 20 + }) + + var preStyle = new ol.style.Icon({ + src: "data:image/png;base64," + imageI}) + + //resize the image to 40 px + var image = preStyle.getImage() + if (!image.width) { + image.addEventListener('load', function () { + preStyle.setScale([40 / image.width, 40 / image.height]) + }) + } else { + preStyle.setScale([40 / image.width, 40 / image.height]) + } + + var iconStyle = new ol.style.Style({ + image: preStyle + }) + + pointFeature.setStyle(iconStyle) + var vectorSource = new ol.source.Vector({ + features: [pointFeature], + }) + + return vectorSource +} + +function newPosition (coordos, authorI, image) { + vectorSource = setSource(coordos, authorI, image) + var iconLayer = new ol.layer.Vector({source: vectorSource}) + iconLayer.layer_type = authorI + map.addLayer(iconLayer) +} + +function updatePosition (coordos, authorI) { + var coord = ol.proj.fromLonLat(coordos); + var layerArray = map.getLayers().getArray(); + for (var i = 0; i < layerArray.length; i++ ){ + if(layerArray[i].layer_type === authorI) { + layerArray[i].getSource().getFeatures()[0].getGeometry().setCoordinates(coord) + return + } + } +} + +function zoomTolayersExtent() { + var ext = ol.extent.createEmpty(); + var layerArray = map.getLayers().getArray(); + for (var i = 0; i < layerArray.length; i++ ){ + if(layerArray[i].layer_type !== "map") { + ext = ol.extent.extend(ext, layerArray[i].getSource().getExtent()); + } + } + map.getView().fit(ext, {size: map.getSize(), maxZoom: 16, duration:500, + padding: [80 ,80 ,80 ,80]}) +} + +function removePosition (authorI) { + var layerArray = map.getLayers().getArray(); + for (var i = 0; i < layerArray.length; i++ ){ + if(layerArray[i].layer_type === authorI) { + map.removeLayer(layerArray[i]) + return + } + } +} diff --git a/src/app/webengine/map/ol.css b/src/app/webengine/map/ol.css new file mode 100644 index 00000000..9f720760 --- /dev/null +++ b/src/app/webengine/map/ol.css @@ -0,0 +1,371 @@ +/* +* BSD 2-Clause License +* +* Copyright 2005-present, OpenLayers Contributors All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +:root, +:host { + --ol-background-color: white; + --ol-accent-background-color: #F5F5F5; + --ol-subtle-background-color: rgba(128, 128, 128, 0.25); + --ol-partial-background-color: rgba(255, 255, 255, 0.75); + --ol-foreground-color: #333333; + --ol-subtle-foreground-color: #666666; + --ol-brand-color: #00AAFF; +} + +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 1.5px solid var(--ol-background-color); + background-color: var(--ol-partial-background-color); +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: var(--ol-partial-background-color); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} + +.ol-scale-line-inner { + border: 1px solid var(--ol-subtle-foreground-color); + border-top: none; + color: var(--ol-foreground-color); + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; + transition: all 0.25s; +} + +.ol-scale-bar { + position: absolute; + bottom: 8px; + left: 8px; +} + +.ol-scale-bar-inner { + display: flex; +} + +.ol-scale-step-marker { + width: 1px; + height: 15px; + background-color: var(--ol-foreground-color); + float: right; + z-index: 10; +} + +.ol-scale-step-text { + position: absolute; + bottom: -5px; + font-size: 10px; + z-index: 11; + color: var(--ol-foreground-color); + text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color); +} + +.ol-scale-text { + position: absolute; + font-size: 12px; + text-align: center; + bottom: 25px; + color: var(--ol-foreground-color); + text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color); +} + +.ol-scale-singlebar { + position: relative; + height: 10px; + z-index: 9; + box-sizing: border-box; + border: 1px solid var(--ol-foreground-color); +} + +.ol-scale-singlebar-even { + background-color: var(--ol-subtle-foreground-color); +} + +.ol-scale-singlebar-odd { + background-color: var(--ol-background-color); +} + +.ol-unsupported { + display: none; +} + +.ol-viewport, +.ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; +} + +.ol-viewport canvas { + all: unset; +} + +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} + +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} + +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} + +.ol-control { + position: absolute; + background-color: var(--ol-subtle-background-color); + border-radius: 4px; +} + +.ol-zoom { + top: .5em; + left: .5em; +} + +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} + +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} + +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} + +.ol-full-screen { + right: .5em; + top: .5em; +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: var(--ol-subtle-foreground-color); + font-weight: bold; + text-decoration: none; + font-size: inherit; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: var(--ol-background-color); + border: none; + border-radius: 2px; +} + +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} + +.ol-zoom-extent button { + line-height: 1.4em; +} + +.ol-compass { + display: block; + font-weight: normal; + will-change: transform; +} + +.ol-touch .ol-control button { + font-size: 1.5em; +} + +.ol-touch .ol-zoom-extent { + top: 5.5em; +} + +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + outline: 1px solid var(--ol-subtle-foreground-color); + color: var(--ol-foreground-color); +} + +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} + +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); + display: flex; + flex-flow: row-reverse; + align-items: center; +} + +.ol-attribution a { + color: var(--ol-subtle-foreground-color); + text-decoration: none; +} + +.ol-attribution ul { + margin: 0; + padding: 1px .5em; + color: var(--ol-foreground-color); + text-shadow: 0 0 2px var(--ol-background-color); + font-size: 12px; +} + +.ol-attribution li { + display: inline; + list-style: none; +} + +.ol-attribution li:not(:last-child):after { + content: " "; +} + +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} + +.ol-attribution button { + flex-shrink: 0; +} + +.ol-attribution.ol-collapsed ul { + display: none; +} + +.ol-attribution:not(.ol-collapsed) { + background: var(--ol-partial-background-color); +} + +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; +} + +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} + +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} + +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} + +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} + +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: block; +} + +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid var(--ol-subtle-foreground-color); + height: 150px; + width: 150px; +} + +.ol-overviewmap:not(.ol-collapsed) button { + bottom: 0; + left: 0; + position: absolute; +} + +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} + +.ol-overviewmap:not(.ol-collapsed) { + background: var(--ol-subtle-background-color); +} + +.ol-overviewmap-box { + border: 1.5px dotted var(--ol-subtle-foreground-color); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} diff --git a/src/app/webengine/map/ol.js b/src/app/webengine/map/ol.js new file mode 100644 index 00000000..8df1d877 --- /dev/null +++ b/src/app/webengine/map/ol.js @@ -0,0 +1,30 @@ +/* +* BSD 2-Clause License +* +* Copyright 2005-present, OpenLayers Contributors All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +var ol=function(){"use strict";const t={1:"The view center is not defined",2:"The view resolution is not defined",3:"The view rotation is not defined",4:"`image` and `src` cannot be provided at the same time",5:"`imgSize` must be set when `image` is provided",7:"`format` must be set when `url` is set",8:"Unknown `serverType` configured",9:"`url` must be configured or set using `#setUrl()`",10:"The default `geometryFunction` can only handle `Point` geometries",11:"`options.featureTypes` must be an Array",12:"`options.geometryName` must also be provided when `options.bbox` is set",13:"Invalid corner",14:"Invalid color",15:"Tried to get a value for a key that does not exist in the cache",16:"Tried to set a value for a key that is used already",17:"`resolutions` must be sorted in descending order",18:"Either `origin` or `origins` must be configured, never both",19:"Number of `tileSizes` and `resolutions` must be equal",20:"Number of `origins` and `resolutions` must be equal",22:"Either `tileSize` or `tileSizes` must be configured, never both",24:"Invalid extent or geometry provided as `geometry`",25:"Cannot fit empty extent provided as `geometry`",26:"Features must have an id set",27:"Features must have an id set",28:'`renderMode` must be `"hybrid"` or `"vector"`',30:"The passed `feature` was already added to the source",31:"Tried to enqueue an `element` that was already added to the queue",32:"Transformation matrix cannot be inverted",33:"Invalid units",34:"Invalid geometry layout",36:"Unknown SRS type",37:"Unknown geometry type found",38:"`styleMapValue` has an unknown type",39:"Unknown geometry type",40:"Expected `feature` to have a geometry",41:"Expected an `ol/style/Style` or an array of `ol/style/Style.js`",42:"Question unknown, the answer is 42",43:"Expected `layers` to be an array or a `Collection`",47:"Expected `controls` to be an array or an `ol/Collection`",48:"Expected `interactions` to be an array or an `ol/Collection`",49:"Expected `overlays` to be an array or an `ol/Collection`",50:"`options.featureTypes` should be an Array",51:"Either `url` or `tileJSON` options must be provided",52:"Unknown `serverType` configured",53:"Unknown `tierSizeCalculation` configured",55:"The {-y} placeholder requires a tile grid with extent",56:"mapBrowserEvent must originate from a pointer event",57:"At least 2 conditions are required",59:"Invalid command found in the PBF",60:"Missing or invalid `size`",61:"Cannot determine IIIF Image API version from provided image information JSON",62:"A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUFFER`",64:"Layer opacity must be a number",66:"`forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has not been enabled. This is done by providing adequate shaders using the `hitVertexShader` and `hitFragmentShader` properties of `WebGLPointsLayerRenderer`",67:"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both",68:"A VectorTile source can only be rendered if it has a projection compatible with the view projection"};class e extends Error{constructor(e){const i=t[e];super(i),this.code=e,this.name="AssertionError",this.message=i}}class i{constructor(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}}function n(t){t.stopPropagation()}var r="propertychange";class s{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}}function o(t,e,i){let n,r;i=i||a;let s=0,o=t.length,l=!1;for(;s>1),r=+i(t[n],e),r<0?s=n+1:(o=n,l=!r);return l?s:~s}function a(t,e){return t>e?1:t0){for(r=1;r0?r-1:r:t[r-1]-e0||i&&0===s)}))}function g(){return!0}function f(){return!1}function p(){}function m(t){let e,i,n,r=!1;return function(){const s=Array.prototype.slice.call(arguments);return r&&this===n&&u(s,i)||(r=!0,n=this,i=s,e=t.apply(this,arguments)),e}}function _(t){return function(){let e;try{e=t()}catch(t){return Promise.reject(t)}return e instanceof Promise?e:Promise.resolve(e)}()}function y(t){for(const e in t)delete t[e]}function x(t){let e;for(e in t)return!1;return!e}class v extends s{constructor(t){super(),this.eventTarget_=t,this.pendingRemovals_=null,this.dispatching_=null,this.listeners_=null}addEventListener(t,e){if(!t||!e)return;const i=this.listeners_||(this.listeners_={}),n=i[t]||(i[t]=[]);n.includes(e)||n.push(e)}dispatchEvent(t){const e="string"==typeof t,n=e?t:t.type,r=this.listeners_&&this.listeners_[n];if(!r)return;const s=e?new i(t):t;s.target||(s.target=this.eventTarget_||this);const o=this.dispatching_||(this.dispatching_={}),a=this.pendingRemovals_||(this.pendingRemovals_={});let l;n in o||(o[n]=0,a[n]=0),++o[n];for(let t=0,e=r.length;t0)}removeEventListener(t,e){const i=this.listeners_&&this.listeners_[t];if(i){const n=i.indexOf(e);-1!==n&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[n]=p,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t]))}}}var S="change",w="error",E="contextmenu",T="click",C="dblclick",b="dragenter",R="dragover",P="drop",I="keydown",L="keypress",M="load",F="resize",A="touchmove",O="wheel";function N(t,e,i,n,r){if(n&&n!==t&&(i=i.bind(n)),r){const n=i;i=function(){t.removeEventListener(e,i),n.apply(this,arguments)}}const s={target:t,type:e,listener:i};return t.addEventListener(e,i),s}function D(t,e,i,n){return N(t,e,i,n,!0)}function k(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),y(t))}class G extends v{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(S)}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let r=0;r0;)this.pop()}extend(t){for(let e=0,i=t.length;ethis.getLength())throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e),this.array_.splice(t,0,e),this.updateLength_(),this.dispatchEvent(new K(W,e,t))}pop(){return this.removeAt(this.getLength()-1)}push(t){this.unique_&&this.assertUnique_(t);const e=this.getLength();return this.insertAt(e,t),this.getLength()}remove(t){const e=this.array_;for(let i=0,n=e.length;i=this.getLength())return;const e=this.array_[t];return this.array_.splice(t,1),this.updateLength_(),this.dispatchEvent(new K(Z,e,t)),e}setAt(t,e){if(t>=this.getLength())return void this.insertAt(t,e);if(t<0)throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e,t);const i=this.array_[t];this.array_[t]=e,this.dispatchEvent(new K(Z,i,t)),this.dispatchEvent(new K(W,e,t))}updateLength_(){this.set(Y,this.array_.length)}assertUnique_(t,i){for(let n=0,r=this.array_.length;nt)throw new Error("Tile load sequence violation");this.state=t,this.changed()}load(){B()}getAlpha(t,e){if(!this.transition_)return 1;let i=this.transitionStarts_[t];if(i){if(-1===i)return 1}else i=e,this.transitionStarts_[t]=i;const n=e-i+1e3/60;return n>=this.transition_?1:et(n/this.transition_)}inTransition(t){return!!this.transition_&&-1!==this.transitionStarts_[t]}endTransition(t){this.transition_&&(this.transitionStarts_[t]=-1)}}class ot extends st{constructor(t){const e=H;super(t.tileCoord,e,{transition:t.transition,interpolate:t.interpolate}),this.loader_=t.loader,this.data_=null,this.error_=null,this.size_=t.size||[256,256]}getSize(){return this.size_}getData(){return this.data_}getError(){return this.error_}load(){if(this.state!==H&&this.state!==Q)return;this.state=$,this.changed();const t=this;this.loader_().then((function(e){t.data_=e,t.state=J,t.changed()})).catch((function(e){t.error_=e,t.state=Q,t.changed()}))}}function at(t,i){if(!t)throw new e(i)}class lt extends V{constructor(t){if(super(),this.on,this.once,this.un,this.id_=void 0,this.geometryName_="geometry",this.style_=null,this.styleFunction_=void 0,this.geometryChangeKey_=null,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),t)if("function"==typeof t.getSimplifiedGeometry){const e=t;this.setGeometry(e)}else{const e=t;this.setProperties(e)}}clone(){const t=new lt(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());const e=this.getGeometry();e&&t.setGeometry(e.clone());const i=this.getStyle();return i&&t.setStyle(i),t}getGeometry(){return this.get(this.geometryName_)}getId(){return this.id_}getGeometryName(){return this.geometryName_}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}handleGeometryChange_(){this.changed()}handleGeometryChanged_(){this.geometryChangeKey_&&(k(this.geometryChangeKey_),this.geometryChangeKey_=null);const t=this.getGeometry();t&&(this.geometryChangeKey_=N(t,S,this.handleGeometryChange_,this)),this.changed()}setGeometry(t){this.set(this.geometryName_,t)}setStyle(t){this.style_=t,this.styleFunction_=t?ht(t):void 0,this.changed()}setId(t){this.id_=t,this.changed()}setGeometryName(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()}}function ht(t){if("function"==typeof t)return t;{let e;if(Array.isArray(t))e=t;else{at("function"==typeof t.getZIndex,41);e=[t]}return function(){return e}}}const ct="undefined"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():"",ut=ct.includes("firefox"),dt=ct.includes("safari")&&!ct.includes("chrom"),gt=dt&&(ct.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(ct)),ft=ct.includes("webkit")&&!ct.includes("edge"),pt=ct.includes("macintosh"),mt="undefined"!=typeof devicePixelRatio?devicePixelRatio:1,_t="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope,yt="undefined"!=typeof Image&&Image.prototype.decode,xt=function(){let t=!1;try{const e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("_",null,e),window.removeEventListener("_",null,e)}catch(t){}return t}(),vt=new Array(6);function St(){return[1,0,0,1,0,0]}function wt(t){return Tt(t,1,0,0,1,0,0)}function Et(t,e){const i=t[0],n=t[1],r=t[2],s=t[3],o=t[4],a=t[5],l=e[0],h=e[1],c=e[2],u=e[3],d=e[4],g=e[5];return t[0]=i*l+r*h,t[1]=n*l+s*h,t[2]=i*c+r*u,t[3]=n*c+s*u,t[4]=i*d+r*g+o,t[5]=n*d+s*g+a,t}function Tt(t,e,i,n,r,s,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=r,t[4]=s,t[5]=o,t}function Ct(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function bt(t,e){const i=e[0],n=e[1];return e[0]=t[0]*i+t[2]*n+t[4],e[1]=t[1]*i+t[3]*n+t[5],e}function Rt(t,e){const i=Math.cos(e),n=Math.sin(e);return Et(t,Tt(vt,i,n,-n,i,0,0))}function Pt(t,e,i){return Et(t,Tt(vt,e,0,0,i,0,0))}function It(t,e,i){return Tt(t,e,0,0,i,0,0)}function Lt(t,e,i){return Et(t,Tt(vt,1,0,0,1,e,i))}function Mt(t,e,i,n,r,s,o,a){const l=Math.sin(s),h=Math.cos(s);return t[0]=n*h,t[1]=r*l,t[2]=-n*l,t[3]=r*h,t[4]=o*n*h-a*n*l+e,t[5]=o*r*l+a*r*h+i,t}function Ft(t,e){const i=At(e);at(0!==i,32);const n=e[0],r=e[1],s=e[2],o=e[3],a=e[4],l=e[5];return t[0]=o/i,t[1]=-r/i,t[2]=-s/i,t[3]=n/i,t[4]=(s*l-o*a)/i,t[5]=-(n*l-r*a)/i,t}function At(t){return t[0]*t[3]-t[1]*t[2]}let Ot;function Nt(t){const e="matrix("+t.join(", ")+")";if(_t)return e;const i=Ot||(Ot=document.createElement("div"));return i.style.transform=e,i.style.transform}var Dt=0,kt=1,Gt=2,jt=4,Bt=8,Ut=16;function zt(t){const e=Ht();for(let i=0,n=t.length;ir&&(l|=jt),as&&(l|=Gt),l===Dt&&(l=kt),l}function Ht(){return[1/0,1/0,-1/0,-1/0]}function $t(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function Jt(t){return $t(1/0,1/0,-1/0,-1/0,t)}function Qt(t,e){const i=t[0],n=t[1];return $t(i,n,i,n,e)}function te(t,e,i,n,r){return oe(Jt(r),t,e,i,n)}function ee(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function ie(t,e,i){return Math.abs(t[0]-e[0])t[2]&&(t[2]=e[2]),e[1]t[3]&&(t[3]=e[3]),t}function re(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function se(t,e){for(let i=0,n=e.length;ie[0]?n[0]=t[0]:n[0]=e[0],t[1]>e[1]?n[1]=t[1]:n[1]=e[1],t[2]=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Ee(t){return t[2]=o&&p<=l),n||!(s&jt)||r&jt||(m=g-(d-l)*f,n=m>=a&&m<=h),n||!(s&Bt)||r&Bt||(p=d-(g-a)/f,n=p>=o&&p<=l),n||!(s&Ut)||r&Ut||(m=g-(d-o)*f,n=m>=a&&m<=h)}return n}function Re(t,e,i,n){let r=[];if(n>1){const e=t[2]-t[0],i=t[3]-t[1];for(let s=0;s=i[2])){const e=Se(i),r=Math.floor((n[0]-i[0])/e)*e;t[0]-=r,t[2]-=r}return t}function Ie(t,e){if(e.canWrapX()){const i=e.getExtent();if(!isFinite(t[0])||!isFinite(t[2]))return[[i[0],t[1],i[2],t[3]]];Pe(t,e);const n=Se(i);if(Se(t)>n)return[[i[0],t[1],i[2],t[3]]];if(t[0]i[2])return[[t[0],t[1],i[2],t[3]],[i[0],t[1],t[2]-n,t[3]]]}return[t]}const Le={9001:"m",9002:"ft",9003:"us-ft",9101:"radians",9102:"degrees"};function Me(t){return Le[t]}const Fe={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};class Ae{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||Fe[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}}const Oe=6378137,Ne=Math.PI*Oe,De=[-Ne,-Ne,Ne,Ne],ke=[-180,-85,180,85],Ge=Oe*Math.log(Math.tan(Math.PI/2));class je extends Ae{constructor(t){super({code:t,units:"m",extent:De,global:!0,worldExtent:ke,getPointResolution:function(t,e){return t/Math.cosh(e[1]/Oe)}})}}const Be=[new je("EPSG:3857"),new je("EPSG:102100"),new je("EPSG:102113"),new je("EPSG:900913"),new je("http://www.opengis.net/def/crs/EPSG/0/3857"),new je("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Ue(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;rGe?i=Ge:i<-Ge&&(i=-Ge),e[r+1]=i}return e}function ze(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;r1?(i=r,n=s):l>0&&(i+=o*l,n+=a*l)}return ri(t,e,i,n)}function ri(t,e,i,n){const r=i-t,s=n-e;return r*r+s*s}function si(t){const e=t.length;for(let i=0;ir&&(r=e,n=s)}if(0===r)return null;const s=t[n];t[n]=t[i],t[i]=s;for(let n=i+1;n=0;n--){i[n]=t[n][e]/t[n][n];for(let r=n-1;r>=0;r--)t[r][e]-=t[r][n]*i[n]}return i}function oi(t){return 180*t/Math.PI}function ai(t){return t*Math.PI/180}function li(t,e){const i=t%e;return i*e<0?i+e:i}function hi(t,e,i){return t+i*(e-t)}function ci(t,e){const i=Math.pow(10,e);return Math.round(t*i)/i}function ui(t,e){return Math.round(ci(t,e))}function di(t,e){return Math.floor(ci(t,e))}function gi(t,e){return Math.ceil(ci(t,e))}function fi(t,e,i){const n=void 0!==i?t.toFixed(i):""+t;let r=n.indexOf(".");return r=-1===r?n.length:r,r>e?n:new Array(1+e-r).join("0")+n}function pi(t,e){const i=(""+t).split("."),n=(""+e).split(".");for(let t=0;tr)return 1;if(r>e)return-1}return 0}function mi(t,e){return t[0]+=+e[0],t[1]+=+e[1],t}function _i(t,e){const i=e.getRadius(),n=e.getCenter(),r=n[0],s=n[1];let o=t[0]-r;const a=t[1]-s;0===o&&0===a&&(o=1);const l=Math.sqrt(o*o+a*a);return[r+i*o/l,s+i*a/l]}function yi(t,e){const i=t[0],n=t[1],r=e[0],s=e[1],o=r[0],a=r[1],l=s[0],h=s[1],c=l-o,u=h-a,d=0===c&&0===u?0:(c*(i-o)+u*(n-a))/(c*c+u*u||0);let g,f;return d<=0?(g=o,f=a):d>=1?(g=l,f=h):(g=o+d*c,f=a+d*u),[g,f]}function xi(t,e,i){const n=li(e+180,360)-180,r=Math.abs(3600*n),s=i||0;let o=Math.floor(r/3600),a=Math.floor((r-3600*o)/60),l=ci(r-3600*o-60*a,s);l>=60&&(l=0,a+=1),a>=60&&(a=0,o+=1);let h=o+"°";return 0===a&&0===l||(h+=" "+fi(a,2)+"′"),0!==l&&(h+=" "+fi(l,2,s)+"″"),0!==n&&(h+=" "+t.charAt(n<0?1:0)),h}function vi(t,e,i){return t?e.replace("{x}",t[0].toFixed(i)).replace("{y}",t[1].toFixed(i)):""}function Si(t,e){let i=!0;for(let n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function wi(t,e){const i=Math.cos(e),n=Math.sin(e),r=t[0]*i-t[1]*n,s=t[1]*i+t[0]*n;return t[0]=r,t[1]=s,t}function Ei(t,e){return t[0]*=e,t[1]*=e,t}function Ti(t,e){const i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function Ci(t,e){return Math.sqrt(Ti(t,e))}function bi(t,e){return Ti(t,yi(t,e))}function Ri(t,e){return vi(t,"{x}, {y}",e)}function Pi(t,e){if(e.canWrapX()){const i=Se(e.getExtent()),n=Ii(t,e,i);n&&(t[0]-=n*i)}return t}function Ii(t,e,i){const n=e.getExtent();let r=0;return e.canWrapX()&&(t[0]n[2])&&(i=i||Se(n),r=Math.floor((t[0]-n[0])/i)),r}const Li=6371008.8;function Mi(t,e,i){i=i||Li;const n=ai(t[1]),r=ai(e[1]),s=(r-n)/2,o=ai(e[0]-t[0])/2,a=Math.sin(s)*Math.sin(s)+Math.sin(o)*Math.sin(o)*Math.cos(n)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))}function Fi(t,e){let i=0;for(let n=0,r=t.length;n=o?e[s+t]:r[t]}return i}}function Yi(t,e,i,n){const r=Ui(t),s=Ui(e);ti(r,s,Zi(i)),ti(s,r,Zi(n))}function Ki(t,e){if(t===e)return!0;const i=t.getUnits()===e.getUnits();if(t.getCode()===e.getCode())return i;return qi(t,e)===ki&&i}function qi(t,e){let i=ei(t.getCode(),e.getCode());return i||(i=Gi),i}function Hi(t,e){return qi(Ui(t),Ui(e))}function $i(t,e,i){return Hi(e,i)(t,void 0,t.length)}function Ji(t,e,i,n){return Re(t,Hi(e,i),void 0,n)}let Qi=null;function tn(t){Qi=Ui(t)}function en(){return Qi}function nn(t,e){return Qi?$i(t,e,Qi):t}function rn(t,e){return Qi?$i(t,Qi,e):(Ni&&!Si(t,[0,0])&&t[0]>=-180&&t[0]<=180&&t[1]>=-90&&t[1]<=90&&(Ni=!1,console.warn("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),t)}function sn(t,e){return Qi?Ji(t,e,Qi):t}function on(t,e){return Qi?Ji(t,Qi,e):t}function an(t,e){if(!Qi)return t;const i=Ui(e).getUnits(),n=Qi.getUnits();return i&&n?t*Fe[i]/Fe[n]:t}function ln(t,e){if(!Qi)return t;const i=Ui(e).getUnits(),n=Qi.getUnits();return i&&n?t*Fe[n]/Fe[i]:t}function hn(t,e,i){return function(n){let r,s;if(t.canWrapX()){const e=t.getExtent(),o=Se(e);s=Ii(n=n.slice(0),t,o),s&&(n[0]=n[0]-s*o),n[0]=ii(n[0],e[0],e[2]),n[1]=ii(n[1],e[1],e[3]),r=i(n)}else r=i(n);return s&&e.canWrapX()&&(r[0]+=s*Se(e.getExtent())),r}}function cn(){Xi(Be),Xi(Ye),Vi(Ye,Be,Ue,ze)}function un(t,e,i,n,r,s){s=s||[];let o=0;for(let a=e;a1)u=i;else{if(d>0){for(let r=0;rr&&(r=a),s=i,o=n}return r}function wn(t,e,i,n,r){for(let s=0,o=i.length;s0;){const i=h.pop(),s=h.pop();let o=0;const a=t[s],u=t[s+1],d=t[i],g=t[i+1];for(let e=s+n;eo&&(c=e,o=i)}o>r&&(l[(c-e)/n]=1,s+nr&&(s[o++]=h,s[o++]=c,a=h,l=c);return h==a&&c==l||(s[o++]=h,s[o++]=c),o}function On(t,e){return e*Math.round(t/e)}function Nn(t,e,i,n,r,s,o){if(e==i)return o;let a,l,h=On(t[e],r),c=On(t[e+1],r);e+=n,s[o++]=h,s[o++]=c;do{if(a=On(t[e],r),l=On(t[e+1],r),(e+=n)==i)return s[o++]=a,s[o++]=l,o}while(a==h&&l==c);for(;e0&&f>d)&&(g<0&&p0&&p>g)?(a=i,l=u):(s[o++]=a,s[o++]=l,h=a,c=l,a=i,l=u)}return s[o++]=a,s[o++]=l,o}function Dn(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;ls&&(i-a)*(s-l)-(r-a)*(n-l)>0&&o++:n<=s&&(i-a)*(s-l)-(r-a)*(n-l)<0&&o--,a=i,l=n}return 0!==o}function Kn(t,e,i,n,r,s){if(0===i.length)return!1;if(!Yn(t,e,i[0],n,r,s))return!1;for(let e=1,o=i.length;ey&&(c=(u+d)/2,Kn(t,e,i,n,c,p)&&(_=c,y=r)),u=d}return isNaN(_)&&(_=r[s]),o?(o.push(_,p,y),o):[_,p,y]}function $n(t,e,i,n,r){let s=[];for(let o=0,a=i.length;o=r[0]&&s[2]<=r[2]||(s[1]>=r[1]&&s[3]<=r[3]||Jn(t,e,i,n,(function(t,e){return be(r,t,e)})))))}function tr(t,e,i,n,r){for(let s=0,o=i.length;s0}function or(t,e,i,n,r){r=void 0!==r&&r;for(let s=0,o=i.length;s0&&this.points_[i+2]>t;)i-=3;const n=this.points_[e+2]-this.points_[i+2];if(n<1e3/60)return!1;const r=this.points_[e]-this.points_[i],s=this.points_[e+1]-this.points_[i+1];return this.angle_=Math.atan2(s,r),this.initialVelocity_=Math.sqrt(r*r+s*s)/n,this.initialVelocity_>this.minVelocity_}getDistance(){return(this.minVelocity_-this.initialVelocity_)/this.decay_}getAngle(){return this.angle_}}const Zr=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,Yr=/^([a-z]*)$|^hsla?\(.*\)$/i;function Kr(t){return"string"==typeof t?t:Qr(t)}function qr(t){const e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);const t=getComputedStyle(e).color;return document.body.removeChild(e),t}return""}const Hr=function(){const t={};let e=0;return function(i){let n;if(t.hasOwnProperty(i))n=t[i];else{if(e>=1024){let i=0;for(const n in t)0==(3&i++)&&(delete t[n],--e)}n=function(t){let e,i,n,r,s;Yr.exec(t)&&(t=qr(t));if(Zr.exec(t)){const o=t.length-1;let a;a=o<=4?1:2;const l=4===o||8===o;e=parseInt(t.substr(1+0*a,a),16),i=parseInt(t.substr(1+1*a,a),16),n=parseInt(t.substr(1+2*a,a),16),r=l?parseInt(t.substr(1+3*a,a),16):255,1==a&&(e=(e<<4)+e,i=(i<<4)+i,n=(n<<4)+n,l&&(r=(r<<4)+r)),s=[e,i,n,r/255]}else t.startsWith("rgba(")?(s=t.slice(5,-1).split(",").map(Number),Jr(s)):t.startsWith("rgb(")?(s=t.slice(4,-1).split(",").map(Number),s.push(1),Jr(s)):at(!1,14);return s}(i),t[i]=n,++e}return n}}();function $r(t){return Array.isArray(t)?t:Hr(t)}function Jr(t){return t[0]=ii(t[0]+.5|0,0,255),t[1]=ii(t[1]+.5|0,0,255),t[2]=ii(t[2]+.5|0,0,255),t[3]=ii(t[3],0,1),t}function Qr(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let n=t[2];n!=(0|n)&&(n=n+.5|0);return"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:Math.round(100*t[3])/100)+")"}function ts(t){return Yr.test(t)&&(t=qr(t)),Zr.test(t)||t.startsWith("rgba(")||t.startsWith("rgb(")}class es{constructor(){this.cache_={},this.cacheSize_=0,this.maxCacheSize_=32}clear(){this.cache_={},this.cacheSize_=0}canExpireCache(){return this.cacheSize_>this.maxCacheSize_}expire(){if(this.canExpireCache()){let t=0;for(const e in this.cache_){const i=this.cache_[e];0!=(3&t++)||i.hasListener()||(delete this.cache_[e],--this.cacheSize_)}}}get(t,e,i){const n=is(t,e,i);return n in this.cache_?this.cache_[n]:null}set(t,e,i,n){const r=is(t,e,i);this.cache_[r]=n,++this.cacheSize_}setSize(t){this.maxCacheSize_=t,this.expire()}}function is(t,e,i){return e+":"+t+":"+(i?Kr(i):"null")}const ns=new es;var rs="opacity",ss="visible",os="extent",as="zIndex",ls="maxResolution",hs="minResolution",cs="maxZoom",us="minZoom",ds="source",gs="map";class fs extends V{constructor(t){super(),this.on,this.once,this.un,this.background_=t.background;const e=Object.assign({},t);"object"==typeof t.properties&&(delete e.properties,Object.assign(e,t.properties)),e[rs]=void 0!==t.opacity?t.opacity:1,at("number"==typeof e[rs],64),e[ss]=void 0===t.visible||t.visible,e[as]=t.zIndex,e[ls]=void 0!==t.maxResolution?t.maxResolution:1/0,e[hs]=void 0!==t.minResolution?t.minResolution:0,e[us]=void 0!==t.minZoom?t.minZoom:-1/0,e[cs]=void 0!==t.maxZoom?t.maxZoom:1/0,this.className_=void 0!==e.className?e.className:"ol-layer",delete e.className,this.setProperties(e),this.state_=null}getBackground(){return this.background_}getClassName(){return this.className_}getLayerState(t){const e=this.state_||{layer:this,managed:void 0===t||t},i=this.getZIndex();return e.opacity=ii(Math.round(100*this.getOpacity())/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=void 0!==i||e.managed?i:1/0,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e}getLayersArray(t){return B()}getLayerStatesArray(t){return B()}getExtent(){return this.get(os)}getMaxResolution(){return this.get(ls)}getMinResolution(){return this.get(hs)}getMinZoom(){return this.get(us)}getMaxZoom(){return this.get(cs)}getOpacity(){return this.get(rs)}getSourceState(){return B()}getVisible(){return this.get(ss)}getZIndex(){return this.get(as)}setBackground(t){this.background_=t,this.changed()}setExtent(t){this.set(os,t)}setMaxResolution(t){this.set(ls,t)}setMinResolution(t){this.set(hs,t)}setMaxZoom(t){this.set(cs,t)}setMinZoom(t){this.set(us,t)}setOpacity(t){at("number"==typeof t,64),this.set(rs,t)}setVisible(t){this.set(ss,t)}setZIndex(t){this.set(as,t)}disposeInternal(){this.state_&&(this.state_.layer=null,this.state_=null),super.disposeInternal()}}var ps="prerender",ms="postrender",_s="precompose",ys="postcompose",xs="rendercomplete";class vs extends fs{constructor(t){const e=Object.assign({},t);delete e.source,super(e),this.on,this.once,this.un,this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,this.renderer_=null,this.rendered=!1,t.render&&(this.render=t.render),t.map&&this.setMap(t.map),this.addChangeListener(ds,this.handleSourcePropertyChange_);const i=t.source?t.source:null;this.setSource(i)}getLayersArray(t){return(t=t||[]).push(this),t}getLayerStatesArray(t){return(t=t||[]).push(this.getLayerState()),t}getSource(){return this.get(ds)||null}getRenderSource(){return this.getSource()}getSourceState(){const t=this.getSource();return t?t.getState():"undefined"}handleSourceChange_(){this.changed()}handleSourcePropertyChange_(){this.sourceChangeKey_&&(k(this.sourceChangeKey_),this.sourceChangeKey_=null);const t=this.getSource();t&&(this.sourceChangeKey_=N(t,S,this.handleSourceChange_,this)),this.changed()}getFeatures(t){return this.renderer_?this.renderer_.getFeatures(t):new Promise((t=>t([])))}getData(t){return this.renderer_&&this.rendered?this.renderer_.getData(t):null}render(t,e){const i=this.getRenderer();if(i.prepareFrame(t))return this.rendered=!0,i.renderFrame(t,e)}unrender(){this.rendered=!1}setMapInternal(t){t||this.unrender(),this.set(gs,t)}getMapInternal(){return this.get(gs)}setMap(t){this.mapPrecomposeKey_&&(k(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(k(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=N(t,_s,(function(t){const e=t.frameState.layerStatesArray,i=this.getLayerState(!1);at(!e.some((function(t){return t.layer===i.layer})),67),e.push(i)}),this),this.mapRenderKey_=N(this,S,t.render,t),this.changed())}setSource(t){this.set(ds,t)}getRenderer(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_}hasRenderer(){return!!this.renderer_}createRenderer(){return null}disposeInternal(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_),this.setSource(null),super.disposeInternal()}}function Ss(t,e){if(!t.visible)return!1;const i=e.resolution;if(i=t.maxResolution)return!1;const n=e.zoom;return n>t.minZoom&&n<=t.maxZoom}class ws extends s{constructor(t){super(),this.map_=t}dispatchRenderEvent(t,e){B()}calculateMatrices2D(t){const e=t.viewState,i=t.coordinateToPixelTransform,n=t.pixelToCoordinateTransform;Mt(i,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),Ft(n,i)}forEachFeatureAtCoordinate(t,e,i,n,r,s,o,a){let l;const h=e.viewState;function c(t,e,i,n){return r.call(s,e,t?i:null,n)}const u=h.projection,d=Pi(t.slice(),u),g=[[0,0]];if(u.canWrapX()&&n){const t=Se(u.getExtent());g.push([-t,0],[t,0])}const f=e.layerStatesArray,p=f.length,m=[],_=[];for(let n=0;n=0;--r){const s=f[r],u=s.layer;if(u.hasRenderer()&&Ss(s,h)&&o.call(a,u)){const r=u.getRenderer(),o=u.getSource();if(r&&o){const a=o.getWrapX()?d:t,h=c.bind(null,s.managed);_[0]=a[0]+g[n][0],_[1]=a[1]+g[n][1],l=r.forEachFeatureAtCoordinate(_,e,i,h,m)}if(l)return l}}if(0===m.length)return;const y=1/m.length;return m.forEach(((t,e)=>t.distanceSq+=e*y)),m.sort(((t,e)=>t.distanceSq-e.distanceSq)),m.some((t=>l=t.callback(t.feature,t.layer,t.geometry))),l}hasFeatureAtCoordinate(t,e,i,n,r,s){return void 0!==this.forEachFeatureAtCoordinate(t,e,i,n,g,this,r,s)}getMap(){return this.map_}renderFrame(t){B()}scheduleExpireIconCache(t){ns.canExpireCache()&&t.postRenderFunctions.push(Es)}}function Es(t,e){ns.expire()}class Ts extends i{constructor(t,e,i,n){super(t),this.inversePixelTransform=e,this.frameState=i,this.context=n}}const Cs="ol-hidden",bs="ol-selectable",Rs="ol-unselectable",Ps="ol-unsupported",Is="ol-control",Ls="ol-collapsed",Ms=new RegExp(["^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)","(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?","(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))","(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))","?\\s*([-,\\\"\\'\\sa-z]+?)\\s*$"].join(""),"i"),Fs=["style","variant","weight","size","lineHeight","family"],As=function(t){const e=t.match(Ms);if(!e)return null;const i={lineHeight:"normal",size:"1.2em",style:"normal",weight:"normal",variant:"normal"};for(let t=0,n=Fs.length;tMath.max(e,$s(t,i))),0);return i[e]=n,n}function Qs(t,e){const i=[],n=[],r=[];let s=0,o=0,a=0,l=0;for(let h=0,c=e.length;h<=c;h+=2){const u=e[h];if("\n"===u||h===c){s=Math.max(s,o),r.push(o),o=0,a+=l;continue}const d=e[h+1]||t.font,g=$s(d,u);i.push(g),o+=g;const f=qs(d);n.push(f),l=Math.max(l,f)}return{width:s,height:a,widths:i,heights:n,lineWidths:r}}function to(t,e,i,n,r,s,o,a,l,h,c){t.save(),1!==i&&(t.globalAlpha*=i),e&&t.setTransform.apply(t,e),n.contextInstructions?(t.translate(l,h),t.scale(c[0],c[1]),function(t,e){const i=t.contextInstructions;for(let t=0,n=i.length;t=0;--e)n[e].renderDeclutter(t);Xr(this.element_,this.children_),this.dispatchRenderEvent(ys,t),this.renderedVisible_||(this.element_.style.display="",this.renderedVisible_=!0),this.scheduleExpireIconCache(t)}}class io extends i{constructor(t,e){super(t),this.layer=e}}const no="layers";class ro extends fs{constructor(t){t=t||{};const e=Object.assign({},t);delete e.layers;let i=t.layers;super(e),this.on,this.once,this.un,this.layersListenerKeys_=[],this.listenerKeys_={},this.addChangeListener(no,this.handleLayersChanged_),i?Array.isArray(i)?i=new q(i.slice(),{unique:!0}):at("function"==typeof i.getArray,43):i=new q(void 0,{unique:!0}),this.setLayers(i)}handleLayerChange_(){this.changed()}handleLayersChanged_(){this.layersListenerKeys_.forEach(k),this.layersListenerKeys_.length=0;const t=this.getLayers();this.layersListenerKeys_.push(N(t,W,this.handleLayersAdd_,this),N(t,Z,this.handleLayersRemove_,this));for(const t in this.listenerKeys_)this.listenerKeys_[t].forEach(k);y(this.listenerKeys_);const e=t.getArray();for(let t=0,i=e.length;tthis.moveTolerance_||Math.abs(t.clientY-this.down_.clientY)>this.moveTolerance_}disposeInternal(){this.relayedListenerKey_&&(k(this.relayedListenerKey_),this.relayedListenerKey_=null),this.element_.removeEventListener(A,this.boundHandleTouchMove_),this.pointerdownListenerKey_&&(k(this.pointerdownListenerKey_),this.pointerdownListenerKey_=null),this.dragListenerKeys_.forEach(k),this.dragListenerKeys_.length=0,this.element_=null,super.disposeInternal()}}var fo="postrender",po="movestart",mo="moveend",_o="loadstart",yo="loadend",xo="layergroup",vo="size",So="target",wo="view";const Eo=1/0;class To{constructor(t,e){this.priorityFunction_=t,this.keyFunction_=e,this.elements_=[],this.priorities_=[],this.queuedElements_={}}clear(){this.elements_.length=0,this.priorities_.length=0,y(this.queuedElements_)}dequeue(){const t=this.elements_,e=this.priorities_,i=t[0];1==t.length?(t.length=0,e.length=0):(t[0]=t.pop(),e[0]=e.pop(),this.siftUp_(0));const n=this.keyFunction_(i);return delete this.queuedElements_[n],i}enqueue(t){at(!(this.keyFunction_(t)in this.queuedElements_),31);const e=this.priorityFunction_(t);return e!=Eo&&(this.elements_.push(t),this.priorities_.push(e),this.queuedElements_[this.keyFunction_(t)]=!0,this.siftDown_(0,this.elements_.length-1),!0)}getCount(){return this.elements_.length}getLeftChildIndex_(t){return 2*t+1}getRightChildIndex_(t){return 2*t+2}getParentIndex_(t){return t-1>>1}heapify_(){let t;for(t=(this.elements_.length>>1)-1;t>=0;t--)this.siftUp_(t)}isEmpty(){return 0===this.elements_.length}isKeyQueued(t){return t in this.queuedElements_}isQueued(t){return this.isKeyQueued(this.keyFunction_(t))}siftUp_(t){const e=this.elements_,i=this.priorities_,n=e.length,r=e[t],s=i[t],o=t;for(;t>1;){const r=this.getLeftChildIndex_(t),s=this.getRightChildIndex_(t),o=st;){const t=this.getParentIndex_(e);if(!(n[t]>s))break;i[e]=i[t],n[e]=n[t],e=t}i[e]=r,n[e]=s}reprioritize(){const t=this.priorityFunction_,e=this.elements_,i=this.priorities_;let n=0;const r=e.length;let s,o,a;for(o=0;o0;)n=this.dequeue()[0],r=n.getKey(),i=n.getState(),i!==H||r in this.tilesLoadingKeys_||(this.tilesLoadingKeys_[r]=!0,++this.tilesLoading_,++s,n.load())}}function bo(t,e,i,n,r){if(!t||!(i in t.wantedTiles))return Eo;if(!t.wantedTiles[i][e.getKey()])return Eo;const s=t.viewState.center,o=n[0]-s[0],a=n[1]-s[1];return 65536*Math.log(r)+Math.sqrt(o*o+a*a)/r}var Ro=0,Po=1,Io={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};const Lo=256;function Mo(t,e,i){return function(n,r,s,o,a){if(!n)return;if(!r&&!e)return n;const l=e?0:s[0]*r,h=e?0:s[1]*r,c=a?a[0]:0,u=a?a[1]:0;let d=t[0]+l/2+c,g=t[2]-l/2+c,f=t[1]+h/2+u,p=t[3]-h/2+u;d>g&&(d=(g+d)/2,g=d),f>p&&(f=(p+f)/2,p=f);let m=ii(n[0],d,g),_=ii(n[1],f,p);if(o&&i&&r){const t=30*r;m+=-t*Math.log(1+Math.max(0,d-n[0])/t)+t*Math.log(1+Math.max(0,n[0]-g)/t),_+=-t*Math.log(1+Math.max(0,f-n[1])/t)+t*Math.log(1+Math.max(0,n[1]-p)/t)}return[m,_]}}function Fo(t){return t}function Ao(t,e,i,n){const r=Se(e)/i[0],s=_e(e)/i[1];return n?Math.min(t,Math.max(r,s)):Math.min(t,Math.min(r,s))}function Oo(t,e,i){let n=Math.min(t,e);return n*=Math.log(1+50*Math.max(0,t/e-1))/50+1,i&&(n=Math.max(n,i),n/=Math.log(1+50*Math.max(0,i/t-1))/50+1),ii(n,i/2,2*e)}function No(t,e,i,n){return e=void 0===e||e,function(r,s,o,a){if(void 0!==r){const h=t[0],c=t[t.length-1],u=i?Ao(h,i,o,n):h;if(a)return e?Oo(r,u,c):ii(r,c,u);const d=Math.min(u,r),g=Math.floor(l(t,d,s));return t[g]>u&&g1&&"function"==typeof arguments[i-1]&&(e=arguments[i-1],--i);let n=0;for(;n0}getInteracting(){return this.hints_[Po]>0}cancelAnimations(){let t;this.setHint(Ro,-this.hints_[Ro]);for(let e=0,i=this.animations_.length;e=0;--i){const n=this.animations_[i];let r=!0;for(let i=0,s=n.length;i0?o/s.duration:1;a>=1?(s.complete=!0,a=1):r=!1;const l=s.easing(a);if(s.sourceCenter){const t=s.sourceCenter[0],e=s.sourceCenter[1],i=s.targetCenter[0],n=s.targetCenter[1];this.nextCenter_=s.targetCenter;const r=t+l*(i-t),o=e+l*(n-e);this.targetCenter_=[r,o]}if(s.sourceResolution&&s.targetResolution){const t=1===l?s.targetResolution:s.sourceResolution+l*(s.targetResolution-s.sourceResolution);if(s.anchor){const e=this.getViewportSize_(this.getRotation()),i=this.constraints_.resolution(t,0,e,!0);this.targetCenter_=this.calculateCenterZoom(i,s.anchor)}this.nextResolution_=s.targetResolution,this.targetResolution_=t,this.applyTargetState_(!0)}if(void 0!==s.sourceRotation&&void 0!==s.targetRotation){const t=1===l?li(s.targetRotation+Math.PI,2*Math.PI)-Math.PI:s.sourceRotation+l*(s.targetRotation-s.sourceRotation);if(s.anchor){const e=this.constraints_.rotation(t,!0);this.targetCenter_=this.calculateCenterRotate(e,s.anchor)}this.nextRotation_=s.targetRotation,this.targetRotation_=t}if(this.applyTargetState_(!0),e=!0,!s.complete)break}if(r){this.animations_[i]=null,this.setHint(Ro,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;const t=n[0].callback;t&&Xo(t,!0)}}this.animations_=this.animations_.filter(Boolean),e&&void 0===this.updateAnimationKey_&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}calculateCenterRotate(t,e){let i;const n=this.getCenterInternal();return void 0!==n&&(i=[n[0]-e[0],n[1]-e[1]],wi(i,t-this.getRotation()),mi(i,e)),i}calculateCenterZoom(t,e){let i;const n=this.getCenterInternal(),r=this.getResolution();if(void 0!==n&&void 0!==r){i=[e[0]-t*(e[0]-n[0])/r,e[1]-t*(e[1]-n[1])/r]}return i}getViewportSize_(t){const e=this.viewportSize_;if(t){const i=e[0],n=e[1];return[Math.abs(i*Math.cos(t))+Math.abs(n*Math.sin(t)),Math.abs(i*Math.sin(t))+Math.abs(n*Math.cos(t))]}return e}setViewportSize(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)}getCenter(){const t=this.getCenterInternal();return t?nn(t,this.getProjection()):t}getCenterInternal(){return this.get(Io.CENTER)}getConstraints(){return this.constraints_}getConstrainResolution(){return this.get("constrainResolution")}getHints(t){return void 0!==t?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()}calculateExtent(t){return sn(this.calculateExtentInternal(t),this.getProjection())}calculateExtentInternal(t){t=t||this.getViewportSizeMinusPadding_();const e=this.getCenterInternal();at(e,1);const i=this.getResolution();at(void 0!==i,2);const n=this.getRotation();return at(void 0!==n,3),pe(e,i,n,t)}getMaxResolution(){return this.maxResolution_}getMinResolution(){return this.minResolution_}getMaxZoom(){return this.getZoomForResolution(this.minResolution_)}setMaxZoom(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))}getMinZoom(){return this.getZoomForResolution(this.maxResolution_)}setMinZoom(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))}setConstrainResolution(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))}getProjection(){return this.projection_}getResolution(){return this.get(Io.RESOLUTION)}getResolutions(){return this.resolutions_}getResolutionForExtent(t,e){return this.getResolutionForExtentInternal(on(t,this.getProjection()),e)}getResolutionForExtentInternal(t,e){e=e||this.getViewportSizeMinusPadding_();const i=Se(t)/e[0],n=_e(t)/e[1];return Math.max(i,n)}getResolutionForValueFunction(t){t=t||2;const e=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,n=Math.log(e/i)/Math.log(t);return function(i){return e/Math.pow(t,i*n)}}getRotation(){return this.get(Io.ROTATION)}getValueForResolutionFunction(t){const e=Math.log(t||2),i=this.getConstrainedResolution(this.maxResolution_),n=this.minResolution_,r=Math.log(i/n)/e;return function(t){return Math.log(i/t)/e/r}}getViewportSizeMinusPadding_(t){let e=this.getViewportSize_(t);const i=this.padding_;return i&&(e=[e[0]-i[1]-i[3],e[1]-i[0]-i[2]]),e}getState(){const t=this.getProjection(),e=this.getResolution(),i=this.getRotation();let n=this.getCenterInternal();const r=this.padding_;if(r){const t=this.getViewportSizeMinusPadding_();n=Ko(n,this.getViewportSize_(),[t[0]/2+r[3],t[1]/2+r[0]],e,i)}return{center:n.slice(0),projection:void 0!==t?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:i,zoom:this.getZoom()}}getZoom(){let t;const e=this.getResolution();return void 0!==e&&(t=this.getZoomForResolution(e)),t}getZoomForResolution(t){let e,i,n=this.minZoom_||0;if(this.resolutions_){const r=l(this.resolutions_,t,1);n=r,e=this.resolutions_[r],i=r==this.resolutions_.length-1?2:e/this.resolutions_[r+1]}else e=this.maxResolution_,i=this.zoomFactor_;return n+Math.log(e/t)/Math.log(i)}getResolutionForZoom(t){if(this.resolutions_){if(this.resolutions_.length<=1)return 0;const e=ii(Math.floor(t),0,this.resolutions_.length-2),i=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(i,ii(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)}fit(t,e){let i;if(at(Array.isArray(t)||"function"==typeof t.getSimplifiedGeometry,24),Array.isArray(t)){at(!Ee(t),25);i=gr(on(t,this.getProjection()))}else if("Circle"===t.getType()){const e=on(t.getExtent(),this.getProjection());i=gr(e),i.rotate(this.getRotation(),ge(e))}else{const e=en();i=e?t.clone().transform(e,this.getProjection()):t}this.fitInternal(i,e)}rotatedExtentForGeometry(t){const e=this.getRotation(),i=Math.cos(e),n=Math.sin(-e),r=t.getFlatCoordinates(),s=t.getStride();let o=1/0,a=1/0,l=-1/0,h=-1/0;for(let t=0,e=r.length;t0;if(this.renderedVisible_!=i&&(this.element.style.display=i?"":"none",this.renderedVisible_=i),!u(e,this.renderedAttributions_)){zr(this.ulElement_);for(let t=0,i=e.length;t0&&e%(2*Math.PI)!=0?t.animate({rotation:0,duration:this.duration_,easing:it}):t.setRotation(0))}render(t){const e=t.frameState;if(!e)return;const i=e.viewState.rotation;if(i!=this.rotation_){const t="rotate("+i+"rad)";if(this.autoHide_){const t=this.element.classList.contains(Cs);t||0!==i?t&&0!==i&&this.element.classList.remove(Cs):this.element.classList.add(Cs)}this.label_.style.transform=t}this.rotation_=i}}class Jo extends qo{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target});const e=void 0!==t.className?t.className:"ol-zoom",i=void 0!==t.delta?t.delta:1,n=void 0!==t.zoomInClassName?t.zoomInClassName:e+"-in",r=void 0!==t.zoomOutClassName?t.zoomOutClassName:e+"-out",s=void 0!==t.zoomInLabel?t.zoomInLabel:"+",o=void 0!==t.zoomOutLabel?t.zoomOutLabel:"–",a=void 0!==t.zoomInTipLabel?t.zoomInTipLabel:"Zoom in",l=void 0!==t.zoomOutTipLabel?t.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=n,h.setAttribute("type","button"),h.title=a,h.appendChild("string"==typeof s?document.createTextNode(s):s),h.addEventListener(T,this.handleClick_.bind(this,i),!1);const c=document.createElement("button");c.className=r,c.setAttribute("type","button"),c.title=l,c.appendChild("string"==typeof o?document.createTextNode(o):o),c.addEventListener(T,this.handleClick_.bind(this,-i),!1);const u=e+" "+"ol-unselectable "+Is,d=this.element;d.className=u,d.appendChild(h),d.appendChild(c),this.duration_=void 0!==t.duration?t.duration:250}handleClick_(t,e){e.preventDefault(),this.zoomByDelta_(t)}zoomByDelta_(t){const e=this.getMap().getView();if(!e)return;const i=e.getZoom();if(void 0!==i){const n=e.getConstrainedZoom(i+t);this.duration_>0?(e.getAnimating()&&e.cancelAnimations(),e.animate({zoom:n,duration:this.duration_,easing:it})):e.setZoom(n)}}}function Qo(t){t=t||{};const e=new q;(void 0===t.zoom||t.zoom)&&e.push(new Jo(t.zoomOptions));(void 0===t.rotate||t.rotate)&&e.push(new $o(t.rotateOptions));return(void 0===t.attribution||t.attribution)&&e.push(new Ho(t.attributionOptions)),e}var ta="active";class ea extends V{constructor(t){super(),this.on,this.once,this.un,t&&t.handleEvent&&(this.handleEvent=t.handleEvent),this.map_=null,this.setActive(!0)}getActive(){return this.get(ta)}getMap(){return this.map_}handleEvent(t){return!0}setActive(t){this.set(ta,t)}setMap(t){this.map_=t}}function ia(t,e,i){const n=t.getCenterInternal();if(n){const r=[n[0]+e[0],n[1]+e[1]];t.animateInternal({duration:void 0!==i?i:250,easing:rt,center:t.getConstrainedCenter(r)})}}function na(t,e,i,n){const r=t.getZoom();if(void 0===r)return;const s=t.getConstrainedZoom(r+e),o=t.getResolutionForZoom(s);t.getAnimating()&&t.cancelAnimations(),t.animate({resolution:o,anchor:i,duration:void 0!==n?n:250,easing:it})}class ra extends ea{constructor(t){super(),t=t||{},this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:250}handleEvent(t){let e=!1;if(t.type==ao.DBLCLICK){const i=t.originalEvent,n=t.map,r=t.coordinate,s=i.shiftKey?-this.delta_:this.delta_;na(n.getView(),s,r,this.duration_),i.preventDefault(),e=!0}return!e}}class sa extends ea{constructor(t){super(t=t||{}),t.handleDownEvent&&(this.handleDownEvent=t.handleDownEvent),t.handleDragEvent&&(this.handleDragEvent=t.handleDragEvent),t.handleMoveEvent&&(this.handleMoveEvent=t.handleMoveEvent),t.handleUpEvent&&(this.handleUpEvent=t.handleUpEvent),t.stopDown&&(this.stopDown=t.stopDown),this.handlingDownUpSequence=!1,this.targetPointers=[]}getPointerCount(){return this.targetPointers.length}handleDownEvent(t){return!1}handleDragEvent(t){}handleEvent(t){if(!t.originalEvent)return!0;let e=!1;if(this.updateTrackedPointers_(t),this.handlingDownUpSequence){if(t.type==ao.POINTERDRAG)this.handleDragEvent(t),t.originalEvent.preventDefault();else if(t.type==ao.POINTERUP){const e=this.handleUpEvent(t);this.handlingDownUpSequence=e&&this.targetPointers.length>0}}else if(t.type==ao.POINTERDOWN){const i=this.handleDownEvent(t);this.handlingDownUpSequence=i,e=this.stopDown(i)}else t.type==ao.POINTERMOVE&&this.handleMoveEvent(t);return!e}handleMoveEvent(t){}handleUpEvent(t){return!1}stopDown(t){return t}updateTrackedPointers_(t){t.activePointers&&(this.targetPointers=t.activePointers)}}function oa(t){const e=t.length;let i=0,n=0;for(let r=0;r0&&this.condition_(t)){const e=t.map.getView();return this.lastCentroid=null,e.getAnimating()&&e.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=this.targetPointers.length>1,!0}return!1}}class wa extends sa{constructor(t){t=t||{},super({stopDown:f}),this.condition_=t.condition?t.condition:ha,this.lastAngle_=void 0,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){if(!xa(t))return;const e=t.map,i=e.getView();if(i.getConstraints().rotation===Go)return;const n=e.getSize(),r=t.pixel,s=Math.atan2(n[1]/2-r[1],r[0]-n[0]/2);if(void 0!==this.lastAngle_){const t=s-this.lastAngle_;i.adjustRotationInternal(-t)}this.lastAngle_=s}handleUpEvent(t){if(!xa(t))return!0;return t.map.getView().endInteraction(this.duration_),!1}handleDownEvent(t){if(!xa(t))return!1;if(ga(t)&&this.condition_(t)){return t.map.getView().beginInteraction(),this.lastAngle_=void 0,!0}return!1}}class Ea extends s{constructor(t){super(),this.geometry_=null,this.element_=document.createElement("div"),this.element_.style.position="absolute",this.element_.style.pointerEvents="auto",this.element_.className="ol-box "+t,this.map_=null,this.startPixel_=null,this.endPixel_=null}disposeInternal(){this.setMap(null)}render_(){const t=this.startPixel_,e=this.endPixel_,i="px",n=this.element_.style;n.left=Math.min(t[0],e[0])+i,n.top=Math.min(t[1],e[1])+i,n.width=Math.abs(e[0]-t[0])+i,n.height=Math.abs(e[1]-t[1])+i}setMap(t){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);const t=this.element_.style;t.left="inherit",t.top="inherit",t.width="inherit",t.height="inherit"}this.map_=t,this.map_&&this.map_.getOverlayContainer().appendChild(this.element_)}setPixels(t,e){this.startPixel_=t,this.endPixel_=e,this.createOrUpdateGeometry(),this.render_()}createOrUpdateGeometry(){const t=this.startPixel_,e=this.endPixel_,i=[t,[t[0],e[1]],e,[e[0],t[1]]].map(this.map_.getCoordinateFromPixelInternal,this.map_);i[4]=i[0].slice(),this.geometry_?this.geometry_.setCoordinates([i]):this.geometry_=new ur([i])}getGeometry(){return this.geometry_}}const Ta="boxstart",Ca="boxdrag",ba="boxend",Ra="boxcancel";class Pa extends i{constructor(t,e,i){super(t),this.coordinate=e,this.mapBrowserEvent=i}}class Ia extends sa{constructor(t){super(),this.on,this.once,this.un,t=t||{},this.box_=new Ea(t.className||"ol-dragbox"),this.minArea_=void 0!==t.minArea?t.minArea:64,t.onBoxEnd&&(this.onBoxEnd=t.onBoxEnd),this.startPixel_=null,this.condition_=t.condition?t.condition:ga,this.boxEndCondition_=t.boxEndCondition?t.boxEndCondition:this.defaultBoxEndCondition}defaultBoxEndCondition(t,e,i){const n=i[0]-e[0],r=i[1]-e[1];return n*n+r*r>=this.minArea_}getGeometry(){return this.box_.getGeometry()}handleDragEvent(t){this.box_.setPixels(this.startPixel_,t.pixel),this.dispatchEvent(new Pa(Ca,t.coordinate,t))}handleUpEvent(t){this.box_.setMap(null);const e=this.boxEndCondition_(t,this.startPixel_,t.pixel);return e&&this.onBoxEnd(t),this.dispatchEvent(new Pa(e?ba:Ra,t.coordinate,t)),!1}handleDownEvent(t){return!!this.condition_(t)&&(this.startPixel_=t.pixel,this.box_.setMap(t.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new Pa(Ta,t.coordinate,t)),!0)}onBoxEnd(t){}}class La extends Ia{constructor(t){super({condition:(t=t||{}).condition?t.condition:_a,className:t.className||"ol-dragzoom",minArea:t.minArea}),this.duration_=void 0!==t.duration?t.duration:200,this.out_=void 0!==t.out&&t.out}onBoxEnd(t){const e=this.getMap().getView();let i=this.getGeometry();if(this.out_){const t=e.rotatedExtentForGeometry(i),n=e.getResolutionForExtentInternal(t),r=e.getResolution()/n;i=i.clone(),i.scale(r*r)}e.fitInternal(i,{duration:this.duration_,easing:it})}}var Ma=37,Fa=38,Aa=39,Oa=40;class Na extends ea{constructor(t){super(),t=t||{},this.defaultCondition_=function(t){return ma(t)&&ya(t)},this.condition_=void 0!==t.condition?t.condition:this.defaultCondition_,this.duration_=void 0!==t.duration?t.duration:100,this.pixelDelta_=void 0!==t.pixelDelta?t.pixelDelta:128}handleEvent(t){let e=!1;if(t.type==I){const i=t.originalEvent,n=i.keyCode;if(this.condition_(t)&&(n==Oa||n==Ma||n==Aa||n==Fa)){const r=t.map.getView(),s=r.getResolution()*this.pixelDelta_;let o=0,a=0;n==Oa?a=-s:n==Ma?o=-s:n==Aa?o=s:a=s;const l=[o,a];wi(l,r.getRotation()),ia(r,l,this.duration_),i.preventDefault(),e=!0}}return!e}}class Da extends ea{constructor(t){super(),t=t||{},this.condition_=t.condition?t.condition:ya,this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:100}handleEvent(t){let e=!1;if(t.type==I||t.type==L){const i=t.originalEvent,n=i.charCode;if(this.condition_(t)&&(n=="+".charCodeAt(0)||n=="-".charCodeAt(0))){const r=t.map,s=n=="+".charCodeAt(0)?this.delta_:-this.delta_;na(r.getView(),s,void 0,this.duration_),i.preventDefault(),e=!0}}return!e}}class ka extends ea{constructor(t){super(t=t||{}),this.totalDelta_=0,this.lastDelta_=0,this.maxDelta_=void 0!==t.maxDelta?t.maxDelta:1,this.duration_=void 0!==t.duration?t.duration:250,this.timeout_=void 0!==t.timeout?t.timeout:80,this.useAnchor_=void 0===t.useAnchor||t.useAnchor,this.constrainResolution_=void 0!==t.constrainResolution&&t.constrainResolution;const e=t.condition?t.condition:da;this.condition_=t.onFocusOnly?aa(ua,e):e,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_,this.mode_=void 0,this.trackpadEventGap_=400,this.trackpadTimeoutId_,this.deltaPerZoom_=300}endInteraction_(){this.trackpadTimeoutId_=void 0;const t=this.getMap();if(!t)return;t.getView().endInteraction(void 0,this.lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_)}handleEvent(t){if(!this.condition_(t))return!0;if(t.type!==O)return!0;const e=t.map,i=t.originalEvent;let n;if(i.preventDefault(),this.useAnchor_&&(this.lastAnchor_=t.coordinate),t.type==O&&(n=i.deltaY,ut&&i.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(n/=mt),i.deltaMode===WheelEvent.DOM_DELTA_LINE&&(n*=40)),0===n)return!1;this.lastDelta_=n;const r=Date.now();void 0===this.startTime_&&(this.startTime_=r),(!this.mode_||r-this.startTime_>this.trackpadEventGap_)&&(this.mode_=Math.abs(n)<4?"trackpad":"wheel");const s=e.getView();if("trackpad"===this.mode_&&!s.getConstrainResolution()&&!this.constrainResolution_)return this.trackpadTimeoutId_?clearTimeout(this.trackpadTimeoutId_):(s.getAnimating()&&s.cancelAnimations(),s.beginInteraction()),this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_),s.adjustZoom(-n/this.deltaPerZoom_,this.lastAnchor_),this.startTime_=r,!1;this.totalDelta_+=n;const o=Math.max(this.timeout_-(r-this.startTime_),0);return clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,e),o),!1}handleWheelZoom_(t){const e=t.getView();e.getAnimating()&&e.cancelAnimations();let i=-ii(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;(e.getConstrainResolution()||this.constrainResolution_)&&(i=i?i>0?1:-1:0),na(e,i,this.lastAnchor_,this.duration_),this.mode_=void 0,this.totalDelta_=0,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_=void 0}setMouseAnchor(t){this.useAnchor_=t,t||(this.lastAnchor_=null)}}class Ga extends sa{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=f),super(e),this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.threshold_=void 0!==t.threshold?t.threshold:.3,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){let e=0;const i=this.targetPointers[0],n=this.targetPointers[1],r=Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX);if(void 0!==this.lastAngle_){const t=r-this.lastAngle_;this.rotationDelta_+=t,!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_&&(this.rotating_=!0),e=t}this.lastAngle_=r;const s=t.map,o=s.getView();if(o.getConstraints().rotation===Go)return;const a=s.getViewport().getBoundingClientRect(),l=oa(this.targetPointers);l[0]-=a.left,l[1]-=a.top,this.anchor_=s.getCoordinateFromPixelInternal(l),this.rotating_&&(s.render(),o.adjustRotationInternal(e,this.anchor_))}handleUpEvent(t){if(this.targetPointers.length<2){return t.map.getView().endInteraction(this.duration_),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}}class ja extends sa{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=f),super(e),this.anchor_=null,this.duration_=void 0!==t.duration?t.duration:400,this.lastDistance_=void 0,this.lastScaleDelta_=1}handleDragEvent(t){let e=1;const i=this.targetPointers[0],n=this.targetPointers[1],r=i.clientX-n.clientX,s=i.clientY-n.clientY,o=Math.sqrt(r*r+s*s);void 0!==this.lastDistance_&&(e=this.lastDistance_/o),this.lastDistance_=o;const a=t.map,l=a.getView();1!=e&&(this.lastScaleDelta_=e);const h=a.getViewport().getBoundingClientRect(),c=oa(this.targetPointers);c[0]-=h.left,c[1]-=h.top,this.anchor_=a.getCoordinateFromPixelInternal(c),a.render(),l.adjustResolutionInternal(e,this.anchor_)}handleUpEvent(t){if(this.targetPointers.length<2){const e=t.map.getView(),i=this.lastScaleDelta_>1?1:-1;return e.endInteraction(this.duration_,i),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}}function Ba(t){t=t||{};const e=new q,i=new Wr(-.005,.05,100);(void 0===t.altShiftDragRotate||t.altShiftDragRotate)&&e.push(new wa);(void 0===t.doubleClickZoom||t.doubleClickZoom)&&e.push(new ra({delta:t.zoomDelta,duration:t.zoomDuration}));(void 0===t.dragPan||t.dragPan)&&e.push(new Sa({onFocusOnly:t.onFocusOnly,kinetic:i}));(void 0===t.pinchRotate||t.pinchRotate)&&e.push(new Ga);(void 0===t.pinchZoom||t.pinchZoom)&&e.push(new ja({duration:t.zoomDuration}));(void 0===t.keyboard||t.keyboard)&&(e.push(new Na),e.push(new Da({delta:t.zoomDelta,duration:t.zoomDuration})));(void 0===t.mouseWheelZoom||t.mouseWheelZoom)&&e.push(new ka({onFocusOnly:t.onFocusOnly,duration:t.zoomDuration}));return(void 0===t.shiftDragZoom||t.shiftDragZoom)&&e.push(new La({duration:t.zoomDuration})),e}function Ua(t,e,i){return void 0===i&&(i=[0,0]),i[0]=t[0]+2*e,i[1]=t[1]+2*e,i}function za(t){return t[0]>0&&t[1]>0}function Xa(t,e,i){return void 0===i&&(i=[0,0]),i[0]=t[0]*e+.5|0,i[1]=t[1]*e+.5|0,i}function Va(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}function Wa(t){t instanceof vs?t.setMapInternal(null):t instanceof ro&&t.getLayers().forEach(Wa)}function Za(t,e){if(t instanceof vs)t.setMapInternal(e);else if(t instanceof ro){const i=t.getLayers().getArray();for(let t=0,n=i.length;t=0;i--){const n=e[i];if(n.getMap()!==this||!n.getActive()||!this.getTargetElement())continue;if(!n.handleEvent(t)||t.propagationStopped)break}}}handlePostRender(){const t=this.frameState_,e=this.tileQueue_;if(!e.isEmpty()){let i=this.maxTilesLoading_,n=i;if(t){const e=t.viewHints;if(e[Ro]||e[Po]){const e=Date.now()-t.time>8;i=e?0:8,n=e?0:2}}e.getTilesLoading(){this.postRenderTimeoutHandle_=void 0,this.handlePostRender()}),0))}setLayerGroup(t){const e=this.getLayerGroup();e&&this.handleLayerRemove_(new io("removelayer",e)),this.set(xo,t)}setSize(t){this.set(vo,t)}setTarget(t){this.set(So,t)}setView(t){if(!t||t instanceof zo)return void this.set(wo,t);this.set(wo,new zo);const e=this;t.then((function(t){e.setView(new zo(t))}))}updateSize(){const t=this.getTargetElement();let e;if(t){const i=getComputedStyle(t),n=t.offsetWidth-parseFloat(i.borderLeftWidth)-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderRightWidth),r=t.offsetHeight-parseFloat(i.borderTopWidth)-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderBottomWidth);isNaN(n)||isNaN(r)||(e=[n,r],!za(e)&&(t.offsetWidth||t.offsetHeight||t.getClientRects().length)&&console.warn("No map visible because the map container's width or height are 0."))}this.setSize(e),this.updateViewportSize_()}updateViewportSize_(){const t=this.getView();if(t){let e;const i=getComputedStyle(this.viewport_);i.width&&i.height&&(e=[parseInt(i.width,10),parseInt(i.height,10)]),t.setViewportSize(e)}}}const Ka="element",qa="map",Ha="offset",$a="position",Ja="positioning";class Qa extends V{constructor(t){super(),this.on,this.once,this.un,this.options=t,this.id=t.id,this.insertFirst=void 0===t.insertFirst||t.insertFirst,this.stopEvent=void 0===t.stopEvent||t.stopEvent,this.element=document.createElement("div"),this.element.className=void 0!==t.className?t.className:"ol-overlay-container ol-selectable",this.element.style.position="absolute",this.element.style.pointerEvents="auto",this.autoPan=!0===t.autoPan?{}:t.autoPan||void 0,this.rendered={transform_:"",visible:!0},this.mapPostrenderListenerKey=null,this.addChangeListener(Ka,this.handleElementChanged),this.addChangeListener(qa,this.handleMapChanged),this.addChangeListener(Ha,this.handleOffsetChanged),this.addChangeListener($a,this.handlePositionChanged),this.addChangeListener(Ja,this.handlePositioningChanged),void 0!==t.element&&this.setElement(t.element),this.setOffset(void 0!==t.offset?t.offset:[0,0]),this.setPositioning(t.positioning||"top-left"),void 0!==t.position&&this.setPosition(t.position)}getElement(){return this.get(Ka)}getId(){return this.id}getMap(){return this.get(qa)||null}getOffset(){return this.get(Ha)}getPosition(){return this.get($a)}getPositioning(){return this.get(Ja)}handleElementChanged(){zr(this.element);const t=this.getElement();t&&this.element.appendChild(t)}handleMapChanged(){this.mapPostrenderListenerKey&&(Ur(this.element),k(this.mapPostrenderListenerKey),this.mapPostrenderListenerKey=null);const t=this.getMap();if(t){this.mapPostrenderListenerKey=N(t,fo,this.render,this),this.updatePixelPosition();const e=this.stopEvent?t.getOverlayContainerStopEvent():t.getOverlayContainer();this.insertFirst?e.insertBefore(this.element,e.childNodes[0]||null):e.appendChild(this.element),this.performAutoPan()}}render(){this.updatePixelPosition()}handleOffsetChanged(){this.updatePixelPosition()}handlePositionChanged(){this.updatePixelPosition(),this.performAutoPan()}handlePositioningChanged(){this.updatePixelPosition()}setElement(t){this.set(Ka,t)}setMap(t){this.set(qa,t)}setOffset(t){this.set(Ha,t)}setPosition(t){this.set($a,t)}performAutoPan(){this.autoPan&&this.panIntoView(this.autoPan)}panIntoView(t){const e=this.getMap();if(!e||!e.getTargetElement()||!this.get($a))return;const i=this.getRect(e.getTargetElement(),e.getSize()),n=this.getElement(),r=this.getRect(n,[Gr(n),jr(n)]),s=void 0===(t=t||{}).margin?20:t.margin;if(!Yt(i,r)){const n=r[0]-i[0],o=i[2]-r[2],a=r[1]-i[1],l=i[3]-r[3],h=[0,0];if(n<0?h[0]=n-s:o<0&&(h[0]=Math.abs(o)+s),a<0?h[1]=a-s:l<0&&(h[1]=Math.abs(l)+s),0!==h[0]||0!==h[1]){const i=e.getView().getCenterInternal(),n=e.getPixelFromCoordinateInternal(i);if(!n)return;const r=[n[0]+h[0],n[1]+h[1]],s=t.animation||{};e.getView().animateInternal({center:e.getCoordinateFromPixelInternal(r),duration:s.duration,easing:s.easing})}}}getRect(t,e){const i=t.getBoundingClientRect(),n=i.left+window.pageXOffset,r=i.top+window.pageYOffset;return[n,r,n+e[0],r+e[1]]}setPositioning(t){this.set(Ja,t)}setVisible(t){this.rendered.visible!==t&&(this.element.style.display=t?"":"none",this.rendered.visible=t)}updatePixelPosition(){const t=this.getMap(),e=this.getPosition();if(!t||!t.isRendered()||!e)return void this.setVisible(!1);const i=t.getPixelFromCoordinate(e),n=t.getSize();this.updateRenderedPosition(i,n)}updateRenderedPosition(t,e){const i=this.element.style,n=this.getOffset(),r=this.getPositioning();this.setVisible(!0);let s="0%",o="0%";"bottom-right"==r||"center-right"==r||"top-right"==r?s="-100%":"bottom-center"!=r&&"center-center"!=r&&"top-center"!=r||(s="-50%"),"bottom-left"==r||"bottom-center"==r||"bottom-right"==r?o="-100%":"center-left"!=r&&"center-center"!=r&&"center-right"!=r||(o="-50%");const a=`translate(${s}, ${o}) translate(${Math.round(t[0]+n[0])+"px"}, ${Math.round(t[1]+n[1])+"px"})`;this.rendered.transform_!=a&&(this.rendered.transform_=a,i.transform=a)}getOptions(){return this.options}}class tl{constructor(t){this.highWaterMark=void 0!==t?t:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}canExpireCache(){return this.highWaterMark>0&&this.getCount()>this.highWaterMark}expireCache(t){for(;this.canExpireCache();)this.pop()}clear(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}containsKey(t){return this.entries_.hasOwnProperty(t)}forEach(t){let e=this.oldest_;for(;e;)t(e.value_,e.key_,this),e=e.newer}get(t,e){const i=this.entries_[t];return at(void 0!==i,15),i===this.newest_||(i===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(i.newer.older=i.older,i.older.newer=i.newer),i.newer=null,i.older=this.newest_,this.newest_.newer=i,this.newest_=i),i.value_}remove(t){const e=this.entries_[t];return at(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_}getCount(){return this.count_}getKeys(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.key_;return t}getValues(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.value_;return t}peekLast(){return this.oldest_.value_}peekLastKey(){return this.oldest_.key_}peekFirstKey(){return this.newest_.key_}peek(t){if(this.containsKey(t))return this.entries_[t].value_}pop(){const t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_}replace(t,e){this.get(t),this.entries_[t].value_=e}set(t,e){at(!(t in this.entries_),16);const i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_}setSize(t){this.highWaterMark=t}}function el(t,e,i,n){return void 0!==n?(n[0]=t,n[1]=e,n[2]=i,n):[t,e,i]}function il(t,e,i){return t+"/"+e+"/"+i}function nl(t){return il(t[0],t[1],t[2])}function rl(t){const[e,i,n]=t.substring(t.lastIndexOf("/")+1,t.length).split(",").map(Number);return il(e,i,n)}function sl(t){return t.split("/").map(Number)}function ol(t){return(t[1]<i||i>e.getMaxZoom())return!1;const s=e.getFullTileRange(i);return!s||s.containsXY(n,r)}class ll extends tl{clear(){for(;this.getCount()>0;)this.pop().release();super.clear()}expireCache(t){for(;this.canExpireCache();){if(this.peekLast().getKey()in t)break;this.pop().release()}}pruneExceptNewestZ(){if(0===this.getCount())return;const t=sl(this.peekFirstKey())[0];this.forEach(function(e){e.tileCoord[0]!==t&&(this.remove(nl(e.tileCoord)),e.release())}.bind(this))}}class hl{constructor(t,e,i,n){this.minX=t,this.maxX=e,this.minY=i,this.maxY=n}contains(t){return this.containsXY(t[1],t[2])}containsTileRange(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY}containsXY(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY}equals(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY}extend(t){t.minXthis.maxX&&(this.maxX=t.maxX),t.minYthis.maxY&&(this.maxY=t.maxY)}getHeight(){return this.maxY-this.minY+1}getSize(){return[this.getWidth(),this.getHeight()]}getWidth(){return this.maxX-this.minX+1}intersects(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY}}function cl(t,e,i,n,r){return void 0!==r?(r.minX=t,r.maxX=e,r.minY=i,r.maxY=n,r):new hl(t,e,i,n)}const ul=[];class dl extends st{constructor(t,e,i,n){super(t,e,{transition:0}),this.context_={},this.executorGroups={},this.declutterExecutorGroups={},this.loadingSourceTiles=0,this.hitDetectionImageData={},this.replayState_={},this.sourceTiles=[],this.errorTileKeys={},this.wantedResolution,this.getSourceTiles=n.bind(void 0,this),this.wrappedTileCoord=i}getContext(t){const e=z(t);return e in this.context_||(this.context_[e]=Dr(1,1,ul)),this.context_[e]}hasContext(t){return z(t)in this.context_}getImage(t){return this.hasContext(t)?this.getContext(t).canvas:null}getReplayState(t){const e=z(t);return e in this.replayState_||(this.replayState_[e]={dirty:!1,renderedRenderOrder:null,renderedResolution:NaN,renderedRevision:-1,renderedTileResolution:NaN,renderedTileRevision:-1,renderedTileZ:-1}),this.replayState_[e]}load(){this.getSourceTiles()}release(){for(const t in this.context_){const e=this.context_[t];kr(e),ul.push(e.canvas),delete this.context_[t]}super.release()}}class gl extends st{constructor(t,e,i,n,r,s){super(t,e,s),this.extent=null,this.format_=n,this.features_=null,this.loader_,this.projection=null,this.resolution,this.tileLoadFunction_=r,this.url_=i,this.key=i}getFormat(){return this.format_}getFeatures(){return this.features_}load(){this.state==H&&(this.setState($),this.tileLoadFunction_(this,this.url_),this.loader_&&this.loader_(this.extent,this.resolution,this.projection))}onLoad(t,e){this.setFeatures(t)}onError(){this.setState(Q)}setFeatures(t){this.features_=t,this.setState(J)}setLoader(t){this.loader_=t}}function fl(t){return Array.isArray(t)?Qr(t):t}let pl,ml=!1;function _l(t,e,i,n,r,s,o){const a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(i,n,r):t,!0),"arraybuffer"==e.getType()&&(a.responseType="arraybuffer"),a.withCredentials=ml,a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){const t=e.getType();let n;"json"==t||"text"==t?n=a.responseText:"xml"==t?(n=a.responseXML,n||(n=(new DOMParser).parseFromString(a.responseText,"application/xml"))):"arraybuffer"==t&&(n=a.response),n?s(e.readFeatures(n,{extent:i,featureProjection:r}),e.readProjection(n)):o()}else o()},a.onerror=o,a.send()}function yl(t,e){return function(i,n,r,s,o){const a=this;_l(t,e,i,n,r,(function(t,e){a.addFeatures(t),void 0!==s&&s(t)}),o||p)}}function xl(t,e){return[[-1/0,-1/0,1/0,1/0]]}function vl(t,e,i,n){const r=document.createElement("script"),s="olc_"+z(e);function o(){delete window[s],r.parentNode.removeChild(r)}r.async=!0,r.src=t+(t.includes("?")?"&":"?")+(n||"callback")+"="+s;const a=setTimeout((function(){o(),i&&i()}),1e4);window[s]=function(t){clearTimeout(a),o(),e(t)},document.head.appendChild(r)}class Sl extends Error{constructor(t){super("Unexpected response status: "+t.status),this.name="ResponseError",this.response=t}}class wl extends Error{constructor(t){super("Failed to issue request"),this.name="ClientError",this.client=t}}function El(t){return new Promise((function(e,i){const n=new XMLHttpRequest;n.addEventListener("load",(function(t){const n=t.target;if(!n.status||n.status>=200&&n.status<300){let t;try{t=JSON.parse(n.responseText)}catch(t){const e="Error parsing response text as JSON: "+t.message;return void i(new Error(e))}e(t)}else i(new Sl(n))})),n.addEventListener("error",(function(t){i(new wl(t.target))})),n.open("GET",t),n.setRequestHeader("Accept","application/json"),n.send()}))}function Tl(t,e){return e.includes("://")?e:new URL(e,t).href}class Cl{drawCustom(t,e,i,n){}drawGeometry(t){}setStyle(t){}drawCircle(t,e){}drawFeature(t,e){}drawGeometryCollection(t,e){}drawLineString(t,e){}drawMultiLineString(t,e){}drawMultiPoint(t,e){}drawMultiPolygon(t,e){}drawPoint(t,e){}drawPolygon(t,e){}drawText(t,e){}setFillStrokeStyle(t,e){}setImageStyle(t,e){}setTextStyle(t,e){}}class bl extends Cl{constructor(t,e,i,n,r,s,o){super(),this.context_=t,this.pixelRatio_=e,this.extent_=i,this.transform_=n,this.viewRotation_=r,this.squaredTolerance_=s,this.userTransform_=o,this.contextFillState_=null,this.contextStrokeState_=null,this.contextTextState_=null,this.fillState_=null,this.strokeState_=null,this.image_=null,this.imageAnchorX_=0,this.imageAnchorY_=0,this.imageHeight_=0,this.imageOpacity_=0,this.imageOriginX_=0,this.imageOriginY_=0,this.imageRotateWithView_=!1,this.imageRotation_=0,this.imageScale_=[0,0],this.imageWidth_=0,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=!1,this.textRotation_=0,this.textScale_=[0,0],this.textFillState_=null,this.textStrokeState_=null,this.textState_=null,this.pixelCoordinates_=[],this.tmpLocalTransform_=[1,0,0,1,0,0]}drawImages_(t,e,i,n){if(!this.image_)return;const r=un(t,e,i,n,this.transform_,this.pixelCoordinates_),s=this.context_,o=this.tmpLocalTransform_,a=s.globalAlpha;1!=this.imageOpacity_&&(s.globalAlpha=a*this.imageOpacity_);let l=this.imageRotation_;this.imageRotateWithView_&&(l+=this.viewRotation_);for(let t=0,e=r.length;tt*this.pixelRatio_)),lineDashOffset:(r||0)*this.pixelRatio_,lineJoin:void 0!==s?s:Gs,lineWidth:(void 0!==o?o:1)*this.pixelRatio_,miterLimit:void 0!==a?a:js,strokeStyle:fl(t||Bs)}}else this.strokeState_=null}setImageStyle(t){let e;if(!t||!(e=t.getSize()))return void(this.image_=null);const i=t.getPixelRatio(this.pixelRatio_),n=t.getAnchor(),r=t.getOrigin();this.image_=t.getImage(this.pixelRatio_),this.imageAnchorX_=n[0]*i,this.imageAnchorY_=n[1]*i,this.imageHeight_=e[1]*i,this.imageOpacity_=t.getOpacity(),this.imageOriginX_=r[0],this.imageOriginY_=r[1],this.imageRotateWithView_=t.getRotateWithView(),this.imageRotation_=t.getRotation();const s=t.getScaleArray();this.imageScale_=[s[0]*this.pixelRatio_/i,s[1]*this.pixelRatio_/i],this.imageWidth_=e[0]*i}setTextStyle(t){if(t){const e=t.getFill();if(e){const t=e.getColor();this.textFillState_={fillStyle:fl(t||Ns)}}else this.textFillState_=null;const i=t.getStroke();if(i){const t=i.getColor(),e=i.getLineCap(),n=i.getLineDash(),r=i.getLineDashOffset(),s=i.getLineJoin(),o=i.getWidth(),a=i.getMiterLimit();this.textStrokeState_={lineCap:void 0!==e?e:Ds,lineDash:n||ks,lineDashOffset:r||0,lineJoin:void 0!==s?s:Gs,lineWidth:void 0!==o?o:1,miterLimit:void 0!==a?a:js,strokeStyle:fl(t||Bs)}}else this.textStrokeState_=null;const n=t.getFont(),r=t.getOffsetX(),s=t.getOffsetY(),o=t.getRotateWithView(),a=t.getRotation(),l=t.getScaleArray(),h=t.getText(),c=t.getTextAlign(),u=t.getTextBaseline();this.textState_={font:void 0!==n?n:Os,textAlign:void 0!==c?c:Us,textBaseline:void 0!==u?u:zs},this.text_=void 0!==h?Array.isArray(h)?h.reduce(((t,e,i)=>t+(i%2?" ":e)),""):h:"",this.textOffsetX_=void 0!==r?this.pixelRatio_*r:0,this.textOffsetY_=void 0!==s?this.pixelRatio_*s:0,this.textRotateWithView_=void 0!==o&&o,this.textRotation_=void 0!==a?a:0,this.textScale_=[this.pixelRatio_*l[0],this.pixelRatio_*l[1]]}else this.text_=""}}const Rl={Point:function(t,e,i,n,r){const s=i.getImage(),o=i.getText();let a;if(s){if(s.getImageState()!=Lr)return;let l=t;if(r){const h=s.getDeclutterMode();if("none"!==h)if(l=r,"obstacle"===h){const r=t.getBuilder(i.getZIndex(),"Image");r.setImageStyle(s,a),r.drawPoint(e,n)}else o&&o.getText()&&(a={})}const h=l.getBuilder(i.getZIndex(),"Image");h.setImageStyle(s,a),h.drawPoint(e,n)}if(o&&o.getText()){let s=t;r&&(s=r);const l=s.getBuilder(i.getZIndex(),"Text");l.setTextStyle(o,a),l.drawText(e,n)}},LineString:function(t,e,i,n,r){const s=i.getStroke();if(s){const r=t.getBuilder(i.getZIndex(),"LineString");r.setFillStrokeStyle(null,s),r.drawLineString(e,n)}const o=i.getText();if(o&&o.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(o),s.drawText(e,n)}},Polygon:function(t,e,i,n,r){const s=i.getFill(),o=i.getStroke();if(s||o){const r=t.getBuilder(i.getZIndex(),"Polygon");r.setFillStrokeStyle(s,o),r.drawPolygon(e,n)}const a=i.getText();if(a&&a.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(a),s.drawText(e,n)}},MultiPoint:function(t,e,i,n,r){const s=i.getImage(),o=i.getText();let a;if(s){if(s.getImageState()!=Lr)return;let l=t;if(r){const h=s.getDeclutterMode();if("none"!==h)if(l=r,"obstacle"===h){const r=t.getBuilder(i.getZIndex(),"Image");r.setImageStyle(s,a),r.drawMultiPoint(e,n)}else o&&o.getText()&&(a={})}const h=l.getBuilder(i.getZIndex(),"Image");h.setImageStyle(s,a),h.drawMultiPoint(e,n)}if(o&&o.getText()){let s=t;r&&(s=r);const l=s.getBuilder(i.getZIndex(),"Text");l.setTextStyle(o,a),l.drawText(e,n)}},MultiLineString:function(t,e,i,n,r){const s=i.getStroke();if(s){const r=t.getBuilder(i.getZIndex(),"LineString");r.setFillStrokeStyle(null,s),r.drawMultiLineString(e,n)}const o=i.getText();if(o&&o.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(o),s.drawText(e,n)}},MultiPolygon:function(t,e,i,n,r){const s=i.getFill(),o=i.getStroke();if(o||s){const r=t.getBuilder(i.getZIndex(),"Polygon");r.setFillStrokeStyle(s,o),r.drawMultiPolygon(e,n)}const a=i.getText();if(a&&a.getText()){const s=(r||t).getBuilder(i.getZIndex(),"Text");s.setTextStyle(a),s.drawText(e,n)}},GeometryCollection:function(t,e,i,n,r){const s=e.getGeometriesArray();let o,a;for(o=0,a=s.length;o2||Math.abs(t[4*e+3]-191.25)>2}function Gl(t,e,i,n){const r=$i(i,e,t);let s=zi(e,n,i);const o=e.getMetersPerUnit();void 0!==o&&(s*=o);const a=t.getMetersPerUnit();void 0!==a&&(s/=a);const l=t.getExtent();if(!l||Zt(l,r)){const e=zi(t,s,r)/s;isFinite(e)&&e>0&&(s/=e)}return s}function jl(t,e,i,n){const r=ge(i);let s=Gl(t,e,r,n);return(!isFinite(s)||s<=0)&&he(i,(function(i){return s=Gl(t,e,i,n),isFinite(s)&&s>0})),s}function Bl(t,e,i,n,r,s,o,a,l,h,c,u){const d=Dr(Math.round(i*t),Math.round(i*e),Nl);if(u||(d.imageSmoothingEnabled=!1),0===l.length)return d.canvas;function g(t){return Math.round(t*i)/i}d.scale(i,i),d.globalCompositeOperation="lighter";const f=[1/0,1/0,-1/0,-1/0];l.forEach((function(t,e,i){ne(f,t.extent)}));const p=Se(f),m=_e(f),_=Dr(Math.round(i*p/n),Math.round(i*m/n));u||(_.imageSmoothingEnabled=!1);const y=i/n;l.forEach((function(t,e,i){const n=t.extent[0]-f[0],r=-(t.extent[3]-f[3]),s=Se(t.extent),o=_e(t.extent);t.image.width>0&&t.image.height>0&&_.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,n*y,r*y,s*y,o*y)}));const x=xe(o);return a.getTriangles().forEach((function(t,e,r){const o=t.source,a=t.target;let l=o[0][0],h=o[0][1],c=o[1][0],p=o[1][1],m=o[2][0],y=o[2][1];const v=g((a[0][0]-x[0])/s),S=g(-(a[0][1]-x[1])/s),w=g((a[1][0]-x[0])/s),E=g(-(a[1][1]-x[1])/s),T=g((a[2][0]-x[0])/s),C=g(-(a[2][1]-x[1])/s),b=l,R=h;l=0,h=0,c-=b,p-=R,m-=b,y-=R;const P=si([[c,p,0,0,w-v],[m,y,0,0,T-v],[0,0,c,p,E-S],[0,0,m,y,C-S]]);if(P){if(d.save(),d.beginPath(),function(){if(void 0===Ol){const t=document.createElement("canvas").getContext("2d");t.globalCompositeOperation="lighter",t.fillStyle="rgba(210, 0, 0, 0.75)",Dl(t,4,5,4,0),Dl(t,4,5,0,5);const e=t.getImageData(0,0,3,3).data;Ol=kl(e,0)||kl(e,4)||kl(e,8)}return Ol}()||!u){d.moveTo(w,E);const t=4,e=v-w,i=S-E;for(let n=0;nthis.sourceWorldWidth_/2){const i=[[e.source[0][0],e.source[0][1]],[e.source[1][0],e.source[1][1]],[e.source[2][0],e.source[2][1]]];i[0][0]-t>this.sourceWorldWidth_/2&&(i[0][0]-=this.sourceWorldWidth_),i[1][0]-t>this.sourceWorldWidth_/2&&(i[1][0]-=this.sourceWorldWidth_),i[2][0]-t>this.sourceWorldWidth_/2&&(i[2][0]-=this.sourceWorldWidth_);const n=Math.min(i[0][0],i[1][0],i[2][0]);Math.max(i[0][0],i[1][0],i[2][0])-n.5&&c<1;let g=!1;if(l>0){if(this.targetProj_.isGlobal()&&this.targetWorldWidth_){g=Se(zt([t,e,i,n]))/this.targetWorldWidth_>.25||g}!d&&this.sourceProj_.isGlobal()&&c&&(g=c>.25||g)}if(!g&&this.maxSourceExtent_&&isFinite(h[0])&&isFinite(h[1])&&isFinite(h[2])&&isFinite(h[3])&&!we(h,this.maxSourceExtent_))return;let f=0;if(!(g||isFinite(r[0])&&isFinite(r[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(o[0])&&isFinite(o[1])&&isFinite(a[0])&&isFinite(a[1])))if(l>0)g=!0;else if(f=(isFinite(r[0])&&isFinite(r[1])?0:8)+(isFinite(s[0])&&isFinite(s[1])?0:4)+(isFinite(o[0])&&isFinite(o[1])?0:2)+(isFinite(a[0])&&isFinite(a[1])?0:1),1!=f&&2!=f&&4!=f&&8!=f)return;if(l>0){if(!g){const e=[(t[0]+i[0])/2,(t[1]+i[1])/2],n=this.transformInv_(e);let s;if(d){s=(li(r[0],u)+li(o[0],u))/2-li(n[0],u)}else s=(r[0]+o[0])/2-n[0];const a=(r[1]+o[1])/2-n[1];g=s*s+a*a>this.errorThresholdSquared_}if(g){if(Math.abs(t[0]-i[0])<=Math.abs(t[1]-i[1])){const h=[(e[0]+i[0])/2,(e[1]+i[1])/2],c=this.transformInv_(h),u=[(n[0]+t[0])/2,(n[1]+t[1])/2],d=this.transformInv_(u);this.addQuad_(t,e,h,u,r,s,c,d,l-1),this.addQuad_(u,h,i,n,d,c,o,a,l-1)}else{const h=[(t[0]+e[0])/2,(t[1]+e[1])/2],c=this.transformInv_(h),u=[(i[0]+n[0])/2,(i[1]+n[1])/2],d=this.transformInv_(u);this.addQuad_(t,h,u,n,r,c,d,a,l-1),this.addQuad_(h,e,i,u,c,s,o,d,l-1)}return}}if(d){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}0==(11&f)&&this.addTriangle_(t,i,n,r,o,a),0==(14&f)&&this.addTriangle_(t,i,e,r,o,s),f&&(0==(13&f)&&this.addTriangle_(e,n,t,s,a,r),0==(7&f)&&this.addTriangle_(e,n,i,s,a,o))}calculateSourceExtent(){const t=[1/0,1/0,-1/0,-1/0];return this.triangles_.forEach((function(e,i,n){const r=e.source;re(t,r[0]),re(t,r[1]),re(t,r[2])})),t}getTriangles(){return this.triangles_}}class zl extends st{constructor(t,e,i,n,r,s,o,a,l,h,c,u){super(r,H,{interpolate:!!u}),this.renderEdges_=void 0!==c&&c,this.pixelRatio_=o,this.gutter_=a,this.canvas_=null,this.sourceTileGrid_=e,this.targetTileGrid_=n,this.wrappedTileCoord_=s||r,this.sourceTiles_=[],this.sourcesListenerKeys_=null,this.sourceZ_=0;const d=n.getTileCoordExtent(this.wrappedTileCoord_),g=this.targetTileGrid_.getExtent();let f=this.sourceTileGrid_.getExtent();const p=g?ye(d,g):d;if(0===ce(p))return void(this.state=tt);const m=t.getExtent();m&&(f=f?ye(f,m):m);const _=n.getResolution(this.wrappedTileCoord_[0]),y=jl(t,i,p,_);if(!isFinite(y)||y<=0)return void(this.state=tt);const x=void 0!==h?h:.5;if(this.triangulation_=new Ul(t,i,p,f,y*x,_),0===this.triangulation_.getTriangles().length)return void(this.state=tt);this.sourceZ_=e.getZForResolution(y);let v=this.triangulation_.calculateSourceExtent();if(f&&(t.canWrapX()?(v[1]=ii(v[1],f[1],f[3]),v[3]=ii(v[3],f[1],f[3])):v=ye(v,f)),ce(v)){const t=e.getTileRangeForExtentAndZ(v,this.sourceZ_);for(let e=t.minX;e<=t.maxX;e++)for(let i=t.minY;i<=t.maxY;i++){const t=l(this.sourceZ_,e,i,o);t&&this.sourceTiles_.push(t)}0===this.sourceTiles_.length&&(this.state=tt)}else this.state=tt}getImage(){return this.canvas_}reproject_(){const t=[];if(this.sourceTiles_.forEach(function(e,i,n){e&&e.getState()==J&&t.push({extent:this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),image:e.getImage()})}.bind(this)),this.sourceTiles_.length=0,0===t.length)this.state=Q;else{const e=this.wrappedTileCoord_[0],i=this.targetTileGrid_.getTileSize(e),n="number"==typeof i?i:i[0],r="number"==typeof i?i:i[1],s=this.targetTileGrid_.getResolution(e),o=this.sourceTileGrid_.getResolution(this.sourceZ_),a=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=Bl(n,r,this.pixelRatio_,o,this.sourceTileGrid_.getExtent(),s,a,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=J}this.changed()}load(){if(this.state==H){this.state=$,this.changed();let t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach(function(e,i,n){const r=e.getState();if(r==H||r==$){t++;const i=N(e,S,(function(n){const r=e.getState();r!=J&&r!=Q&&r!=tt||(k(i),t--,0===t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(i)}}.bind(this)),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t,e,i){t.getState()==H&&t.load()}))}}unlistenSources_(){this.sourcesListenerKeys_.forEach(k),this.sourcesListenerKeys_=null}release(){this.canvas_&&(kr(this.canvas_.getContext("2d")),Nl.push(this.canvas_),this.canvas_=null),super.release()}}var Xl="tileloadstart",Vl="tileloadend",Wl="tileloaderror";class Zl extends V{constructor(t){super(),this.projection=Ui(t.projection),this.attributions_=Yl(t.attributions),this.attributionsCollapsible_=void 0===t.attributionsCollapsible||t.attributionsCollapsible,this.loading=!1,this.state_=void 0!==t.state?t.state:"ready",this.wrapX_=void 0!==t.wrapX&&t.wrapX,this.interpolate_=!!t.interpolate,this.viewResolver=null,this.viewRejector=null;const e=this;this.viewPromise_=new Promise((function(t,i){e.viewResolver=t,e.viewRejector=i}))}getAttributions(){return this.attributions_}getAttributionsCollapsible(){return this.attributionsCollapsible_}getProjection(){return this.projection}getResolutions(){return B()}getView(){return this.viewPromise_}getState(){return this.state_}getWrapX(){return this.wrapX_}getInterpolate(){return this.interpolate_}refresh(){this.changed()}setAttributions(t){this.attributions_=Yl(t),this.changed()}setState(t){this.state_=t,this.changed()}}function Yl(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}const Kl=[0,0,0];class ql{constructor(t){let e;if(this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.resolutions_=t.resolutions,at(d(this.resolutions_,(function(t,e){return e-t}),!0),17),!t.origins)for(let t=0,i=this.resolutions_.length-1;t=this.minZoom;){if(2===this.zoomFactor_?(s=Math.floor(s/2),o=Math.floor(o/2),r=cl(s,s,o,o,i)):r=this.getTileRangeForExtentAndZ(a,l,i),e(l,r))return!0;--l}return!1}getExtent(){return this.extent_}getMaxZoom(){return this.maxZoom}getMinZoom(){return this.minZoom}getOrigin(t){return this.origin_?this.origin_:this.origins_[t]}getResolution(t){return this.resolutions_[t]}getResolutions(){return this.resolutions_}getTileCoordChildTileRange(t,e,i){if(t[0]this.maxZoom||e0?n:Math.max(s/i[0],r/i[1]);const o=e+1,a=new Array(o);for(let t=0;ti.highWaterMark&&(i.highWaterMark=t)}useTile(t,e,i,n){}}class rh extends i{constructor(t,e){super(t),this.tile=e}}function sh(t,e){const i=/\{z\}/g,n=/\{x\}/g,r=/\{y\}/g,s=/\{-y\}/g;return function(o,a,l){return o?t.replace(i,o[0].toString()).replace(n,o[1].toString()).replace(r,o[2].toString()).replace(s,(function(){const t=o[0],i=e.getFullTileRange(t);at(i,55);return(i.getHeight()-o[2]-1).toString()})):void 0}}function oh(t,e){const i=t.length,n=new Array(i);for(let r=0;r>=1;return i.join("")}class fh extends uh{constructor(t){const e=void 0!==(t=t||{}).projection?t.projection:"EPSG:3857",i=void 0!==t.tileGrid?t.tileGrid:Ql({extent:ih(e),maxResolution:t.maxResolution,maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize});super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,opaque:t.opaque,projection:e,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:i,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,attributionsCollapsible:t.attributionsCollapsible,zDirection:t.zDirection}),this.gutter_=void 0!==t.gutter?t.gutter:0}getGutter(){return this.gutter_}}function ph(t,e,i,n,r){mh(t,e,i||0,n||t.length-1,r||yh)}function mh(t,e,i,n,r){for(;n>i;){if(n-i>600){var s=n-i+1,o=e-i+1,a=Math.log(s),l=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*l*(s-l)/s)*(o-s/2<0?-1:1);mh(t,e,Math.max(i,Math.floor(e-o*l/s+h)),Math.min(n,Math.floor(e+(s-o)*l/s+h)),r)}var c=t[e],u=i,d=n;for(_h(t,i,e),r(t[n],c)>0&&_h(t,i,n);u0;)d--}0===r(t[i],c)?_h(t,i,d):_h(t,++d,n),d<=e&&(i=d+1),e<=d&&(n=d-1)}}function _h(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function yh(t,e){return te?1:0}class xh{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const i=[];if(!Lh(t,e))return i;const n=this.toBBox,r=[];for(;e;){for(let s=0;s=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(n,r,e)}_split(t,e){const i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);const s=this._chooseSplitIndex(i,r,n),o=Mh(i.children.splice(s,i.children.length-s));o.height=i.height,o.leaf=i.leaf,Sh(i,this.toBBox),Sh(o,this.toBBox),e?t[e-1].children.push(o):this._splitRoot(i,o)}_splitRoot(t,e){this.data=Mh([t,e]),this.data.height=t.height+1,this.data.leaf=!1,Sh(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let n,r=1/0,s=1/0;for(let o=e;o<=i-e;o++){const e=wh(t,0,o,this.toBBox),a=wh(t,o,i,this.toBBox),l=Ph(e,a),h=bh(e)+bh(a);l=e;n--){const e=t.children[n];Eh(o,t.leaf?r(e):e),a+=Rh(o)}return a}_adjustParentBBoxes(t,e,i){for(let n=i;n>=0;n--)Eh(e[n],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():Sh(t[i],this.toBBox)}}function vh(t,e,i){if(!i)return e.indexOf(t);for(let n=0;n=t.minX&&e.maxY>=t.minY}function Mh(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Fh(t,e,i,n,r){const s=[e,i];for(;s.length;){if((i=s.pop())-(e=s.pop())<=n)continue;const o=e+Math.ceil((i-e)/n/2)*n;ph(t,o,e,i,r),s.push(e,o,o,i)}}class Ah{constructor(t){this.rbush_=new xh(t),this.items_={}}insert(t,e){const i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[z(e)]=i}load(t,e){const i=new Array(e.length);for(let n=0,r=e.length;nthis.featuresRtree_.getInExtent(t))))}return this.featuresCollection_?this.featuresCollection_.getArray().slice(0):[]}getClosestFeatureToCoordinate(t,e){const i=t[0],n=t[1];let r=null;const s=[NaN,NaN];let o=1/0;const a=[-1/0,-1/0,1/0,1/0];return e=e||g,this.featuresRtree_.forEachInExtent(a,(function(t){if(e(t)){const e=t.getGeometry(),l=o;if(o=e.closestPointXY(i,n,s,o),o0}refresh(){this.clear(!0),this.loadedExtentsRtree_.clear(),super.refresh()}removeLoadedExtent(t){const e=this.loadedExtentsRtree_;let i;e.forEachInExtent(t,(function(e){if(ee(e.extent,t))return i=e,!0})),i&&e.remove(i)}removeFeature(t){if(!t)return;const e=z(t);e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t);this.removeFeatureInternal(t)&&this.changed()}removeFeatureInternal(t){const e=z(t),i=this.featureChangeKeys_[e];if(!i)return;i.forEach(k),delete this.featureChangeKeys_[e];const n=t.getId();return void 0!==n&&delete this.idIndex_[n.toString()],delete this.uidIndex_[e],this.dispatchEvent(new Uh(kh,t)),t}removeFromIdIndex_(t){let e=!1;for(const i in this.idIndex_)if(this.idIndex_[i]===t){delete this.idIndex_[i],e=!0;break}return e}setLoader(t){this.loader_=t}setUrl(t){at(this.format_,7),this.url_=t,this.setLoader(yl(t,this.format_))}}class Xh extends nh{constructor(t){const e=void 0===t.projection?"EPSG:3857":t.projection;let i=t.tileGrid;void 0===i&&e&&(i=Ql({extent:ih(e),maxResolution:t.maxResolution,maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize})),super({cacheSize:.1,attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,projection:e,tileGrid:i,opaque:t.opaque,state:t.state,wrapX:t.wrapX,transition:t.transition,interpolate:t.interpolate}),this.gutter_=void 0!==t.gutter?t.gutter:0,this.tileSize_=t.tileSize?Va(t.tileSize):null,this.tileSizes_=null,this.tileLoadingKeys_={},this.loader_=t.loader,this.handleTileChange_=this.handleTileChange_.bind(this),this.bandCount=void 0===t.bandCount?4:t.bandCount}setTileSizes(t){this.tileSizes_=t}getTileSize(t){if(this.tileSizes_)return this.tileSizes_[t];if(this.tileSize_)return this.tileSize_;const e=this.getTileGrid();return e?Va(e.getTileSize(t)):[256,256]}getGutterForProjection(t){return this.gutter_}setLoader(t){this.loader_=t}getTile(t,e,i,n,r){const s=this.getTileSize(t),o=il(t,e,i);if(this.tileCache.containsKey(o))return this.tileCache.get(o);const a=this.loader_;const l=Object.assign({tileCoord:[t,e,i],loader:function(){return _((function(){return a(t,e,i)}))},size:s},this.tileOptions),h=new ot(l);return h.key=this.getKey(),h.addEventListener(S,this.handleTileChange_),this.tileCache.set(o,h),h}handleTileChange_(t){const e=t.target,i=z(e),n=e.getState();let r;n==$?(this.tileLoadingKeys_[i]=!0,r=Xl):i in this.tileLoadingKeys_&&(delete this.tileLoadingKeys_[i],r=n==Q?Wl:n==J?Vl:void 0),r&&this.dispatchEvent(new rh(r,e))}}function Vh(t,e){if(!t)return!1;if(!0===t)return!0;if(3!==e.getSamplesPerPixel())return!1;const i=e.fileDirectory.PhotometricInterpretation,n=GeoTIFF.globals.photometricInterpretations;return i===n.CMYK||i===n.YCbCr||i===n.CIELab||i===n.ICCLab}const Wh="STATISTICS_MAXIMUM",Zh="STATISTICS_MINIMUM";let Yh;function Kh(t){try{return t.getBoundingBox()}catch(e){const i=t.fileDirectory;return[0,0,i.ImageWidth,i.ImageLength]}}function qh(t){try{return t.getOrigin().slice(0,2)}catch(e){return[0,t.fileDirectory.ImageLength]}}function Hh(t,e){try{return t.getResolution(e)}catch(i){return[e.fileDirectory.ImageWidth/t.fileDirectory.ImageWidth,e.fileDirectory.ImageHeight/t.fileDirectory.ImageHeight]}}function $h(t){const e=t.geoKeys;if(!e)return null;if(e.ProjectedCSTypeGeoKey){const t="EPSG:"+e.ProjectedCSTypeGeoKey;let i=Ui(t);if(!i){const n=Me(e.ProjLinearUnitsGeoKey);n&&(i=new Ae({code:t,units:n}))}return i}if(e.GeographicTypeGeoKey){const t="EPSG:"+e.GeographicTypeGeoKey;let i=Ui(t);if(!i){const n=Me(e.GeogAngularUnitsGeoKey);n&&(i=new Ae({code:t,units:n}))}return i}return null}function Jh(t){return t.getImageCount().then((function(e){const i=new Array(e);for(let n=0;ni*t)throw new Error(n)}function ec(t){return t instanceof Int8Array?127:t instanceof Uint8Array||t instanceof Uint8ClampedArray?255:t instanceof Int16Array?32767:t instanceof Uint16Array?65535:t instanceof Int32Array?2147483647:t instanceof Uint32Array?4294967295:t instanceof Float32Array?34e37:255}class ic extends Xh{constructor(t){super({state:"loading",tileGrid:null,projection:null,opaque:t.opaque,transition:t.transition,interpolate:!1!==t.interpolate,wrapX:t.wrapX}),this.sourceInfo_=t.sources;const e=this.sourceInfo_.length;this.sourceOptions_=t.sourceOptions,this.sourceImagery_=new Array(e),this.sourceMasks_=new Array(e),this.resolutionFactors_=new Array(e),this.samplesPerPixel_,this.nodataValues_,this.metadata_,this.normalize_=!1!==t.normalize,this.addAlpha_=!1,this.error_=null,this.convertToRGB_=t.convertToRGB||!1,this.setKey(this.sourceInfo_.map((t=>t.url)).join(","));const i=this,n=new Array(e);for(let t=0;t{4==(4&(t.fileDirectory.NewSubfileType||0))?d.push(t):c.push(t)}));const g=c.length;if(d.length>0&&d.length!==g)throw new Error(`Expected one mask per image found ${d.length} masks and ${g} images`);let f,p;const m=new Array(g),_=new Array(g),y=new Array(g);a[u]=new Array(g),l[u]=new Array(g);for(let t=0;ty.length&&(h=s.length-y.length);const t=s[s.length-1]/y[y.length-1];this.resolutionFactors_[u]=t;const e=y.map((e=>e*t)),i=`Resolution mismatch for source ${u}, got [${e}] but expected [${s}]`;tc(s.slice(h,s.length),e,.02,i,this.viewRejector)}else s=y,this.resolutionFactors_[u]=1;n?tc(n.slice(h,n.length),_,.01,`Tile size mismatch for source ${u}`,this.viewRejector):n=_,r?tc(r.slice(h,r.length),m,0,`Tile size mismatch for source ${u}`,this.viewRejector):r=m,this.sourceImagery_[u]=c.reverse(),this.sourceMasks_[u]=d.reverse()}for(let t=0,e=this.sourceImagery_.length;t=0;--t){const i=$h(e[t]);if(i){this.projection=i;break}}}this.samplesPerPixel_=o,this.nodataValues_=a,this.metadata_=l;t:for(let t=0;t1,n=i&&t.imageInfo.profile[1].supports?t.imageInfo.profile[1].supports:[],r=i&&t.imageInfo.profile[1].formats?t.imageInfo.profile[1].formats:[],s=i&&t.imageInfo.profile[1].qualities?t.imageInfo.profile[1].qualities:[];return{url:t.imageInfo["@id"].replace(/\/?(?:info\.json)?$/g,""),sizes:void 0===t.imageInfo.sizes?void 0:t.imageInfo.sizes.map((function(t){return[t.width,t.height]})),tileSize:void 0===t.imageInfo.tiles?void 0:[t.imageInfo.tiles.map((function(t){return t.width}))[0],t.imageInfo.tiles.map((function(t){return void 0===t.height?t.width:t.height}))[0]],resolutions:void 0===t.imageInfo.tiles?void 0:t.imageInfo.tiles.map((function(t){return t.scaleFactors}))[0],supports:[...e.supports,...n],formats:[...e.formats,...r],qualities:[...e.qualities,...s]}},uc[oc]=function(t){const e=t.getComplianceLevelSupportedFeatures(),i=void 0===t.imageInfo.extraFormats?e.formats:[...e.formats,...t.imageInfo.extraFormats],n=void 0!==t.imageInfo.preferredFormats&&Array.isArray(t.imageInfo.preferredFormats)&&t.imageInfo.preferredFormats.length>0?t.imageInfo.preferredFormats.filter((function(t){return["jpg","png","gif"].includes(t)})).reduce((function(t,e){return void 0===t&&i.includes(e)?e:t}),void 0):void 0;return{url:t.imageInfo.id,sizes:void 0===t.imageInfo.sizes?void 0:t.imageInfo.sizes.map((function(t){return[t.width,t.height]})),tileSize:void 0===t.imageInfo.tiles?void 0:[t.imageInfo.tiles.map((function(t){return t.width}))[0],t.imageInfo.tiles.map((function(t){return t.height}))[0]],resolutions:void 0===t.imageInfo.tiles?void 0:t.imageInfo.tiles.map((function(t){return t.scaleFactors}))[0],supports:void 0===t.imageInfo.extraFeatures?e.supports:[...e.supports,...t.imageInfo.extraFeatures],formats:i,qualities:void 0===t.imageInfo.extraQualities?e.qualities:[...e.qualities,...t.imageInfo.extraQualities],preferredFormat:n}};function dc(t){return t.toLocaleString("en",{maximumFractionDigits:10})}class gc extends Rr{constructor(t,e,i,n,r,s,o){const a=t.getExtent(),l=e.getExtent(),h=l?ye(i,l):i,c=Gl(t,e,ge(h),n),u=new Ul(t,e,h,a,.5*c,n),d=s(u.calculateSourceExtent(),c,r),g=d?Pr:Fr,f=d?d.getPixelRatio():1;super(i,n,f,g),this.targetProj_=e,this.maxSourceExtent_=a,this.triangulation_=u,this.targetResolution_=n,this.targetExtent_=i,this.sourceImage_=d,this.sourcePixelRatio_=f,this.interpolate_=o,this.canvas_=null,this.sourceListenerKey_=null}disposeInternal(){this.state==Ir&&this.unlistenSource_(),super.disposeInternal()}getImage(){return this.canvas_}getProjection(){return this.targetProj_}reproject_(){const t=this.sourceImage_.getState();if(t==Lr){const t=Se(this.targetExtent_)/this.targetResolution_,e=_e(this.targetExtent_)/this.targetResolution_;this.canvas_=Bl(t,e,this.sourcePixelRatio_,this.sourceImage_.getResolution(),this.maxSourceExtent_,this.targetResolution_,this.targetExtent_,this.triangulation_,[{extent:this.sourceImage_.getExtent(),image:this.sourceImage_.getImage()}],0,void 0,this.interpolate_)}this.state=t,this.changed()}load(){if(this.state==Pr){this.state=Ir,this.changed();const t=this.sourceImage_.getState();t==Lr||t==Mr?this.reproject_():(this.sourceListenerKey_=N(this.sourceImage_,S,(function(t){const e=this.sourceImage_.getState();e!=Lr&&e!=Mr||(this.unlistenSource_(),this.reproject_())}),this),this.sourceImage_.load())}}unlistenSource_(){k(this.sourceListenerKey_),this.sourceListenerKey_=null}}const fc="imageloadstart",pc="imageloadend",mc="imageloaderror";class _c extends i{constructor(t,e){super(t),this.image=e}}class yc extends Zl{constructor(t){super({attributions:t.attributions,projection:t.projection,state:t.state,interpolate:void 0===t.interpolate||t.interpolate}),this.on,this.once,this.un,this.resolutions_=void 0!==t.resolutions?t.resolutions:null,this.reprojectedImage_=null,this.reprojectedRevision_=0}getResolutions(){return this.resolutions_}findNearestResolution(t){if(this.resolutions_){const e=l(this.resolutions_,t,0);t=this.resolutions_[e]}return t}getImage(t,e,i,n){const r=this.getProjection();if(r&&n&&!Ki(r,n)){if(this.reprojectedImage_){if(this.reprojectedRevision_==this.getRevision()&&Ki(this.reprojectedImage_.getProjection(),n)&&this.reprojectedImage_.getResolution()==e&&ee(this.reprojectedImage_.getExtent(),t))return this.reprojectedImage_;this.reprojectedImage_.dispose(),this.reprojectedImage_=null}return this.reprojectedImage_=new gc(r,n,t,e,i,function(t,e,i){return this.getImageInternal(t,e,i,r)}.bind(this),this.getInterpolate()),this.reprojectedRevision_=this.getRevision(),this.reprojectedImage_}return r&&(n=r),this.getImageInternal(t,e,i,n)}getImageInternal(t,e,i,n){return B()}handleImageChange(t){const e=t.target;let i;switch(e.getState()){case Ir:this.loading=!0,i=fc;break;case Lr:this.loading=!1,i=pc;break;case Mr:this.loading=!1,i=mc;break;default:return}this.hasListener(i)&&this.dispatchEvent(new _c(i,e))}}function xc(t,e){t.getImage().src=e}function vc(t,e){const i=[];Object.keys(e).forEach((function(t){null!==e[t]&&void 0!==e[t]&&i.push(t+"="+encodeURIComponent(e[t]))}));const n=i.join("&");return t=t.replace(/[?&]$/,""),(t+=t.includes("?")?"&":"?")+n}const Sc="1.3.0",wc=[101,101];const Ec='© OpenStreetMap contributors.';class Tc extends vs{constructor(t){super(t=t||{})}}class Cc extends G{constructor(t){super(),this.ready=!0,this.boundHandleImageChange_=this.handleImageChange_.bind(this),this.layer_=t,this.declutterExecutorGroup=null}getFeatures(t){return B()}getData(t){return null}prepareFrame(t){return B()}renderFrame(t,e){return B()}loadedTileCallback(t,e,i){t[e]||(t[e]={}),t[e][i.tileCoord.toString()]=i}createLoadedTileFinder(t,e,i){return function(n,r){const s=this.loadedTileCallback.bind(this,i,n);return t.forEachLoadedTile(e,n,r,s)}.bind(this)}forEachFeatureAtCoordinate(t,e,i,n,r){}getLayer(){return this.layer_}handleFontsChanged(){}handleImageChange_(t){t.target.getState()===Lr&&this.renderIfReadyAndVisible()}loadImage(t){let e=t.getState();return e!=Lr&&e!=Mr&&t.addEventListener(S,this.boundHandleImageChange_),e==Pr&&(t.load(),e=t.getState()),e==Lr}renderIfReadyAndVisible(){const t=this.getLayer();t&&t.getVisible()&&"ready"===t.getSourceState()&&t.changed()}disposeInternal(){delete this.layer_,super.disposeInternal()}}const bc=[];let Rc=null;class Pc extends Cc{constructor(t){super(t),this.container=null,this.renderedResolution,this.tempTransform=[1,0,0,1,0,0],this.pixelTransform=[1,0,0,1,0,0],this.inversePixelTransform=[1,0,0,1,0,0],this.context=null,this.containerReused=!1,this.pixelContext_=null,this.frameState=null}getImageData(t,e,i){let n;Rc||function(){const t=document.createElement("canvas");t.width=1,t.height=1,Rc=t.getContext("2d")}(),Rc.clearRect(0,0,1,1);try{Rc.drawImage(t,e,i,1,1,0,0,1,1),n=Rc.getImageData(0,0,1,1).data}catch(t){return Rc=null,null}return n}getBackground(t){let e=this.getLayer().getBackground();return"function"==typeof e&&(e=e(t.viewState.resolution)),e||void 0}useContainer(t,e,i){const n=this.getLayer().getClassName();let r,s;if(t&&t.className===n&&(!i||t&&t.style.backgroundColor&&u($r(t.style.backgroundColor),$r(i)))){const e=t.firstElementChild;e instanceof HTMLCanvasElement&&(s=e.getContext("2d"))}if(s&&s.canvas.style.transform===e?(this.container=t,this.context=s,this.containerReused=!0):this.containerReused&&(this.container=null,this.context=null,this.containerReused=!1),!this.container){r=document.createElement("div"),r.className=n;let t=r.style;t.position="absolute",t.width="100%",t.height="100%",s=Dr();const e=s.canvas;r.appendChild(e),t=e.style,t.position="absolute",t.left="0",t.transformOrigin="top left",this.container=r,this.context=s}this.containerReused||!i||this.container.style.backgroundColor||(this.container.style.backgroundColor=i)}clipUnrotated(t,e,i){const n=xe(i),r=ve(i),s=de(i),o=ue(i);bt(e.coordinateToPixelTransform,n),bt(e.coordinateToPixelTransform,r),bt(e.coordinateToPixelTransform,s),bt(e.coordinateToPixelTransform,o);const a=this.inversePixelTransform;bt(a,n),bt(a,r),bt(a,s),bt(a,o),t.save(),t.beginPath(),t.moveTo(Math.round(n[0]),Math.round(n[1])),t.lineTo(Math.round(r[0]),Math.round(r[1])),t.lineTo(Math.round(s[0]),Math.round(s[1])),t.lineTo(Math.round(o[0]),Math.round(o[1])),t.clip()}dispatchRenderEvent_(t,e,i){const n=this.getLayer();if(n.hasListener(t)){const r=new Ts(t,this.inversePixelTransform,i,e);n.dispatchEvent(r)}}preRender(t,e){this.frameState=e,this.dispatchRenderEvent_(ps,t,e)}postRender(t,e){this.dispatchRenderEvent_(ms,t,e)}getRenderTransform(t,e,i,n,r,s,o){const a=r/2,l=s/2,h=n/e,c=-h,u=-t[0]+o,d=-t[1];return Mt(this.tempTransform,a,l,h,c,-i,u,d)}disposeInternal(){delete this.frameState,super.disposeInternal()}}class Ic extends Pc{constructor(t){super(t),this.image_=null}getImage(){return this.image_?this.image_.getImage():null}prepareFrame(t){const e=t.layerStatesArray[t.layerIndex],i=t.pixelRatio,n=t.viewState,r=n.resolution,s=this.getLayer().getSource(),o=t.viewHints;let a=t.extent;if(void 0!==e.extent&&(a=ye(a,on(e.extent,n.projection))),!o[Ro]&&!o[Po]&&!Ee(a))if(s){const t=n.projection,e=s.getImage(a,r,i,t);e&&(this.loadImage(e)?this.image_=e:e.getState()===Fr&&(this.image_=null))}else this.image_=null;return!!this.image_}getData(t){const e=this.frameState;if(!e)return null;const i=this.getLayer(),n=bt(e.pixelToCoordinateTransform,t.slice()),r=i.getExtent();if(r&&!Zt(r,n))return null;const s=this.image_.getExtent(),o=this.image_.getImage(),a=Se(s),l=Math.floor(o.width*((n[0]-s[0])/a));if(l<0||l>=o.width)return null;const h=_e(s),c=Math.floor(o.height*((s[3]-n[1])/h));return c<0||c>=o.height?null:this.getImageData(o,l,c)}renderFrame(t,e){const i=this.image_,n=i.getExtent(),r=i.getResolution(),s=i.getPixelRatio(),o=t.layerStatesArray[t.layerIndex],a=t.pixelRatio,l=t.viewState,h=l.center,c=a*r/(l.resolution*s),u=t.extent,d=l.resolution,g=l.rotation,f=Math.round(Se(u)/d*a),p=Math.round(_e(u)/d*a);Mt(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/a,1/a,g,-f/2,-p/2),Ft(this.inversePixelTransform,this.pixelTransform);const m=Nt(this.pixelTransform);this.useContainer(e,m,this.getBackground(t));const _=this.context,y=_.canvas;y.width!=f||y.height!=p?(y.width=f,y.height=p):this.containerReused||_.clearRect(0,0,f,p);let x=!1,v=!0;if(o.extent){const e=on(o.extent,l.projection);v=we(e,t.extent),x=v&&!Yt(e,t.extent),x&&this.clipUnrotated(_,t,e)}const S=i.getImage(),w=Mt(this.tempTransform,f/2,p/2,c,c,0,s*(n[0]-h[0])/r,s*(h[1]-n[3])/r);this.renderedResolution=r*a/s;const E=S.width*w[0],T=S.height*w[3];if(this.getLayer().getSource().getInterpolate()||(_.imageSmoothingEnabled=!1),this.preRender(_,t),v&&E>=.5&&T>=.5){const t=w[4],e=w[5],i=o.opacity;let n;1!==i&&(n=_.globalAlpha,_.globalAlpha=i),_.drawImage(S,0,0,+S.width,+S.height,t,e,E,T),1!==i&&(_.globalAlpha=n)}return this.postRender(_,t),x&&_.restore(),_.imageSmoothingEnabled=!0,m!==y.style.transform&&(y.style.transform=m),this.container}}class Lc extends Tc{constructor(t){super(t)}createRenderer(){return new Ic(this)}getData(t){return super.getData(t)}}var Mc="preload",Fc="useInterimTilesOnError";class Ac extends vs{constructor(t){t=t||{};const e=Object.assign({},t);delete e.preload,delete e.useInterimTilesOnError,super(e),this.on,this.once,this.un,this.setPreload(void 0!==t.preload?t.preload:0),this.setUseInterimTilesOnError(void 0===t.useInterimTilesOnError||t.useInterimTilesOnError)}getPreload(){return this.get(Mc)}setPreload(t){this.set(Mc,t)}getUseInterimTilesOnError(){return this.get(Fc)}setUseInterimTilesOnError(t){this.set(Fc,t)}getData(t){return super.getData(t)}}class Oc extends Pc{constructor(t){super(t),this.extentChanged=!0,this.renderedExtent_=null,this.renderedPixelRatio,this.renderedProjection=null,this.renderedRevision,this.renderedTiles=[],this.newTiles_=!1,this.tmpExtent=[1/0,1/0,-1/0,-1/0],this.tmpTileRange_=new hl(0,0,0,0)}isDrawableTile(t){const e=this.getLayer(),i=t.getState(),n=e.getUseInterimTilesOnError();return i==J||i==tt||i==Q&&!n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState.projection,o=this.getLayer();let a=o.getSource().getTile(t,e,i,r,s);return a.getState()==Q&&o.getUseInterimTilesOnError()&&o.getPreload()>0&&(this.newTiles_=!0),this.isDrawableTile(a)||(a=a.getInterimTile()),a}getData(t){const e=this.frameState;if(!e)return null;const i=this.getLayer(),n=bt(e.pixelToCoordinateTransform,t.slice()),r=i.getExtent();if(r&&!Zt(r,n))return null;const s=e.pixelRatio,o=e.viewState.projection,a=e.viewState,l=i.getRenderSource(),h=l.getTileGridForProjection(a.projection),c=l.getTilePixelRatio(e.pixelRatio);for(let t=h.getZForResolution(a.resolution);t>=h.getMinZoom();--t){const e=h.getTileCoordForCoordAndZ(n,t),i=l.getTile(t,e[1],e[2],s,o);if(!(i instanceof Vr||i instanceof zl)||i instanceof zl&&i.getState()===tt)return null;if(i.getState()!==J)continue;const r=h.getOrigin(t),u=Va(h.getTileSize(t)),d=h.getResolution(t),g=Math.floor(c*((n[0]-r[0])/d-e[1]*u[0])),f=Math.floor(c*((r[1]-n[1])/d-e[2]*u[1])),p=Math.round(c*l.getGutterForProjection(a.projection));return this.getImageData(i.getImage(),g+p,f+p)}return null}loadedTileCallback(t,e,i){return!!this.isDrawableTile(i)&&super.loadedTileCallback(t,e,i)}prepareFrame(t){return!!this.getLayer().getSource()}renderFrame(t,e){const i=t.layerStatesArray[t.layerIndex],n=t.viewState,r=n.projection,s=n.resolution,o=n.center,l=n.rotation,h=t.pixelRatio,c=this.getLayer(),u=c.getSource(),d=u.getRevision(),g=u.getTileGridForProjection(r),f=g.getZForResolution(s,u.zDirection),p=g.getResolution(f);let m=t.extent;const _=t.viewState.resolution,y=u.getTilePixelRatio(h),x=Math.round(Se(m)/_*h),v=Math.round(_e(m)/_*h),S=i.extent&&on(i.extent,r);S&&(m=ye(m,on(i.extent,r)));const w=p*x/2/y,E=p*v/2/y,T=[o[0]-w,o[1]-E,o[0]+w,o[1]+E],C=g.getTileRangeForExtentAndZ(m,f),b={};b[f]={};const R=this.createLoadedTileFinder(u,r,b),P=this.tmpExtent,I=this.tmpTileRange_;this.newTiles_=!1;const L=l?me(n.center,_,l,t.size):void 0;for(let e=C.minX;e<=C.maxX;++e)for(let n=C.minY;n<=C.maxY;++n){if(l&&!g.tileCoordIntersectsViewport([f,e,n],L))continue;const r=this.getTile(f,e,n,t);if(this.isDrawableTile(r)){const e=z(this);if(r.getState()==J){b[f][r.tileCoord.toString()]=r;let t=r.inTransition(e);t&&1!==i.opacity&&(r.endTransition(e),t=!1),this.newTiles_||!t&&this.renderedTiles.includes(r)||(this.newTiles_=!0)}if(1===r.getAlpha(e,t.time))continue}const s=g.getTileCoordChildTileRange(r.tileCoord,I,P);let o=!1;s&&(o=R(f+1,s)),o||g.forEachTileCoordParentTileRange(r.tileCoord,R,I,P)}const M=p/s*h/y;Mt(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/h,1/h,l,-x/2,-v/2);const F=Nt(this.pixelTransform);this.useContainer(e,F,this.getBackground(t));const A=this.context,O=A.canvas;Ft(this.inversePixelTransform,this.pixelTransform),Mt(this.tempTransform,x/2,v/2,M,M,0,-x/2,-v/2),O.width!=x||O.height!=v?(O.width=x,O.height=v):this.containerReused||A.clearRect(0,0,x,v),S&&this.clipUnrotated(A,t,S),u.getInterpolate()||(A.imageSmoothingEnabled=!1),this.preRender(A,t),this.renderedTiles.length=0;let N,D,k,G=Object.keys(b).map(Number);G.sort(a),1!==i.opacity||this.containerReused&&!u.getOpaque(t.viewState.projection)?(N=[],D=[]):G=G.reverse();for(let e=G.length-1;e>=0;--e){const i=G[e],n=u.getTilePixelSize(i,h,r),s=g.getResolution(i)/p,o=n[0]*s*M,a=n[1]*s*M,l=g.getTileCoordForCoordAndZ(xe(T),i),c=g.getTileCoordExtent(l),d=bt(this.tempTransform,[y*(c[0]-T[0])/p,y*(T[3]-c[3])/p]),m=y*u.getGutterForProjection(r),_=b[i];for(const e in _){const n=_[e],r=n.tileCoord,s=l[1]-r[1],h=Math.round(d[0]-(s-1)*o),c=l[2]-r[2],g=Math.round(d[1]-(c-1)*a),p=Math.round(d[0]-s*o),y=Math.round(d[1]-c*a),x=h-p,v=g-y,S=f===i,w=S&&1!==n.getAlpha(z(this),t.time);let E=!1;if(!w)if(N){k=[p,y,p+x,y,p+x,y+v,p,y+v];for(let t=0,e=N.length;tthis._maxQueueLength;)this._queue.shift().callback(null,null)}_dispatch(){if(this._running||0===this._queue.length)return;const t=this._queue.shift();this._job=t;const e=t.inputs[0].width,i=t.inputs[0].height,n=t.inputs.map((function(t){return t.data.buffer})),r=this._workers.length;if(this._running=r,1===r)return void this._workers[0].postMessage({buffers:n,meta:t.meta,imageOps:this._imageOps,width:e,height:i},n);const s=t.inputs[0].data.length,o=4*Math.ceil(s/4/r);for(let s=0;sStamen Design, under CC BY 3.0.',Ec],Hc={terrain:{extension:"jpg",opaque:!0},"terrain-background":{extension:"jpg",opaque:!0},"terrain-labels":{extension:"png",opaque:!1},"terrain-lines":{extension:"png",opaque:!1},"toner-background":{extension:"png",opaque:!0},toner:{extension:"png",opaque:!0},"toner-hybrid":{extension:"png",opaque:!1},"toner-labels":{extension:"png",opaque:!1},"toner-lines":{extension:"png",opaque:!1},"toner-lite":{extension:"png",opaque:!0},watercolor:{extension:"jpg",opaque:!0}},$c={terrain:{minZoom:0,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:0,maxZoom:18}};class Jc extends st{constructor(t,e,i,n,r,s){super(t,e),this.src_=i,this.extent_=n,this.preemptive_=r,this.grid_=null,this.keys_=null,this.data_=null,this.jsonp_=s}getImage(){return null}getData(t){if(!this.grid_||!this.keys_)return null;const e=(t[0]-this.extent_[0])/(this.extent_[2]-this.extent_[0]),i=(t[1]-this.extent_[1])/(this.extent_[3]-this.extent_[1]),n=this.grid_[Math.floor((1-i)*this.grid_.length)];if("string"!=typeof n)return null;let r=n.charCodeAt(Math.floor(e*n.length));r>=93&&r--,r>=35&&r--,r-=32;let s=null;if(r in this.keys_){const t=this.keys_[r];s=this.data_&&t in this.data_?this.data_[t]:t}return s}forDataAtCoordinate(t,e,i){this.state==tt&&!0===i?(this.state=H,D(this,S,(function(i){e(this.getData(t))}),this),this.loadInternal_()):!0===i?setTimeout(function(){e(this.getData(t))}.bind(this),0):e(this.getData(t))}getKey(){return this.src_}handleError_(){this.state=Q,this.changed()}handleLoad_(t){this.grid_=t.grid,this.keys_=t.keys,this.data_=t.data,this.state=J,this.changed()}loadInternal_(){if(this.state==H)if(this.state=$,this.jsonp_)vl(this.src_,this.handleLoad_.bind(this),this.handleError_.bind(this));else{const t=new XMLHttpRequest;t.addEventListener("load",this.onXHRLoad_.bind(this)),t.addEventListener("error",this.onXHRError_.bind(this)),t.open("GET",this.src_),t.send()}}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleError_()}this.handleLoad_(t)}else this.handleError_()}onXHRError_(t){this.handleError_()}load(){this.preemptive_?this.loadInternal_():this.setState(tt)}}class Qc extends ch{constructor(t){const e=t.projection||"EPSG:3857",i=t.extent||ih(e),n=t.tileGrid||Ql({extent:i,maxResolution:t.maxResolution,maxZoom:void 0!==t.maxZoom?t.maxZoom:22,minZoom:t.minZoom,tileSize:t.tileSize||512});super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,interpolate:!0,opaque:!1,projection:e,state:t.state,tileGrid:n,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:tu,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:void 0===t.zDirection?1:t.zDirection}),this.format_=t.format?t.format:null,this.sourceTileCache=new ll(this.tileCache.highWaterMark),this.overlaps_=null==t.overlaps||t.overlaps,this.tileClass=t.tileClass?t.tileClass:gl,this.tileGrids_={}}getFeaturesInExtent(t){const e=[],i=this.tileCache;if(0===i.getCount())return e;const n=sl(i.peekFirstKey())[0],r=this.tileGrid;return i.forEach((function(i){if(i.tileCoord[0]!==n||i.getState()!==J)return;const s=i.getSourceTiles();for(let i=0,n=s.length;i{const n=rl(e),r=i.peek(n);if(r){const e=r.sourceTiles;for(let i=0,n=e.length;i{const r=this.tileUrlFunction(n,t,e),s=this.sourceTileCache.containsKey(r)?this.sourceTileCache.get(r):new this.tileClass(n,r?H:tt,r,this.format_,this.tileLoadFunction);i.sourceTiles.push(s);const o=s.getState();if(o{this.handleTileChange(e);const n=s.getState();if(n===J||n===Q){const e=s.getKey();e in i.errorTileKeys?s.getState()===J&&delete i.errorTileKeys[e]:i.loadingSourceTiles--,n===Q?i.errorTileKeys[e]=!0:s.removeEventListener(S,t),0===i.loadingSourceTiles&&i.setState(x(i.errorTileKeys)?J:Q)}};s.addEventListener(S,t),i.loadingSourceTiles++}o===H&&(s.extent=l.getTileCoordExtent(n),s.projection=e,s.resolution=l.getResolution(n[0]),this.sourceTileCache.set(r,s),s.load())})),i.loadingSourceTiles||i.setState(i.sourceTiles.some((t=>t.getState()===Q))?Q:J)}return i.sourceTiles}getTile(t,e,i,n,r){const s=il(t,e,i),o=this.getKey();let a;if(this.tileCache.containsKey(s)&&(a=this.tileCache.get(s),a.key===o))return a;const l=[t,e,i];let h=this.getTileCoordForTileUrlFunction(l,r);const c=this.getTileGrid().getExtent(),u=this.getTileGridForProjection(r);if(h&&c){const e=u.getTileCoordExtent(h);Xt(e,-u.getResolution(t),e),we(c,e)||(h=null)}let d=!0;if(null!==h){const e=this.tileGrid,i=u.getResolution(t),s=e.getZForResolution(i,1),o=u.getTileCoordExtent(h);Xt(o,-i,o),e.forEachTileCoord(o,s,function(t){d=d&&!this.tileUrlFunction(t,n,r)}.bind(this))}const g=new dl(l,d?tt:H,h,this.getSourceTiles.bind(this,n,r));return g.key=o,a?(g.interimTile=a,g.refreshInterimChain(),this.tileCache.replace(s,g)):this.tileCache.set(s,g),g}getTileGridForProjection(t){const e=t.getCode();let i=this.tileGrids_[e];if(!i){const t=this.tileGrid,n=t.getResolutions().slice(),r=n.map((function(e,i){return t.getOrigin(i)})),s=n.map((function(e,i){return t.getTileSize(i)})),o=43;for(let t=n.length;t0)||i.find((function(i){return e.Identifier==i.TileMatrix||!e.Identifier.includes(":")&&t.Identifier+":"+e.Identifier===i.TileMatrix})),l){r.push(e.Identifier);const t=28e-5*e.ScaleDenominator/h,i=e.TileWidth,l=e.TileHeight;c?s.push([e.TopLeftCorner[1],e.TopLeftCorner[0]]):s.push(e.TopLeftCorner),n.push(t),o.push(i==l?i:[i,l]),a.push([e.MatrixWidth,e.MatrixHeight])}})),new eu({extent:e,origins:s,resolutions:n,matrixIds:r,tileSizes:o,sizes:a})}const nu=34962,ru=34963,su=35044,ou=35048,au=5126,lu=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function hu(t,e){e=Object.assign({preserveDrawingBuffer:!0,antialias:!gt},e);const i=lu.length;for(let n=0;n0)return;const i=hu(e.canvas).getExtension("WEBGL_lose_context");i&&i.loseContext(),delete td[t]}(this.canvasCacheKey_),delete this.gl_,delete this.canvas_}prepareDraw(t,e){const i=this.getGL(),n=this.getCanvas(),r=t.size,s=t.pixelRatio;n.width=r[0]*s,n.height=r[1]*s,n.style.width=r[0]+"px",n.style.height=r[1]+"px";for(let e=this.postProcessPasses_.length-1;e>=0;e--)this.postProcessPasses_[e].init(t);i.bindTexture(i.TEXTURE_2D,null),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.enable(i.BLEND),i.blendFunc(i.ONE,e?i.ZERO:i.ONE_MINUS_SRC_ALPHA)}prepareDrawToRenderTarget(t,e,i){const n=this.getGL(),r=e.getSize();n.bindFramebuffer(n.FRAMEBUFFER,e.getFramebuffer()),n.viewport(0,0,r[0],r[1]),n.bindTexture(n.TEXTURE_2D,e.getTexture()),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendFunc(n.ONE,i?n.ZERO:n.ONE_MINUS_SRC_ALPHA)}drawElements(t,e){const i=this.getGL();this.getExtension("OES_element_index_uint");const n=i.UNSIGNED_INT,r=e-t,s=4*t;i.drawElements(i.TRIANGLES,r,n,s)}finalizeDraw(t,e,i){for(let n=0,r=this.postProcessPasses_.length;nthis.size_[0]||e>=this.size_[1])return ad[0]=0,ad[1]=0,ad[2]=0,ad[3]=0,ad;this.readAll();const i=Math.floor(t)+(this.size_[1]-Math.floor(e)-1)*this.size_[0];return ad[0]=this.data_[4*i],ad[1]=this.data_[4*i+1],ad[2]=this.data_[4*i+2],ad[3]=this.data_[4*i+3],ad}getTexture(){return this.texture_}getFramebuffer(){return this.framebuffer_}updateSize_(){const t=this.size_,e=this.helper_.getGL();this.texture_=this.helper_.createTexture(t,null,this.texture_),e.bindFramebuffer(e.FRAMEBUFFER,this.framebuffer_),e.viewport(0,0,t[0],t[1]),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture_,0),this.data_=new Uint8Array(t[0]*t[1]*4)}}function hd(t,e,i){const n=i?t.LINEAR:t.NEAREST;t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,n)}function cd(t,e,i,n,r,s){const o=t.getGL();let a,l;if(i instanceof Float32Array){a=o.FLOAT,t.getExtension("OES_texture_float");l=null!==t.getExtension("OES_texture_float_linear")}else a=o.UNSIGNED_BYTE,l=!0;hd(o,e,s&&l);const h=i.byteLength/n[1];let c,u=1;switch(h%8==0?u=8:h%4==0?u=4:h%2==0&&(u=2),r){case 1:c=o.LUMINANCE;break;case 2:c=o.LUMINANCE_ALPHA;break;case 3:c=o.RGB;break;case 4:c=o.RGBA;break;default:throw new Error(`Unsupported number of bands: ${r}`)}const d=o.getParameter(o.UNPACK_ALIGNMENT);o.pixelStorei(o.UNPACK_ALIGNMENT,u),o.texImage2D(o.TEXTURE_2D,0,c,n[0],n[1],0,c,a,i),o.pixelStorei(o.UNPACK_ALIGNMENT,d)}let ud=null;class dd extends v{constructor(t){super(),this.tile,this.textures=[],this.handleTileChange_=this.handleTileChange_.bind(this),this.renderSize_=Va(t.grid.getTileSize(t.tile.tileCoord[0])),this.gutter_=t.gutter||0,this.bandCount=NaN,this.helper_=t.helper;const e=new Gu(nu,su);e.fromArray([0,1,1,1,1,0,0,0]),this.helper_.flushBufferData(e),this.coords=e,this.setTile(t.tile)}setTile(t){if(t!==this.tile)if(this.tile&&this.tile.removeEventListener(S,this.handleTileChange_),this.tile=t,this.textures.length=0,this.loaded=t.getState()===J,this.loaded)this.uploadTile_();else{if(t instanceof Vr){const e=t.getImage();e instanceof Image&&!e.crossOrigin&&(e.crossOrigin="anonymous")}t.addEventListener(S,this.handleTileChange_)}}uploadTile_(){const t=this.helper_,e=t.getGL(),i=this.tile;if(i instanceof Vr||i instanceof zl){const t=e.createTexture();return this.textures.push(t),this.bandCount=4,void function(t,e,i,n){hd(t,e,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i)}(e,t,i.getImage(),i.interpolate)}const n=i.getSize(),r=[n[0]+2*this.gutter_,n[1]+2*this.gutter_],s=i.getData(),o=s instanceof Float32Array,a=r[0]*r[1],l=o?Float32Array:Uint8Array,h=l.BYTES_PER_ELEMENT,c=s.byteLength/r[1];this.bandCount=Math.floor(c/h/r[0]);const u=Math.ceil(this.bandCount/4);if(1===u){const n=e.createTexture();return this.textures.push(n),void cd(t,n,s,r,this.bandCount,i.interpolate)}const d=new Array(u);for(let t=0;t=f;--r){const i=l.getTileRangeForExtentAndZ(e,r,this.tempTileRange_),o=l.getResolution(r);for(let e=i.minX;e<=i.maxX;++e)for(let g=i.minY;g<=i.maxY;++g){const i=el(r,e,g,this.tempTileCoord_),f=Sd(a,i);let p,m;if(d.containsKey(f)&&(p=d.get(f),m=p.tile),!p||p.tile.key!==a.getKey())if(m=a.getTile(r,e,g,t.pixelRatio,s.projection),p)if(this.isDrawableTile_(m))p.setTile(m);else{const t=m.getInterimTile();p.setTile(t)}else p=new dd({tile:m,grid:l,helper:this.helper,gutter:h}),d.set(f,p);xd(n,p,r);const _=m.getKey();u[_]=!0,m.getState()===H&&(t.tileQueue.isKeyQueued(_)||t.tileQueue.enqueue([m,c,l.getTileCoordCenter(i),o]))}}}renderFrame(t){this.frameState_=t,this.renderComplete=!0;const e=this.helper.getGL();this.preRender(e,t);const i=t.viewState,n=this.getLayer(),r=n.getRenderSource(),s=r.getTileGridForProjection(i.projection),o=r.getGutterForProjection(i.projection),l=vd(t,t.extent),h=s.getZForResolution(i.resolution,r.zDirection),c={},u=n.getPreload();if(t.nextExtent){const e=s.getZForResolution(i.nextResolution,r.zDirection),n=vd(t,t.nextExtent);this.enqueueTiles(t,n,e,c,u)}this.enqueueTiles(t,l,h,c,0),u>0&&setTimeout((()=>{this.enqueueTiles(t,l,h-1,c,u-1)}),0);const d={},g=z(this),f=t.time;let p=!1;const m=c[h];for(let t=0,e=m.length;t=r;--t){if(this.findAltTiles_(s,n,t,c))break}}this.helper.useProgram(this.program_,t),this.helper.prepareDraw(t,!p);const _=Object.keys(c).map(Number).sort(a),y=i.center[0],x=i.center[1];for(let n=0,r=_.length;n0&&(b=s.getTileCoordExtent(c),ye(b,l,b)),this.helper.setUniformFloatVec4(fd.RENDER_EXTENT,b),this.helper.setUniformFloatValue(fd.RESOLUTION,i.resolution),this.helper.setUniformFloatValue(fd.ZOOM,i.zoom),this.helper.drawElements(0,this.indices_.getSize())}}this.helper.finalizeDraw(t,this.dispatchPreComposeEvent,this.dispatchPostComposeEvent);const v=this.helper.getCanvas(),S=this.tileTextureCache_;for(;S.canExpireCache();){S.pop().dispose()}return t.postRenderFunctions.push((function(t,e){r.updateCacheSize(.1,e.viewState.projection),r.expireCache(e.viewState.projection,_d)})),this.postRender(e,t),v}getData(t){if(!this.helper.getGL())return null;const e=this.frameState_;if(!e)return null;const i=this.getLayer(),n=bt(e.pixelToCoordinateTransform,t.slice()),r=e.viewState,s=i.getExtent();if(s&&!Zt(on(s,r.projection),n))return null;const o=i.getSources(zt([n]),r.resolution);let a,l,h;for(a=o.length-1;a>=0;--a)if(l=o[a],"ready"===l.getState()){if(h=l.getTileGridForProjection(r.projection),l.getWrapX())break;const t=h.getExtent();if(!t||Zt(t,n))break}if(a<0)return null;const c=this.tileTextureCache_;for(let t=h.getZForResolution(r.resolution);t>=h.getMinZoom();--t){const e=h.getTileCoordForCoordAndZ(n,t),i=Sd(l,e);if(!c.containsKey(i))continue;const r=c.get(i),s=r.tile;if(s instanceof zl&&s.getState()===tt)return null;if(!r.loaded)continue;const o=h.getOrigin(t),a=Va(h.getTileSize(t)),u=h.getResolution(t),d=(n[0]-o[0])/u-e[1]*a[0],g=(o[1]-n[1])/u-e[2]*a[1];return r.getPixelData(d,g)}return null}findAltTiles_(t,e,i,n){const r=t.getTileRangeForTileCoordAndZ(e,i,this.tempTileRange_);if(!r)return!1;let s=!0;const o=this.tileTextureCache_,a=this.getLayer().getRenderSource();for(let t=r.minX;t<=r.maxX;++t)for(let e=r.minY;e<=r.maxY;++e){const r=Sd(a,[i,t,e]);let l=!1;if(o.containsKey(r)){const t=o.get(r);t.loaded&&(xd(n,t,i),l=!0)}l||(s=!1)}return s}clearCache(){const t=this.tileTextureCache_;t.forEach((t=>t.dispose())),t.clear()}removeHelper(){this.helper&&this.clearCache(),super.removeHelper()}disposeInternal(){const t=this.helper;if(t){t.getGL().deleteProgram(this.program_),delete this.program_,t.deleteBuffer(this.indices_)}super.disposeInternal(),delete this.indices_,delete this.tileTextureCache_,delete this.frameState_}}const Ed=1,Td=2,Cd=4,bd=8,Rd=16,Pd=31,Id=0,Ld={};function Md(t){if("number"==typeof t)return Ed;if("boolean"==typeof t)return bd;if("string"==typeof t)return ts(t)?Cd|Td:Td;if(!Array.isArray(t))throw new Error(`Unhandled value type: ${JSON.stringify(t)}`);const e=t;if(e.every((function(t){return"number"==typeof t})))return 3===e.length||4===e.length?Cd|Rd:Rd;if("string"!=typeof e[0])throw new Error(`Expected an expression operator but received: ${JSON.stringify(e)}`);const i=Ld[e[0]];if(void 0===i)throw new Error(`Unrecognized expression operator: ${JSON.stringify(e)}`);return i.getReturnType(e.slice(1))}function Fd(t){return Math.log2(t)%1==0}function Ad(t){const e=t.toString();return e.includes(".")?e:e+".0"}function Od(t){if(t.length<2||t.length>4)throw new Error("`formatArray` can only output `vec2`, `vec3` or `vec4` arrays.");return`vec${t.length}(${t.map(Ad).join(", ")})`}function Nd(t){const e=$r(t).slice();return e.length<4&&e.push(1),Od(e.map((function(t,e){return e<3?t/255:t})))}function Dd(t,e){return void 0===t.stringLiteralsMap[e]&&(t.stringLiteralsMap[e]=Object.keys(t.stringLiteralsMap).length),t.stringLiteralsMap[e]}function kd(t,e){return Ad(Dd(t,e))}function Gd(t,e,i){if(Array.isArray(e)&&"string"==typeof e[0]){const n=Ld[e[0]];if(void 0===n)throw new Error(`Unrecognized expression operator: ${JSON.stringify(e)}`);return n.toGlsl(t,e.slice(1),i)}const n=Md(e);if((n&Ed)>0)return Ad(e);if((n&bd)>0)return e.toString();if((n&Td)>0&&(void 0===i||i==Td))return kd(t,e.toString());if((n&Cd)>0&&(void 0===i||i==Cd))return Nd(e);if((n&Rd)>0)return Od(e);throw new Error(`Unexpected expression ${e} (expected type ${i})`)}function jd(t){if(!(Md(t)&Ed))throw new Error(`A numeric value was expected, got ${JSON.stringify(t)} instead`)}function Bd(t){for(let e=0;ee)throw new Error(`At most ${e} arguments were expected, got ${t.length} instead`)}function Zd(t){if(t.length%2!=0)throw new Error(`An even amount of arguments was expected, got ${t} instead`)}function Yd(t,e){if(!Fd(e))throw new Error(`Could not infer only one type from the following expression: ${JSON.stringify(t)}`)}function Kd(t){return"u_var_"+t}Ld.get={getReturnType:function(t){return Pd},toGlsl:function(t,e){Xd(e,1),Ud(e[0]);const i=e[0].toString();t.attributes.includes(i)||t.attributes.push(i);return(t.inFragmentShader?"v_":"a_")+i}},Ld.var={getReturnType:function(t){return Pd},toGlsl:function(t,e){Xd(e,1),Ud(e[0]);const i=e[0].toString();return t.variables.includes(i)||t.variables.push(i),Kd(i)}};const qd="u_paletteTextures";Ld.palette={getReturnType:function(t){return Cd},toGlsl:function(t,e){Xd(e,2),jd(e[0]);const i=Gd(t,e[0]),n=e[1];if(!Array.isArray(n))throw new Error("The second argument of palette must be an array");const r=n.length,s=new Uint8Array(4*r);for(let t=0;tGd(e,t))).join(` ${t} `),n=`(${n})`,n}}}Ld.band={getReturnType:function(t){return Ed},toGlsl:function(t,e){Vd(e,1),Wd(e,3);const i=e[0];if(!(Hd in t.functions)){let e="";const i=t.bandCount||1;for(let t=0;t"]={getReturnType:function(t){return bd},toGlsl:function(t,e){return Xd(e,2),Bd(e),`(${Gd(t,e[0])} > ${Gd(t,e[1])})`}},Ld[">="]={getReturnType:function(t){return bd},toGlsl:function(t,e){return Xd(e,2),Bd(e),`(${Gd(t,e[0])} >= ${Gd(t,e[1])})`}},Ld["<"]={getReturnType:function(t){return bd},toGlsl:function(t,e){return Xd(e,2),Bd(e),`(${Gd(t,e[0])} < ${Gd(t,e[1])})`}},Ld["<="]={getReturnType:function(t){return bd},toGlsl:function(t,e){return Xd(e,2),Bd(e),`(${Gd(t,e[0])} <= ${Gd(t,e[1])})`}},Ld["=="]=$d("=="),Ld["!="]=$d("!="),Ld["!"]={getReturnType:function(t){return bd},toGlsl:function(t,e){return Xd(e,1),zd(e[0]),`(!${Gd(t,e[0])})`}},Ld.all=Jd("&&"),Ld.any=Jd("||"),Ld.between={getReturnType:function(t){return bd},toGlsl:function(t,e){Xd(e,3),Bd(e);const i=Gd(t,e[1]),n=Gd(t,e[2]),r=Gd(t,e[0]);return`(${r} >= ${i} && ${r} <= ${n})`}},Ld.array={getReturnType:function(t){return Rd},toGlsl:function(t,e){Vd(e,2),Wd(e,4),Bd(e);const i=e.map((function(e){return Gd(t,e,Ed)}));return`vec${e.length}(${i.join(", ")})`}},Ld.color={getReturnType:function(t){return Cd},toGlsl:function(t,e){Vd(e,3),Wd(e,4),Bd(e);const i=e;3===e.length&&i.push(1);const n=e.map((function(e,i){return Gd(t,e,Ed)+(i<3?" / 255.0":"")}));return`vec${e.length}(${n.join(", ")})`}},Ld.interpolate={getReturnType:function(t){let e=Cd|Ed;for(let i=3;i=1;i-=2){o=`(${r} == ${Gd(t,e[i])} ? ${Gd(t,e[i+1],n)} : ${o||s})`}return o}},Ld.case={getReturnType:function(t){let e=Pd;for(let i=1;i=0;i-=2){s=`(${Gd(t,e[i])} ? ${Gd(t,e[i+1],n)} : ${s||r})`}return s}};class Qd{constructor(){this.uniforms=[],this.attributes=[],this.varyings=[],this.sizeExpression="vec2(1.0)",this.rotationExpression="0.0",this.offsetExpression="vec2(0.0)",this.colorExpression="vec4(1.0)",this.texCoordExpression="vec4(0.0, 0.0, 1.0, 1.0)",this.discardExpression="false",this.rotateWithView=!1}addUniform(t){return this.uniforms.push(t),this}addAttribute(t){return this.attributes.push(t),this}addVarying(t,e,i){return this.varyings.push({name:t,type:e,expression:i}),this}setSizeExpression(t){return this.sizeExpression=t,this}setRotationExpression(t){return this.rotationExpression=t,this}setSymbolOffsetExpression(t){return this.offsetExpression=t,this}setColorExpression(t){return this.colorExpression=t,this}setTextureCoordinateExpression(t){return this.texCoordExpression=t,this}setFragmentDiscardExpression(t){return this.discardExpression=t,this}setSymbolRotateWithView(t){return this.rotateWithView=t,this}getSizeExpression(){return this.sizeExpression}getOffsetExpression(){return this.offsetExpression}getColorExpression(){return this.colorExpression}getTextureCoordinateExpression(){return this.texCoordExpression}getFragmentDiscardExpression(){return this.discardExpression}getSymbolVertexShader(t){const e=this.rotateWithView?"u_offsetScaleMatrix * u_offsetRotateMatrix":"u_offsetScaleMatrix";let i=this.attributes,n=this.varyings;return t&&(i=i.concat("vec4 a_hitColor"),n=n.concat({name:"v_hitColor",type:"vec4",expression:"a_hitColor"})),`precision mediump float;\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n${this.uniforms.map((function(t){return"uniform "+t+";"})).join("\n")}\nattribute vec2 a_position;\nattribute float a_index;\n${i.map((function(t){return"attribute "+t+";"})).join("\n")}\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n${n.map((function(t){return"varying "+t.type+" "+t.name+";"})).join("\n")}\nvoid main(void) {\n mat4 offsetMatrix = ${e};\n vec2 halfSize = ${this.sizeExpression} * 0.5;\n vec2 offset = ${this.offsetExpression};\n float angle = ${this.rotationExpression};\n float offsetX;\n float offsetY;\n if (a_index == 0.0) {\n offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n } else if (a_index == 1.0) {\n offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n } else if (a_index == 2.0) {\n offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n } else {\n offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n }\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n vec4 texCoord = ${this.texCoordExpression};\n float u = a_index == 0.0 || a_index == 3.0 ? texCoord.s : texCoord.p;\n float v = a_index == 2.0 || a_index == 3.0 ? texCoord.t : texCoord.q;\n v_texCoord = vec2(u, v);\n u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n v = a_index == 2.0 || a_index == 3.0 ? 0.0 : 1.0;\n v_quadCoord = vec2(u, v);\n${n.map((function(t){return" "+t.name+" = "+t.expression+";"})).join("\n")}\n}`}getSymbolFragmentShader(t){const e=t?" if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;":"";let i=this.varyings;return t&&(i=i.concat({name:"v_hitColor",type:"vec4",expression:"a_hitColor"})),`precision mediump float;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n${this.uniforms.map((function(t){return"uniform "+t+";"})).join("\n")}\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n${i.map((function(t){return"varying "+t.type+" "+t.name+";"})).join("\n")}\nvoid main(void) {\n if (${this.discardExpression}) { discard; }\n gl_FragColor = ${this.colorExpression};\n gl_FragColor.rgb *= gl_FragColor.a;\n${e}\n}`}}function tg(t){const e=t.symbol,i=void 0!==e.size?e.size:1,n=e.color||"white",r=e.textureCoord||[0,0,1,1],s=e.offset||[0,0],o=void 0!==e.opacity?e.opacity:1,a=void 0!==e.rotation?e.rotation:0,l={inFragmentShader:!1,variables:[],attributes:[],stringLiteralsMap:{},functions:{}},h=Gd(l,i,Rd|Ed),c=Gd(l,s,Rd),u=Gd(l,r,Rd),d=Gd(l,a,Ed),g={inFragmentShader:!0,variables:l.variables,attributes:[],stringLiteralsMap:l.stringLiteralsMap,functions:{}},f=Gd(g,n,Cd),p=Gd(g,o,Ed);let m="1.0";const _=`vec2(${Gd(g,i,Rd|Ed)}).x`;switch(e.symbolType){case"square":case"image":break;case"circle":m=`(1.0-smoothstep(1.-4./${_},1.,dot(v_quadCoord-.5,v_quadCoord-.5)*4.))`;break;case"triangle":const t="(v_quadCoord*2.-1.)",i=`(atan(${t}.x,${t}.y))`;m=`(1.0-smoothstep(.5-3./${_},.5,cos(floor(.5+${i}/2.094395102)*2.094395102-${i})*length(${t})))`;break;default:throw new Error("Unexpected symbol type: "+e.symbolType)}const y=(new Qd).setSizeExpression(`vec2(${h})`).setRotationExpression(d).setSymbolOffsetExpression(c).setTextureCoordinateExpression(u).setSymbolRotateWithView(!!e.rotateWithView).setColorExpression(`vec4(${f}.rgb, ${f}.a * ${p} * ${m})`);if(t.filter){const e=Gd(g,t.filter,bd);y.setFragmentDiscardExpression(`!${e}`)}const x={};if(g.variables.forEach((function(e){const i=Kd(e);y.addUniform(`float ${i}`),x[i]=function(){if(!t.variables||void 0===t.variables[e])throw new Error(`The following variable is missing from the style: ${e}`);let i=t.variables[e];return"string"==typeof i&&(i=Dd(l,i)),void 0!==i?i:-9999999}})),"image"===e.symbolType&&e.src){const t=new Image;t.crossOrigin=void 0===e.crossOrigin?"anonymous":e.crossOrigin,t.src=e.src,y.addUniform("sampler2D u_texture").setColorExpression(y.getColorExpression()+" * texture2D(u_texture, v_texCoord)"),x.u_texture=t}return g.attributes.forEach((function(t){l.attributes.includes(t)||l.attributes.push(t),y.addVarying(`v_${t}`,"float",`a_${t}`)})),l.attributes.forEach((function(t){y.addAttribute(`float a_${t}`)})),{builder:y,attributes:l.attributes.map((function(t){return{name:t,callback:function(e,i){let n=i[t];return"string"==typeof n&&(n=Dd(l,n)),void 0!==n?n:-9999999}}})),uniforms:x}}class eg{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=Va(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new eg({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return B()}getImage(t){return B()}getHitDetectionImage(){return B()}getPixelRatio(t){return 1}getImageState(){return B()}getImageSize(){return B()}getOrigin(){return B()}getSize(){return B()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=Va(t)}listenImageChange(t){B()}load(){B()}unlistenImageChange(t){B()}}class ig extends eg{constructor(t){super({opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode}),this.canvas_=void 0,this.hitDetectionCanvas_=null,this.fill_=void 0!==t.fill?t.fill:null,this.origin_=[0,0],this.points_=t.points,this.radius_=void 0!==t.radius?t.radius:t.radius1,this.radius2_=t.radius2,this.angle_=void 0!==t.angle?t.angle:0,this.stroke_=void 0!==t.stroke?t.stroke:null,this.size_=null,this.renderOptions_=null,this.render()}clone(){const t=this.getScale(),e=new ig({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_;if(!t)return null;const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||this.createHitDetectionCanvas_(this.renderOptions_),this.hitDetectionCanvas_}getImage(t){let e=this.canvas_[t];if(!e){const i=this.renderOptions_,n=Dr(i.size*t,i.size*t);this.draw_(i,n,t),e=n.canvas,this.canvas_[t]=e}return e}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return Lr}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius_}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||this.points_===1/0||"bevel"!==t&&"miter"!==t)return e;let n=this.radius_,r=void 0===this.radius2_?n:this.radius2_;if(n0,6);const a=void 0!==t.src?Pr:Lr;this.color_=void 0!==t.color?$r(t.color):null,this.iconImage_=ag(s,o,void 0!==this.imgSize_?this.imgSize_:null,this.crossOrigin_,a,this.color_),this.offset_=void 0!==t.offset?t.offset:[0,0],this.offsetOrigin_=void 0!==t.offsetOrigin?t.offsetOrigin:"top-left",this.origin_=null,this.size_=void 0!==t.size?t.size:null}clone(){const t=this.getScale();return new lg({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,imgSize:this.imgSize_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:Array.isArray(t)?t.slice():t,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getAnchor(){let t=this.normalizedAnchor_;if(!t){t=this.anchor_;const e=this.getSize();if("fraction"==this.anchorXUnits_||"fraction"==this.anchorYUnits_){if(!e)return null;t=this.anchor_.slice(),"fraction"==this.anchorXUnits_&&(t[0]*=e[0]),"fraction"==this.anchorYUnits_&&(t[1]*=e[1])}if("top-left"!=this.anchorOrigin_){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),"top-right"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[0]=-t[0]+e[0]),"bottom-left"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]-e[0]/i[0],t[1]+e[1]/i[1]]}setAnchor(t){this.anchor_=t,this.normalizedAnchor_=null}getColor(){return this.color_}getImage(t){return this.iconImage_.getImage(t)}getPixelRatio(t){return this.iconImage_.getPixelRatio(t)}getImageSize(){return this.iconImage_.getSize()}getImageState(){return this.iconImage_.getImageState()}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage()}getOrigin(){if(this.origin_)return this.origin_;let t=this.offset_;if("top-left"!=this.offsetOrigin_){const e=this.getSize(),i=this.iconImage_.getSize();if(!e||!i)return null;t=t.slice(),"top-right"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[0]=i[0]-e[0]-t[0]),"bottom-left"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[1]=i[1]-e[1]-t[1])}return this.origin_=t,this.origin_}getSrc(){return this.iconImage_.getSrc()}getSize(){return this.size_?this.size_:this.iconImage_.getSize()}listenImageChange(t){this.iconImage_.addEventListener(S,t)}load(){this.iconImage_.load()}unlistenImageChange(t){this.iconImage_.removeEventListener(S,t)}}class hg{constructor(t){t=t||{},this.color_=void 0!==t.color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new hg({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}class cg{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=pg,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new cg({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer(),stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=pg,this.geometry_=t}setZIndex(t){this.zIndex_=t}}function ug(t){let e;if("function"==typeof t)e=t;else{let i;if(Array.isArray(t))i=t;else{at("function"==typeof t.getZIndex,41);i=[t]}e=function(){return i}}return e}let dg=null;function gg(t,e){if(!dg){const t=new rg({color:"rgba(255,255,255,0.4)"}),e=new hg({color:"#3399CC",width:1.25});dg=[new cg({image:new ng({fill:t,stroke:e,radius:5}),fill:t,stroke:e})]}return dg}function fg(){const t={},e=[255,255,255,1],i=[0,153,255,1];return t.Polygon=[new cg({fill:new rg({color:[255,255,255,.5]})})],t.MultiPolygon=t.Polygon,t.LineString=[new cg({stroke:new hg({color:e,width:5})}),new cg({stroke:new hg({color:i,width:3})})],t.MultiLineString=t.LineString,t.Circle=t.Polygon.concat(t.LineString),t.Point=[new cg({image:new ng({radius:6,fill:new rg({color:i}),stroke:new hg({color:e,width:1.5})}),zIndex:1/0})],t.MultiPoint=t.Point,t.GeometryCollection=t.Polygon.concat(t.LineString,t.Point),t}function pg(t){return t.getGeometry()}class mg{constructor(t){t=t||{},this.font_=t.font,this.rotation_=t.rotation,this.rotateWithView_=t.rotateWithView,this.scale_=t.scale,this.scaleArray_=Va(void 0!==t.scale?t.scale:1),this.text_=t.text,this.textAlign_=t.textAlign,this.justify_=t.justify,this.textBaseline_=t.textBaseline,this.fill_=void 0!==t.fill?t.fill:new rg({color:"#333"}),this.maxAngle_=void 0!==t.maxAngle?t.maxAngle:Math.PI/4,this.placement_=void 0!==t.placement?t.placement:"point",this.overflow_=!!t.overflow,this.stroke_=void 0!==t.stroke?t.stroke:null,this.offsetX_=void 0!==t.offsetX?t.offsetX:0,this.offsetY_=void 0!==t.offsetY?t.offsetY:0,this.backgroundFill_=t.backgroundFill?t.backgroundFill:null,this.backgroundStroke_=t.backgroundStroke?t.backgroundStroke:null,this.padding_=void 0===t.padding?null:t.padding}clone(){const t=this.getScale();return new mg({font:this.getFont(),placement:this.getPlacement(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0})}getOverflow(){return this.overflow_}getFont(){return this.font_}getMaxAngle(){return this.maxAngle_}getPlacement(){return this.placement_}getOffsetX(){return this.offsetX_}getOffsetY(){return this.offsetY_}getFill(){return this.fill_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getStroke(){return this.stroke_}getText(){return this.text_}getTextAlign(){return this.textAlign_}getJustify(){return this.justify_}getTextBaseline(){return this.textBaseline_}getBackgroundFill(){return this.backgroundFill_}getBackgroundStroke(){return this.backgroundStroke_}getPadding(){return this.padding_}setOverflow(t){this.overflow_=t}setFont(t){this.font_=t}setMaxAngle(t){this.maxAngle_=t}setOffsetX(t){this.offsetX_=t}setOffsetY(t){this.offsetY_=t}setPlacement(t){this.placement_=t}setRotateWithView(t){this.rotateWithView_=t}setFill(t){this.fill_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=Va(void 0!==t?t:1)}setStroke(t){this.stroke_=t}setText(t){this.text_=t}setTextAlign(t){this.textAlign_=t}setJustify(t){this.justify_=t}setTextBaseline(t){this.textBaseline_=t}setBackgroundFill(t){this.backgroundFill_=t}setBackgroundStroke(t){this.backgroundStroke_=t}setPadding(t){this.padding_=t}}function _g(t){return new cg({fill:yg(t,""),stroke:xg(t,""),text:vg(t),image:Sg(t)})}function yg(t,e){const i=t[e+"fill-color"];if(i)return new rg({color:i})}function xg(t,e){const i=t[e+"stroke-width"],n=t[e+"stroke-color"];if(i||n)return new hg({width:i,color:n,lineCap:t[e+"stroke-line-cap"],lineJoin:t[e+"stroke-line-join"],lineDash:t[e+"stroke-line-dash"],lineDashOffset:t[e+"stroke-line-dash-offset"],miterLimit:t[e+"stroke-miter-limit"]})}function vg(t){const e=t["text-value"];if(!e)return;return new mg({text:e,font:t["text-font"],maxAngle:t["text-max-angle"],offsetX:t["text-offset-x"],offsetY:t["text-offset-y"],overflow:t["text-overflow"],placement:t["text-placement"],scale:t["text-scale"],rotateWithView:t["text-rotate-with-view"],rotation:t["text-rotation"],textAlign:t["text-align"],justify:t["text-justify"],textBaseline:t["text-baseline"],padding:t["text-padding"],fill:yg(t,"text-"),backgroundFill:yg(t,"text-background-"),stroke:xg(t,"text-"),backgroundStroke:xg(t,"text-background-")})}function Sg(t){const e=t["icon-src"],i=t["icon-img"];if(e||i){return new lg({src:e,img:i,imgSize:t["icon-img-size"],anchor:t["icon-anchor"],anchorOrigin:t["icon-anchor-origin"],anchorXUnits:t["icon-anchor-x-units"],anchorYUnits:t["icon-anchor-y-units"],color:t["icon-color"],crossOrigin:t["icon-cross-origin"],offset:t["icon-offset"],displacement:t["icon-displacement"],opacity:t["icon-opacity"],scale:t["icon-scale"],rotation:t["icon-rotation"],rotateWithView:t["icon-rotate-with-view"],size:t["icon-size"],declutterMode:t["icon-declutter-mode"]})}const n=t["shape-points"];if(n){const e="shape-";return new ig({points:n,fill:yg(t,e),stroke:xg(t,e),radius:t["shape-radius"],radius1:t["shape-radius1"],radius2:t["shape-radius2"],angle:t["shape-angle"],displacement:t["shape-displacement"],rotation:t["shape-rotation"],rotateWithView:t["shape-rotate-with-view"],scale:t["shape-scale"],declutterMode:t["shape-declutter-mode"]})}const r=t["circle-radius"];if(r){const e="circle-";return new ng({radius:r,fill:yg(t,e),stroke:xg(t,e),displacement:t["circle-displacement"],scale:t["circle-scale"],rotation:t["circle-rotation"],rotateWithView:t["circle-rotate-with-view"],declutterMode:t["circle-declutter-mode"]})}}const wg={"image/png":!0,"image/jpeg":!0,"image/gif":!0,"image/webp":!0},Eg={"application/vnd.mapbox-vector-tile":!0,"application/geo+json":!0};function Tg(t,e){let i,n;for(let r=0;rt.maxTileCol||u.tileRowt.maxTileRow)return}Object.assign(u,_);const d=i.replace(/\{(\w+?)\}/g,(function(t,e){return u[e]}));return Tl(y,d)}}}function Rg(t){return El(t.url).then((function(e){return function(t,e){const i=e.tileMatrixSetLimits;let n;if("map"===e.dataType)n=Tg(e.links,t.mediaType);else{if("vector"!==e.dataType)throw new Error('Expected tileset data type to be "map" or "vector"');n=Cg(e.links,t.mediaType,t.supportedMediaTypes)}if(e.tileMatrixSet)return bg(t,e.tileMatrixSet,n,i);const r=e.links.find((t=>"http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme"===t.rel));if(!r)throw new Error("Expected http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme link or tileMatrixSet");const s=r.href;return El(Tl(t.url,s)).then((function(e){return bg(t,e,n,i)}))}(t,e)}))}const Pg="renderOrder";class Ig extends vs{constructor(t){t=t||{};const e=Object.assign({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,super(e),this.declutter_=void 0!==t.declutter&&t.declutter,this.renderBuffer_=void 0!==t.renderBuffer?t.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(t.style),this.updateWhileAnimating_=void 0!==t.updateWhileAnimating&&t.updateWhileAnimating,this.updateWhileInteracting_=void 0!==t.updateWhileInteracting&&t.updateWhileInteracting}getDeclutter(){return this.declutter_}getFeatures(t){return super.getFeatures(t)}getRenderBuffer(){return this.renderBuffer_}getRenderOrder(){return this.get(Pg)}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}getUpdateWhileAnimating(){return this.updateWhileAnimating_}getUpdateWhileInteracting(){return this.updateWhileInteracting_}renderDeclutter(t){t.declutterTree||(t.declutterTree=new xh(9)),this.getRenderer().renderDeclutter(t)}setRenderOrder(t){this.set(Pg,t)}setStyle(t){let e;if(void 0===t)e=gg;else if(null===t)e=null;else if("function"==typeof t)e=t;else if(t instanceof cg)e=t;else if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let e=0;e80*i){n=s=t[0],r=o=t[1];for(var f=i;fs&&(s=a),l>o&&(o=l);h=0!==(h=Math.max(s-n,o-r))?1/h:0}return kg(d,g,i,n,r,h),g}function Ng(t,e,i,n,r){var s,o;if(r===of(t,e,i,n)>0)for(s=e;s=e;s-=n)o=nf(s,t[s],t[s+1],o);return o&&Hg(o,o.next)&&(rf(o),o=o.next),o}function Dg(t,e){if(!t)return t;e||(e=t);var i,n=t;do{if(i=!1,n.steiner||!Hg(n,n.next)&&0!==qg(n.prev,n,n.next))n=n.next;else{if(rf(n),(n=e=n.prev)===n.next)break;i=!0}}while(i||n!==e);return e}function kg(t,e,i,n,r,s,o){if(t){!o&&s&&function(t,e,i,n){var r=t;do{null===r.z&&(r.z=Wg(r.x,r.y,e,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){var e,i,n,r,s,o,a,l,h=1;do{for(i=t,t=null,s=null,o=0;i;){for(o++,n=i,a=0,e=0;e0||l>0&&n;)0!==a&&(0===l||!n||i.z<=n.z)?(r=i,i=i.nextZ,a--):(r=n,n=n.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;i=n}s.nextZ=null,h*=2}while(o>1)}(r)}(t,n,r,s);for(var a,l,h=t;t.prev!==t.next;)if(a=t.prev,l=t.next,s?jg(t,n,r,s):Gg(t))e.push(a.i/i),e.push(t.i/i),e.push(l.i/i),rf(t),t=l.next,h=l.next;else if((t=l)===h){o?1===o?kg(t=Bg(Dg(t),e,i),e,i,n,r,s,2):2===o&&Ug(t,e,i,n,r,s):kg(Dg(t),e,i,n,r,s,1);break}}}function Gg(t){var e=t.prev,i=t,n=t.next;if(qg(e,i,n)>=0)return!1;for(var r=t.next.next;r!==t.prev;){if(Yg(e.x,e.y,i.x,i.y,n.x,n.y,r.x,r.y)&&qg(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function jg(t,e,i,n){var r=t.prev,s=t,o=t.next;if(qg(r,s,o)>=0)return!1;for(var a=r.xs.x?r.x>o.x?r.x:o.x:s.x>o.x?s.x:o.x,c=r.y>s.y?r.y>o.y?r.y:o.y:s.y>o.y?s.y:o.y,u=Wg(a,l,e,i,n),d=Wg(h,c,e,i,n),g=t.prevZ,f=t.nextZ;g&&g.z>=u&&f&&f.z<=d;){if(g!==t.prev&&g!==t.next&&Yg(r.x,r.y,s.x,s.y,o.x,o.y,g.x,g.y)&&qg(g.prev,g,g.next)>=0)return!1;if(g=g.prevZ,f!==t.prev&&f!==t.next&&Yg(r.x,r.y,s.x,s.y,o.x,o.y,f.x,f.y)&&qg(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;g&&g.z>=u;){if(g!==t.prev&&g!==t.next&&Yg(r.x,r.y,s.x,s.y,o.x,o.y,g.x,g.y)&&qg(g.prev,g,g.next)>=0)return!1;g=g.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Yg(r.x,r.y,s.x,s.y,o.x,o.y,f.x,f.y)&&qg(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Bg(t,e,i){var n=t;do{var r=n.prev,s=n.next.next;!Hg(r,s)&&$g(r,n,n.next,s)&&tf(r,s)&&tf(s,r)&&(e.push(r.i/i),e.push(n.i/i),e.push(s.i/i),rf(n),rf(n.next),n=t=s),n=n.next}while(n!==t);return Dg(n)}function Ug(t,e,i,n,r,s){var o=t;do{for(var a=o.next.next;a!==o.prev;){if(o.i!==a.i&&Kg(o,a)){var l=ef(o,a);return o=Dg(o,o.next),l=Dg(l,l.next),kg(o,e,i,n,r,s),void kg(l,e,i,n,r,s)}a=a.next}o=o.next}while(o!==t)}function zg(t,e){return t.x-e.x}function Xg(t,e){var i=function(t,e){var i,n=e,r=t.x,s=t.y,o=-1/0;do{if(s<=n.y&&s>=n.next.y&&n.next.y!==n.y){var a=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(a<=r&&a>o){if(o=a,a===r){if(s===n.y)return n;if(s===n.next.y)return n.next}i=n.x=n.x&&n.x>=c&&r!==n.x&&Yg(si.x||n.x===i.x&&Vg(i,n)))&&(i=n,d=l)),n=n.next}while(n!==h);return i}(t,e);if(!i)return e;var n=ef(i,t),r=Dg(i,i.next);return Dg(n,n.next),e===i?r:e}function Vg(t,e){return qg(t.prev,t,e.prev)<0&&qg(e.next,t,t.next)<0}function Wg(t,e,i,n,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-i)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Zg(t){var e=t,i=t;do{(e.x=0&&(t-o)*(n-a)-(i-o)*(e-a)>=0&&(i-o)*(s-a)-(r-o)*(n-a)>=0}function Kg(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&$g(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(tf(t,e)&&tf(e,t)&&function(t,e){var i=t,n=!1,r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{i.y>s!=i.next.y>s&&i.next.y!==i.y&&r<(i.next.x-i.x)*(s-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==t);return n}(t,e)&&(qg(t.prev,t,e.prev)||qg(t,e.prev,e))||Hg(t,e)&&qg(t.prev,t,t.next)>0&&qg(e.prev,e,e.next)>0)}function qg(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function Hg(t,e){return t.x===e.x&&t.y===e.y}function $g(t,e,i,n){var r=Qg(qg(t,e,i)),s=Qg(qg(t,e,n)),o=Qg(qg(i,n,t)),a=Qg(qg(i,n,e));return r!==s&&o!==a||(!(0!==r||!Jg(t,i,e))||(!(0!==s||!Jg(t,n,e))||(!(0!==o||!Jg(i,t,n))||!(0!==a||!Jg(i,e,n)))))}function Jg(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function Qg(t){return t>0?1:t<0?-1:0}function tf(t,e){return qg(t.prev,t,t.next)<0?qg(t,e,t.next)>=0&&qg(t,t.prev,e)>=0:qg(t,e,t.prev)<0||qg(t,t.next,e)<0}function ef(t,e){var i=new sf(t.i,t.x,t.y),n=new sf(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,n.next=i,i.prev=n,s.next=n,n.prev=s,n}function nf(t,e,i,n){var r=new sf(t,e,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function rf(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function sf(t,e,i){this.i=t,this.x=e,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function of(t,e,i,n){for(var r=0,s=e,o=i-n;s0&&(n+=t[r-1].length,i.holes.push(n))}return i};const af=[],lf={vertexPosition:0,indexPosition:0};function hf(t,e,i,n,r){t[e+0]=i,t[e+1]=n,t[e+2]=r}function cf(t,e){const i=256,n=255;return(e=e||[])[0]=Math.floor(t/i/i/i)/n,e[1]=Math.floor(t/i/i)%i/n,e[2]=Math.floor(t/i)%i/n,e[3]=t%i/n,e}function uf(t){let e=0;const i=256,n=255;return e+=Math.round(t[0]*i*i*i*n),e+=Math.round(t[1]*i*i*n),e+=Math.round(t[2]*i*n),e+=Math.round(t[3]*n),e}function df(){const t='const e="GENERATE_POLYGON_BUFFERS",t="GENERATE_POINT_BUFFERS",n="GENERATE_LINE_STRING_BUFFERS",r="undefined"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():"";r.includes("firefox");r.includes("safari")&&!r.includes("chrom")&&(r.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(r)),r.includes("webkit")&&r.includes("edge"),r.includes("macintosh"),"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&(self,WorkerGlobalScope),function(){let e=!1;try{const t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("_",null,t),window.removeEventListener("_",null,t)}catch(e){}}();const o={1:"The view center is not defined",2:"The view resolution is not defined",3:"The view rotation is not defined",4:"`image` and `src` cannot be provided at the same time",5:"`imgSize` must be set when `image` is provided",7:"`format` must be set when `url` is set",8:"Unknown `serverType` configured",9:"`url` must be configured or set using `#setUrl()`",10:"The default `geometryFunction` can only handle `Point` geometries",11:"`options.featureTypes` must be an Array",12:"`options.geometryName` must also be provided when `options.bbox` is set",13:"Invalid corner",14:"Invalid color",15:"Tried to get a value for a key that does not exist in the cache",16:"Tried to set a value for a key that is used already",17:"`resolutions` must be sorted in descending order",18:"Either `origin` or `origins` must be configured, never both",19:"Number of `tileSizes` and `resolutions` must be equal",20:"Number of `origins` and `resolutions` must be equal",22:"Either `tileSize` or `tileSizes` must be configured, never both",24:"Invalid extent or geometry provided as `geometry`",25:"Cannot fit empty extent provided as `geometry`",26:"Features must have an id set",27:"Features must have an id set",28:\'`renderMode` must be `"hybrid"` or `"vector"`\',30:"The passed `feature` was already added to the source",31:"Tried to enqueue an `element` that was already added to the queue",32:"Transformation matrix cannot be inverted",33:"Invalid units",34:"Invalid geometry layout",36:"Unknown SRS type",37:"Unknown geometry type found",38:"`styleMapValue` has an unknown type",39:"Unknown geometry type",40:"Expected `feature` to have a geometry",41:"Expected an `ol/style/Style` or an array of `ol/style/Style.js`",42:"Question unknown, the answer is 42",43:"Expected `layers` to be an array or a `Collection`",47:"Expected `controls` to be an array or an `ol/Collection`",48:"Expected `interactions` to be an array or an `ol/Collection`",49:"Expected `overlays` to be an array or an `ol/Collection`",50:"`options.featureTypes` should be an Array",51:"Either `url` or `tileJSON` options must be provided",52:"Unknown `serverType` configured",53:"Unknown `tierSizeCalculation` configured",55:"The {-y} placeholder requires a tile grid with extent",56:"mapBrowserEvent must originate from a pointer event",57:"At least 2 conditions are required",59:"Invalid command found in the PBF",60:"Missing or invalid `size`",61:"Cannot determine IIIF Image API version from provided image information JSON",62:"A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUFFER`",64:"Layer opacity must be a number",66:"`forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has not been enabled. This is done by providing adequate shaders using the `hitVertexShader` and `hitFragmentShader` properties of `WebGLPointsLayerRenderer`",67:"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both",68:"A VectorTile source can only be rendered if it has a projection compatible with the view projection"};class i extends Error{constructor(e){const t=o[e];super(t),this.code=e,this.name="AssertionError",this.message=t}}function s(e,t){const n=t[0],r=t[1];return t[0]=e[0]*n+e[2]*r+e[4],t[1]=e[1]*n+e[3]*r+e[5],t}function a(e,t){const n=(r=t)[0]*r[3]-r[1]*r[2];var r;!function(e,t){if(!e)throw new i(t)}(0!==n,32);const o=t[0],s=t[1],a=t[2],u=t[3],x=t[4],f=t[5];return e[0]=u/n,e[1]=-s/n,e[2]=-a/n,e[3]=o/n,e[4]=(a*f-u*x)/n,e[5]=-(o*f-s*x)/n,e}new Array(6);var u={exports:{}};function x(e,t,n){n=n||2;var r,o,i,s,a,u,x,y=t&&t.length,d=y?t[0]*n:e.length,h=f(e,0,d,n,!0),v=[];if(!h||h.next===h.prev)return v;if(y&&(h=function(e,t,n,r){var o,i,s,a=[];for(o=0,i=t.length;o80*n){r=i=e[0],o=s=e[1];for(var b=n;bi&&(i=a),u>s&&(s=u);x=0!==(x=Math.max(i-r,s-o))?1/x:0}return c(h,v,n,r,o,x),v}function f(e,t,n,r,o){var i,s;if(o===B(e,t,n,r)>0)for(i=t;i=t;i-=r)s=U(i,e[i],e[i+1],s);return s&&M(s,s.next)&&(z(s),s=s.next),s}function l(e,t){if(!e)return e;t||(t=e);var n,r=e;do{if(n=!1,r.steiner||!M(r,r.next)&&0!==Z(r.prev,r,r.next))r=r.next;else{if(z(r),(r=t=r.prev)===r.next)break;n=!0}}while(n||r!==t);return t}function c(e,t,n,r,o,i,s){if(e){!s&&i&&function(e,t,n,r){var o=e;do{null===o.z&&(o.z=m(o.x,o.y,t,n,r)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next}while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,function(e){var t,n,r,o,i,s,a,u,x=1;do{for(n=e,e=null,i=null,s=0;n;){for(s++,r=n,a=0,t=0;t0||u>0&&r;)0!==a&&(0===u||!r||n.z<=r.z)?(o=n,n=n.nextZ,a--):(o=r,r=r.nextZ,u--),i?i.nextZ=o:e=o,o.prevZ=i,i=o;n=r}i.nextZ=null,x*=2}while(s>1)}(o)}(e,r,o,i);for(var a,u,x=e;e.prev!==e.next;)if(a=e.prev,u=e.next,i?d(e,r,o,i):y(e))t.push(a.i/n),t.push(e.i/n),t.push(u.i/n),z(e),e=u.next,x=u.next;else if((e=u)===x){s?1===s?c(e=h(l(e),t,n),t,n,r,o,i,2):2===s&&v(e,t,n,r,o,i):c(l(e),t,n,r,o,i,1);break}}}function y(e){var t=e.prev,n=e,r=e.next;if(Z(t,n,r)>=0)return!1;for(var o=e.next.next;o!==e.prev;){if(A(t.x,t.y,n.x,n.y,r.x,r.y,o.x,o.y)&&Z(o.prev,o,o.next)>=0)return!1;o=o.next}return!0}function d(e,t,n,r){var o=e.prev,i=e,s=e.next;if(Z(o,i,s)>=0)return!1;for(var a=o.xi.x?o.x>s.x?o.x:s.x:i.x>s.x?i.x:s.x,f=o.y>i.y?o.y>s.y?o.y:s.y:i.y>s.y?i.y:s.y,l=m(a,u,t,n,r),c=m(x,f,t,n,r),y=e.prevZ,d=e.nextZ;y&&y.z>=l&&d&&d.z<=c;){if(y!==e.prev&&y!==e.next&&A(o.x,o.y,i.x,i.y,s.x,s.y,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;if(y=y.prevZ,d!==e.prev&&d!==e.next&&A(o.x,o.y,i.x,i.y,s.x,s.y,d.x,d.y)&&Z(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;y&&y.z>=l;){if(y!==e.prev&&y!==e.next&&A(o.x,o.y,i.x,i.y,s.x,s.y,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;d&&d.z<=c;){if(d!==e.prev&&d!==e.next&&A(o.x,o.y,i.x,i.y,s.x,s.y,d.x,d.y)&&Z(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function h(e,t,n){var r=e;do{var o=r.prev,i=r.next.next;!M(o,i)&&F(o,r,r.next,i)&&k(o,i)&&k(i,o)&&(t.push(o.i/n),t.push(r.i/n),t.push(i.i/n),z(r),z(r.next),r=e=i),r=r.next}while(r!==e);return l(r)}function v(e,t,n,r,o,i){var s=e;do{for(var a=s.next.next;a!==s.prev;){if(s.i!==a.i&&E(s,a)){var u=S(s,a);return s=l(s,s.next),u=l(u,u.next),c(s,t,n,r,o,i),void c(u,t,n,r,o,i)}a=a.next}s=s.next}while(s!==e)}function p(e,t){return e.x-t.x}function g(e,t){var n=function(e,t){var n,r=t,o=e.x,i=e.y,s=-1/0;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var a=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(a<=o&&a>s){if(s=a,a===o){if(i===r.y)return r;if(i===r.next.y)return r.next}n=r.x=r.x&&r.x>=f&&o!==r.x&&A(in.x||r.x===n.x&&b(n,r)))&&(n=r,c=u)),r=r.next}while(r!==x);return n}(e,t);if(!n)return t;var r=S(n,e),o=l(n,n.next);return l(r,r.next),t===n?o:t}function b(e,t){return Z(e.prev,e,t.prev)<0&&Z(t.next,e,e.next)<0}function m(e,t,n,r,o){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*o)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*o)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function w(e){var t=e,n=e;do{(t.x=0&&(e-s)*(r-a)-(n-s)*(t-a)>=0&&(n-s)*(i-a)-(o-s)*(r-a)>=0}function E(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&F(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&(k(e,t)&&k(t,e)&&function(e,t){var n=e,r=!1,o=(e.x+t.x)/2,i=(e.y+t.y)/2;do{n.y>i!=n.next.y>i&&n.next.y!==n.y&&o<(n.next.x-n.x)*(i-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==e);return r}(e,t)&&(Z(e.prev,e,t.prev)||Z(e,t.prev,t))||M(e,t)&&Z(e.prev,e,e.next)>0&&Z(t.prev,t,t.next)>0)}function Z(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function M(e,t){return e.x===t.x&&e.y===t.y}function F(e,t,n,r){var o=I(Z(e,t,n)),i=I(Z(e,t,r)),s=I(Z(n,r,e)),a=I(Z(n,r,t));return o!==i&&s!==a||(!(0!==o||!T(e,n,t))||(!(0!==i||!T(e,r,t))||(!(0!==s||!T(n,e,r))||!(0!==a||!T(n,t,r)))))}function T(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function I(e){return e>0?1:e<0?-1:0}function k(e,t){return Z(e.prev,e,e.next)<0?Z(e,t,e.next)>=0&&Z(e,e.prev,t)>=0:Z(e,t,e.prev)<0||Z(e,e.next,t)<0}function S(e,t){var n=new R(e.i,e.x,e.y),r=new R(t.i,t.x,t.y),o=e.next,i=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,r.next=n,n.prev=r,i.next=r,r.prev=i,r}function U(e,t,n,r){var o=new R(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o}function z(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function R(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function B(e,t,n,r){for(var o=0,i=t,s=n-r;i0&&(r+=e[o-1].length,n.holes.push(r))}return n};const P=[],C={vertexPosition:0,indexPosition:0};function N(e,t,n,r,o){e[t+0]=n,e[t+1]=r,e[t+2]=o}function _(e,t,n,r,o,i){const s=3+o,a=e[t+0],u=e[t+1],x=P;x.length=o;for(let n=0;n0?u:2*Math.PI-u}const b=null!==o;let m=0,w=0;if(null!==r){m=g(h,v,s(f,[...[e[r],e[r+1]]]))}if(b){w=g(v,h,s(f,[...[e[o],e[o+1]]]))}i.push(y[0],y[1],d[0],d[1],p(0,m,w)),i.push(...u),i.push(y[0],y[1],d[0],d[1],p(1,m,w)),i.push(...u),i.push(y[0],y[1],d[0],d[1],p(2,m,w)),i.push(...u),i.push(y[0],y[1],d[0],d[1],p(3,m,w)),i.push(...u),a.push(c,c+1,c+2,c+1,c+3,c+2)}function G(e,t,n,r,o){const i=2+o;let s=t;const a=e.slice(s,s+o);s+=o;const x=e[s++];let f=0;const l=new Array(x-1);for(let t=0;t{const o=r.data;switch(o.type){case t:{const e=3,t=2,n=o.customAttributesCount,r=t+n,i=new Float32Array(o.renderInstructions),s=i.length/r,a=4*s*(n+e),u=new Uint32Array(6*s),x=new Float32Array(a);let f;for(let e=0;e0?s+(n-1)*r:null,nthis.addGeometry_(t,e)));break;case"MultiPolygon":t.getPolygons().map((t=>this.addGeometry_(t,e)));break;case"MultiLineString":t.getLineStrings().map((t=>this.addGeometry_(t,e)));break;case"MultiPoint":t.getPoints().map((t=>this.addGeometry_(t,e)));break;case"Polygon":const s=t;r=this.addFeatureEntryInPolygonBatch_(e),i=s.getFlatCoordinates(),n=i.length/2;const o=s.getLinearRingCount(),a=s.getEnds().map(((t,e,i)=>e>0?(t-i[e-1])/2:t/2));this.polygonBatch.verticesCount+=n,this.polygonBatch.ringsCount+=o,this.polygonBatch.geometriesCount++,r.flatCoordss.push(i),r.ringsVerticesCounts.push(a),r.verticesCount+=n,r.ringsCount+=o,s.getLinearRings().map((t=>this.addGeometry_(t,e)));break;case"Point":const l=t;r=this.addFeatureEntryInPointBatch_(e),i=l.getFlatCoordinates(),this.pointBatch.geometriesCount++,r.flatCoordss.push(i);break;case"LineString":case"LinearRing":const h=t;r=this.addFeatureEntryInLineStringBatch_(e),i=h.getFlatCoordinates(),n=i.length/2,this.lineStringBatch.verticesCount+=n,this.lineStringBatch.geometriesCount++,r.flatCoordss.push(i),r.verticesCount+=n}}changeFeature(t){this.clearFeatureEntryInPointBatch_(t),this.clearFeatureEntryInPolygonBatch_(t),this.clearFeatureEntryInLineStringBatch_(t);const e=t.getGeometry();e&&this.addGeometry_(e,t)}removeFeature(t){this.clearFeatureEntryInPointBatch_(t),this.clearFeatureEntryInPolygonBatch_(t),this.clearFeatureEntryInLineStringBatch_(t)}clear(){this.polygonBatch.entries={},this.polygonBatch.geometriesCount=0,this.polygonBatch.verticesCount=0,this.polygonBatch.ringsCount=0,this.lineStringBatch.entries={},this.lineStringBatch.geometriesCount=0,this.lineStringBatch.verticesCount=0,this.pointBatch.entries={},this.pointBatch.geometriesCount=0}}const xf={POSITION:"a_position",INDEX:"a_index"};class vf extends pf{constructor(t,e,i,n,r){super(t,e,i,n,r),this.attributes=[{name:xf.POSITION,size:2,type:Qu.FLOAT},{name:xf.INDEX,size:1,type:Qu.FLOAT}].concat(r.map((function(t){return{name:"a_"+t.name,size:1,type:Qu.FLOAT}})))}generateRenderInstructions(t){const e=(2+this.customAttributes.length)*t.geometriesCount;let i;t.renderInstructions&&t.renderInstructions.length===e||(t.renderInstructions=new Float32Array(e));const n=[];let r,s=0;for(const e in t.entries){i=t.entries[e];for(let e=0,o=i.flatCoordss.length;e 0.93) return normalPx - tangentPx;\n float halfAngle = joinAngle / 2.0;\n vec2 angleBisectorNormal = vec2(\n sin(halfAngle) * normalPx.x + cos(halfAngle) * normalPx.y,\n -cos(halfAngle) * normalPx.x + sin(halfAngle) * normalPx.y\n );\n float length = 1.0 / sin(halfAngle);\n return angleBisectorNormal * length;\n }\n\n void main(void) {\n float anglePrecision = 1500.0;\n float paramShift = 10000.0;\n v_angleStart = fract(a_parameters / paramShift) * paramShift / anglePrecision;\n v_angleEnd = fract(floor(a_parameters / paramShift + 0.5) / paramShift) * paramShift / anglePrecision;\n float vertexNumber = floor(a_parameters / paramShift / paramShift + 0.0001);\n vec2 tangentPx = worldToPx(a_segmentEnd) - worldToPx(a_segmentStart);\n tangentPx = normalize(tangentPx);\n vec2 normalPx = vec2(-tangentPx.y, tangentPx.x);\n float normalDir = vertexNumber < 0.5 || (vertexNumber > 1.5 && vertexNumber < 2.5) ? 1.0 : -1.0;\n float tangentDir = vertexNumber < 1.5 ? 1.0 : -1.0;\n float angle = vertexNumber < 1.5 ? v_angleStart : v_angleEnd;\n vec2 offsetPx = getOffsetDirection(normalPx * normalDir, tangentDir * tangentPx, angle) * a_width * 0.5;\n vec2 position = vertexNumber < 1.5 ? a_segmentStart : a_segmentEnd;\n gl_Position = u_projectionMatrix * vec4(position, 0.0, 1.0) + pxToScreen(offsetPx);\n v_segmentStart = worldToPx(a_segmentStart);\n v_segmentEnd = worldToPx(a_segmentEnd);\n v_color = ${Tf}\n v_opacity = a_opacity;\n v_width = a_width;\n }`,Pf="\n precision mediump float;\n uniform float u_pixelRatio;\n varying vec2 v_segmentStart;\n varying vec2 v_segmentEnd;\n varying float v_angleStart;\n varying float v_angleEnd;\n varying vec3 v_color;\n varying float v_opacity;\n varying float v_width;\n\n float segmentDistanceField(vec2 point, vec2 start, vec2 end, float radius) {\n vec2 startToPoint = point - start;\n vec2 startToEnd = end - start;\n float ratio = clamp(dot(startToPoint, startToEnd) / dot(startToEnd, startToEnd), 0.0, 1.0);\n float dist = length(startToPoint - ratio * startToEnd);\n return 1.0 - smoothstep(radius - 1.0, radius, dist);\n }\n\n void main(void) {\n vec2 v_currentPoint = gl_FragCoord.xy / u_pixelRatio;\n gl_FragColor = vec4(v_color, 1.0) * v_opacity;\n gl_FragColor *= segmentDistanceField(v_currentPoint, v_segmentStart, v_segmentEnd, v_width);\n }",If=`\n precision mediump float;\n uniform mat4 u_projectionMatrix;\n uniform mat4 u_offsetScaleMatrix;\n attribute vec2 a_position;\n attribute float a_index;\n attribute float a_color;\n attribute float a_opacity;\n varying vec2 v_texCoord;\n varying vec3 v_color;\n varying float v_opacity;\n\n void main(void) {\n mat4 offsetMatrix = u_offsetScaleMatrix;\n float size = 6.0;\n float offsetX = a_index == 0.0 || a_index == 3.0 ? -size / 2.0 : size / 2.0;\n float offsetY = a_index == 0.0 || a_index == 1.0 ? -size / 2.0 : size / 2.0;\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;\n v_texCoord = vec2(u, v);\n v_color = ${Tf}\n v_opacity = a_opacity;\n }`,Lf="\n precision mediump float;\n varying vec3 v_color;\n varying float v_opacity;\n\n void main(void) {\n gl_FragColor = vec4(v_color, 1.0) * v_opacity;\n }";function Mf(t){return Object.keys(t).map((e=>({name:e,callback:t[e]})))}const Ff=0,Af=1,Of=2,Nf=3,Df=4,kf=5,Gf=6,jf=7,Bf=8,Uf=9,zf=10,Xf=11,Vf=12,Wf=[Bf],Zf=[Vf],Yf=[Af],Kf=[Nf];class qf extends Cl{constructor(t,e,i,n){super(),this.tolerance=t,this.maxExtent=e,this.pixelRatio=n,this.maxLineWidth=0,this.resolution=i,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_=null,this.bufferedMaxExtent_=null,this.instructions=[],this.coordinates=[],this.tmpCoordinate_=[],this.hitDetectionInstructions=[],this.state={}}applyPixelRatio(t){const e=this.pixelRatio;return 1==e?t:t.map((function(t){return t*e}))}appendFlatPointCoordinates(t,e){const i=this.getBufferedMaxExtent(),n=this.tmpCoordinate_,r=this.coordinates;let s=r.length;for(let o=0,a=t.length;oo&&(this.instructions.push([Df,o,l,t,i,Gn]),this.hitDetectionInstructions.push([Df,o,l,t,n||i,Gn]));break;case"Point":a=t.getFlatCoordinates(),this.coordinates.push(a[0],a[1]),l=this.coordinates.length,this.instructions.push([Df,o,l,t,i]),this.hitDetectionInstructions.push([Df,o,l,t,n||i])}this.endGeometry(e)}beginGeometry(t,e){this.beginGeometryInstruction1_=[Ff,e,0,t],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Ff,e,0,t],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}}reverseHitDetectionInstructions(){const t=this.hitDetectionInstructions;let e;t.reverse();const i=t.length;let n,r,s=-1;for(e=0;ethis.maxLineWidth&&(this.maxLineWidth=i.lineWidth,this.bufferedMaxExtent_=null)}else i.strokeStyle=void 0,i.lineCap=void 0,i.lineDash=null,i.lineDashOffset=void 0,i.lineJoin=void 0,i.lineWidth=void 0,i.miterLimit=void 0}createFill(t){const e=t.fillStyle,i=[zf,e];return"string"!=typeof e&&i.push(!0),i}applyStroke(t){this.instructions.push(this.createStroke(t))}createStroke(t){return[Xf,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,this.applyPixelRatio(t.lineDash),t.lineDashOffset*this.pixelRatio]}updateFillStyle(t,e){const i=t.fillStyle;"string"==typeof i&&t.currentFillStyle==i||(void 0!==i&&this.instructions.push(e.call(this,t)),t.currentFillStyle=i)}updateStrokeStyle(t,e){const i=t.strokeStyle,n=t.lineCap,r=t.lineDash,s=t.lineDashOffset,o=t.lineJoin,a=t.lineWidth,l=t.miterLimit;(t.currentStrokeStyle!=i||t.currentLineCap!=n||r!=t.currentLineDash&&!u(t.currentLineDash,r)||t.currentLineDashOffset!=s||t.currentLineJoin!=o||t.currentLineWidth!=a||t.currentMiterLimit!=l)&&(void 0!==i&&e.call(this,t),t.currentStrokeStyle=i,t.currentLineCap=n,t.currentLineDash=r,t.currentLineDashOffset=s,t.currentLineJoin=o,t.currentLineWidth=a,t.currentMiterLimit=l)}endGeometry(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;const e=[jf,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=Vt(this.maxExtent),this.maxLineWidth>0)){const t=this.resolution*(this.maxLineWidth+1)/2;Xt(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_}}class Hf extends qf{constructor(t,e,i,n){super(t,e,i,n),this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.anchorX_=void 0,this.anchorY_=void 0,this.height_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.scale_=void 0,this.width_=void 0,this.declutterMode_=void 0,this.declutterImageWithText_=void 0}drawPoint(t,e){if(!this.image_)return;this.beginGeometry(t,e);const i=t.getFlatCoordinates(),n=t.getStride(),r=this.coordinates.length,s=this.appendFlatPointCoordinates(i,n);this.instructions.push([Gf,r,s,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([Gf,r,s,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}drawMultiPoint(t,e){if(!this.image_)return;this.beginGeometry(t,e);const i=t.getFlatCoordinates(),n=t.getStride(),r=this.coordinates.length,s=this.appendFlatPointCoordinates(i,n);this.instructions.push([Gf,r,s,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([Gf,r,s,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}finish(){return this.reverseHitDetectionInstructions(),this.anchorX_=void 0,this.anchorY_=void 0,this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.height_=void 0,this.scale_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.width_=void 0,super.finish()}setImageStyle(t,e){const i=t.getAnchor(),n=t.getSize(),r=t.getOrigin();this.imagePixelRatio_=t.getPixelRatio(this.pixelRatio),this.anchorX_=i[0],this.anchorY_=i[1],this.hitDetectionImage_=t.getHitDetectionImage(),this.image_=t.getImage(this.pixelRatio),this.height_=n[1],this.opacity_=t.getOpacity(),this.originX_=r[0],this.originY_=r[1],this.rotateWithView_=t.getRotateWithView(),this.rotation_=t.getRotation(),this.scale_=t.getScaleArray(),this.width_=n[0],this.declutterMode_=t.getDeclutterMode(),this.declutterImageWithText_=e}}class $f extends qf{constructor(t,e,i,n){super(t,e,i,n)}drawFlatCoordinates_(t,e,i,n){const r=this.coordinates.length,s=this.appendFlatLineCoordinates(t,e,i,n,!1,!1),o=[Uf,r,s];return this.instructions.push(o),this.hitDetectionInstructions.push(o),i}drawLineString(t,e){const i=this.state,n=i.strokeStyle,r=i.lineWidth;if(void 0===n||void 0===r)return;this.updateStrokeStyle(i,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Xf,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,ks,0],Yf);const s=t.getFlatCoordinates(),o=t.getStride();this.drawFlatCoordinates_(s,0,s.length,o),this.hitDetectionInstructions.push(Zf),this.endGeometry(e)}drawMultiLineString(t,e){const i=this.state,n=i.strokeStyle,r=i.lineWidth;if(void 0===n||void 0===r)return;this.updateStrokeStyle(i,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Xf,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash,i.lineDashOffset],Yf);const s=t.getEnds(),o=t.getFlatCoordinates(),a=t.getStride();let l=0;for(let t=0,e=s.length;tt&&(y>_&&(_=y,p=x,m=o),y=0,x=o-r)),a=l,u=g,d=f),h=i,c=n}return y+=l,y>_?[x,o]:[p,m]}const tp={left:0,end:0,center:.5,right:1,start:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1};class ep extends qf{constructor(t,e,i,n){super(t,e,i,n),this.labels_=null,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=void 0,this.textRotation_=0,this.textFillState_=null,this.fillStates={},this.textStrokeState_=null,this.strokeStates={},this.textState_={},this.textStates={},this.textKey_="",this.fillKey_="",this.strokeKey_="",this.declutterImageWithText_=void 0}finish(){const t=super.finish();return t.textStates=this.textStates,t.fillStates=this.fillStates,t.strokeStates=this.strokeStates,t}drawText(t,e){const i=this.textFillState_,n=this.textStrokeState_,r=this.textState_;if(""===this.text_||!r||!i&&!n)return;const s=this.coordinates;let o=s.length;const a=t.getType();let l=null,h=t.getStride();if("line"!==r.placement||"LineString"!=a&&"MultiLineString"!=a&&"Polygon"!=a&&"MultiPolygon"!=a){let i=r.overflow?null:[];switch(a){case"Point":case"MultiPoint":l=t.getFlatCoordinates();break;case"LineString":l=t.getFlatMidpoint();break;case"Circle":l=t.getCenter();break;case"MultiLineString":l=t.getFlatMidpoints(),h=2;break;case"Polygon":l=t.getFlatInteriorPoint(),r.overflow||i.push(l[2]/this.resolution),h=3;break;case"MultiPolygon":const e=t.getFlatInteriorPoints();l=[];for(let t=0,n=e.length;t{const n=s[2*(t+i)]===l[i*h]&&s[2*(t+i)+1]===l[i*h+1];return n||--t,n}))}this.saveTextStates_(),(r.backgroundFill||r.backgroundStroke)&&(this.setFillStrokeStyle(r.backgroundFill,r.backgroundStroke),r.backgroundFill&&(this.updateFillStyle(this.state,this.createFill),this.hitDetectionInstructions.push(this.createFill(this.state))),r.backgroundStroke&&(this.updateStrokeStyle(this.state,this.applyStroke),this.hitDetectionInstructions.push(this.createStroke(this.state)))),this.beginGeometry(t,e);let c=r.padding;if(c!=Xs&&(r.scale[0]<0||r.scale[1]<0)){let t=r.padding[0],e=r.padding[1],i=r.padding[2],n=r.padding[3];r.scale[0]<0&&(e=-e,n=-n),r.scale[1]<0&&(t=-t,i=-i),c=[t,e,i,n]}const u=this.pixelRatio;this.instructions.push([Gf,o,n,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,void 0,this.declutterImageWithText_,c==Xs?Xs:c.map((function(t){return t*u})),!!r.backgroundFill,!!r.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,i]);const d=1/u;this.hitDetectionInstructions.push([Gf,o,n,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[d,d],NaN,void 0,this.declutterImageWithText_,c,!!r.backgroundFill,!!r.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,i]),this.endGeometry(e)}else{if(!we(this.getBufferedMaxExtent(),t.getExtent()))return;let i;if(l=t.getFlatCoordinates(),"LineString"==a)i=[l.length];else if("MultiLineString"==a)i=t.getEnds();else if("Polygon"==a)i=t.getEnds().slice(0,1);else if("MultiPolygon"==a){const e=t.getEndss();i=[];for(let t=0,n=e.length;tt[2]}else R=v>C;const P=Math.PI,I=[],L=w+n===e;let M;if(m=0,_=E,d=t[e=w],g=t[e+1],L){y(),M=Math.atan2(g-p,d-f),R&&(M+=M>0?-P:P);const t=(C+v)/2,e=(b+S)/2;return I[0]=[t,e,(T-s)/2,M,r],I}for(let t=0,u=(r=r.replace(/\n/g," ")).length;t0?-P:P),void 0!==M){let t=v-M;if(t+=t>P?-2*P:t<-P?2*P:0,Math.abs(t)>o)return null}M=v;const S=t;let w=0;for(;t0&&t.push("\n",""),t.push(e,""),t}class pp{constructor(t,e,i,n){this.overlaps=i,this.pixelRatio=e,this.resolution=t,this.alignFill_,this.instructions=n.instructions,this.coordinates=n.coordinates,this.coordinateCache_={},this.renderedTransform_=[1,0,0,1,0,0],this.hitDetectionInstructions=n.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=n.fillStates||{},this.strokeStates=n.strokeStates||{},this.textStates=n.textStates||{},this.widths_={},this.labels_={}}createLabel(t,e,i,n){const r=t+e+i+n;if(this.labels_[r])return this.labels_[r];const s=n?this.strokeStates[n]:null,o=i?this.fillStates[i]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],c=Array.isArray(t),u=a.justify?tp[a.justify]:gp(Array.isArray(t)?t[0]:t,a.textAlign||Us),d=n&&s.lineWidth?s.lineWidth:0,g=c?t:t.split("\n").reduce(fp,[]),{width:f,height:p,widths:m,heights:_,lineWidths:y}=Qs(a,g),x=f+d,v=[],S=(x+2)*h[0],w=(p+d)*h[1],E={width:S<0?Math.floor(S):Math.ceil(S),height:w<0?Math.floor(w):Math.ceil(w),contextInstructions:v};1==h[0]&&1==h[1]||v.push("scale",h),n&&(v.push("strokeStyle",s.strokeStyle),v.push("lineWidth",d),v.push("lineCap",s.lineCap),v.push("lineJoin",s.lineJoin),v.push("miterLimit",s.miterLimit),v.push("setLineDash",[s.lineDash]),v.push("lineDashOffset",s.lineDashOffset)),i&&v.push("fillStyle",o.fillStyle),v.push("textBaseline","middle"),v.push("textAlign","center");const T=.5-u;let C=u*x+T*d;const b=[],R=[];let P,I=0,L=0,M=0,F=0;for(let t=0,e=g.length;tt?t-l:r,x=s+h>e?e-h:s,v=g[3]+y*u[0]+g[1],S=g[0]+x*u[1]+g[2],w=m-g[3],E=_-g[0];let T;return(f||0!==c)&&(ap[0]=w,cp[0]=w,ap[1]=E,lp[1]=E,lp[0]=w+v,hp[0]=lp[0],hp[1]=E+S,cp[1]=hp[1]),0!==c?(T=Mt([1,0,0,1,0,0],i,n,1,1,c,-i,-n),bt(T,ap),bt(T,lp),bt(T,hp),bt(T,cp),$t(Math.min(ap[0],lp[0],hp[0],cp[0]),Math.min(ap[1],lp[1],hp[1],cp[1]),Math.max(ap[0],lp[0],hp[0],cp[0]),Math.max(ap[1],lp[1],hp[1],cp[1]),op)):$t(Math.min(w,w+v),Math.min(E,E+S),Math.max(w,w+v),Math.max(E,E+S),op),d&&(m=Math.round(m),_=Math.round(_)),{drawImageX:m,drawImageY:_,drawImageW:y,drawImageH:x,originX:l,originY:h,declutterBox:{minX:op[0],minY:op[1],maxX:op[2],maxY:op[3],value:p},canvasTransform:T,scale:u}}replayImageOrLabel_(t,e,i,n,r,s,o){const a=!(!s&&!o),l=n.declutterBox,h=t.canvas,c=o?o[2]*n.scale[0]/2:0;return l.minX-c<=h.width/e&&l.maxX+c>=0&&l.minY-c<=h.height/e&&l.maxY+c>=0&&(a&&this.replayTextBackground_(t,ap,lp,hp,cp,s,o),to(t,n.canvasTransform,r,i,n.originX,n.originY,n.drawImageW,n.drawImageH,n.drawImageX,n.drawImageY,n.scale)),!0}fill_(t){if(this.alignFill_){const e=bt(this.renderedTransform_,[0,0]),i=512*this.pixelRatio;t.save(),t.translate(e[0]%i,e[1]%i),t.rotate(this.viewRotation_)}t.fill(),this.alignFill_&&t.restore()}setStrokeStyle_(t,e){t.strokeStyle=e[1],t.lineWidth=e[2],t.lineCap=e[3],t.lineJoin=e[4],t.miterLimit=e[5],t.lineDashOffset=e[7],t.setLineDash(e[6])}drawLabelWithPointPlacement_(t,e,i,n){const r=this.textStates[e],s=this.createLabel(t,e,n,i),o=this.strokeStates[i],a=this.pixelRatio,l=gp(Array.isArray(t)?t[0]:t,r.textAlign||Us),h=tp[r.textBaseline||zs],c=o&&o.lineWidth?o.lineWidth:0;return{label:s,anchorX:l*(s.width/a-2*r.scale[0])+2*(.5-l)*c,anchorY:h*s.height/a+2*(.5-h)*c}}execute_(t,e,i,n,r,s,o,a){let l;this.pixelCoordinates_&&u(i,this.renderedTransform_)?l=this.pixelCoordinates_:(this.pixelCoordinates_||(this.pixelCoordinates_=[]),l=un(this.coordinates,0,this.coordinates.length,2,i,this.pixelCoordinates_),Ct(this.renderedTransform_,i));let h=0;const c=n.length;let d,g,f,p,m,_,y,x,v,S,w,E,T=0,C=0,b=0,R=null,P=null;const I=this.coordinateCache_,L=this.viewRotation_,M=Math.round(1e12*Math.atan2(-i[1],i[0]))/1e12,F={context:t,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:L},A=this.instructions!=n||this.overlaps?0:200;let O,N,D,k;for(;hA&&(this.fill_(t),C=0),b>A&&(t.stroke(),b=0),C||b||(t.beginPath(),p=NaN,m=NaN),++h;break;case Of:T=i[1];const n=l[T],c=l[T+1],u=l[T+2]-n,G=l[T+3]-c,j=Math.sqrt(u*u+G*G);t.moveTo(n+j,c),t.arc(n,c,j,0,2*Math.PI,!0),++h;break;case Nf:t.closePath(),++h;break;case Df:T=i[1],d=i[2];const B=i[3],U=i[4],z=6==i.length?i[5]:void 0;F.geometry=B,F.feature=O,h in I||(I[h]=[]);const X=I[h];z?z(l,T,d,2,X):(X[0]=l[T],X[1]=l[T+1],X.length=2),U(X,F),++h;break;case Gf:T=i[1],d=i[2],x=i[3],g=i[4],f=i[5];let V=i[6];const W=i[7],Z=i[8],Y=i[9],K=i[10];let q=i[11];const H=i[12];let $=i[13];const J=i[14],Q=i[15];if(!x&&i.length>=20){v=i[19],S=i[20],w=i[21],E=i[22];const t=this.drawLabelWithPointPlacement_(v,S,w,E);x=t.label,i[3]=x;const e=i[23];g=(t.anchorX-e)*this.pixelRatio,i[4]=g;const n=i[24];f=(t.anchorY-n)*this.pixelRatio,i[5]=f,V=x.height,i[6]=V,$=x.width,i[13]=$}let tt,et,it,nt;i.length>25&&(tt=i[25]),i.length>17?(et=i[16],it=i[17],nt=i[18]):(et=Xs,it=!1,nt=!1),K&&M?q+=L:K||M||(q-=L);let rt=0;for(;T0){if(!s||"Image"!==g&&"Text"!==g||s.includes(t)){const i=(d[a]-3)/4,s=n-i%o,l=n-(i/o|0),h=r(t,e,s*s+l*l);if(h)return h}c.clearRect(0,0,o,o);break}}const p=Object.keys(this.executorsByZIndex_).map(Number);let m,_,y,x,v;for(p.sort(a),m=p.length-1;m>=0;--m){const t=p[m].toString();for(y=this.executorsByZIndex_[t],_=mp.length-1;_>=0;--_)if(g=mp[_],x=y[g],void 0!==x&&(v=x.executeHitDetection(c,l,i,f,u),v))return v}}getClipCoords(t){const e=this.maxExtent_;if(!e)return null;const i=e[0],n=e[1],r=e[2],s=e[3],o=[i,n,i,s,r,s,r,n];return un(o,0,8,2,t,o),o}isEmpty(){return x(this.executorsByZIndex_)}execute(t,e,i,n,r,s,o){const l=Object.keys(this.executorsByZIndex_).map(Number);let h,c,u,d,g,f;for(l.sort(a),this.maxExtent_&&(t.save(),this.clip(t,i)),s=s||mp,o&&l.reverse(),h=0,c=l.length;hi)break;let a=n[o];a||(a=[],n[o]=a),a.push(4*((t+r)*e+(t+s))+3),r>0&&a.push(4*((t-r)*e+(t+s))+3),s>0&&(a.push(4*((t+r)*e+(t-s))+3),r>0&&a.push(4*((t-r)*e+(t-s))+3))}const r=[];for(let t=0,e=n.length;tu[2];)++c,o=r*c,a.push(this.getRenderTransform(e,i,n,vp,l,h,o).slice()),t-=r}this.hitDetectionImageData_=Sp(t,a,this.renderedFeatures_,o.getStyleFunction(),s,i,n)}e(wp(t,this.renderedFeatures_,this.hitDetectionImageData_))}.bind(this))}forEachFeatureAtCoordinate(t,e,i,n,r){if(!this.replayGroup_)return;const s=e.viewState.resolution,o=e.viewState.rotation,a=this.getLayer(),l={},h=function(t,e,i){const s=z(t),o=l[s];if(o){if(!0!==o&&ic=n.forEachFeatureAtCoordinate(t,s,o,i,h,n===this.declutterExecutorGroup&&e.declutterTree?e.declutterTree.all().map((t=>t.value)):null))),c}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&this.replayGroup_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}prepareFrame(t){const e=this.getLayer(),i=e.getSource();if(!i)return!1;const n=t.viewHints[Ro],r=t.viewHints[Po],s=e.getUpdateWhileAnimating(),o=e.getUpdateWhileInteracting();if(this.ready&&!s&&n||!o&&r)return this.animatingOrInteracting_=!0,!0;this.animatingOrInteracting_=!1;const a=t.extent,l=t.viewState,h=l.projection,c=l.resolution,d=t.pixelRatio,g=e.getRevision(),f=e.getRenderBuffer();let p=e.getRenderOrder();void 0===p&&(p=Pl);const m=l.center.slice(),_=Xt(a,f*c),y=_.slice(),x=[_.slice()],v=h.getExtent();if(i.getWrapX()&&h.canWrapX()&&!Yt(v,t.extent)){const t=Se(v),e=Math.max(Se(_)/2,t);_[0]=v[0]-e,_[2]=v[2]+e,Pi(m,h);const i=Pe(x[0],h);i[0]v[0]&&i[2]>v[2]&&x.push([i[0]-t,i[1],i[2]-t,i[3]])}if(this.ready&&this.renderedResolution_==c&&this.renderedRevision_==g&&this.renderedRenderOrder_==p&&Yt(this.wrappedRenderedExtent_,_))return u(this.renderedExtent_,y)||(this.hitDetectionImageData_=null,this.renderedExtent_=y),this.renderedCenter_=m,this.replayGroupChanged=!1,!0;this.replayGroup_=null;const S=new np(Ll(c,d),_,c,d);let w;this.getLayer().getDeclutter()&&(w=new np(Ll(c,d),_,c,d));const E=en();let T;if(E){for(let t=0,e=x.length;tt([])));const e=bt(this.coordinateToVectorPixelTransform_,bt(this.renderedPixelToCoordinateTransform_,t.slice()));return this.vectorRenderer_.getFeatures(e)}handleFontsChanged(){this.vectorRenderer_.handleFontsChanged()}prepareFrame(t){const e=t.pixelRatio,i=t.viewState,n=i.resolution,r=t.viewHints,s=this.vectorRenderer_;let o=t.extent;1!==this.layerImageRatio_&&(o=o.slice(0),Ce(o,this.layerImageRatio_));const a=Se(o)/n,l=_e(o)/n;if(!r[Ro]&&!r[Po]&&!Ee(o)){s.useContainer(null,null);const r=s.context,h=t.layerStatesArray[t.layerIndex];r.globalAlpha=h.opacity;const c=Object.assign({},h,{opacity:1}),u=Object.assign({},t,{declutterTree:new xh(9),extent:o,size:[a,l],viewState:Object.assign({},t.viewState,{rotation:0}),layerStatesArray:[c],layerIndex:0});let d=!0;const g=new Nr(o,n,e,r.canvas,(function(t){s.prepareFrame(u)&&s.replayGroupChanged&&(s.clipping=!1,s.renderFrame(u,null)&&(s.renderDeclutter(u),d=!1),t())}));g.addEventListener(S,function(){if(g.getState()!==Lr)return;this.image_=d?null:g;const t=g.getResolution(),n=g.getPixelRatio(),r=t*e/n;this.renderedResolution=r,this.coordinateToVectorPixelTransform_=Mt(this.coordinateToVectorPixelTransform_,a/2,l/2,1/r,-1/r,0,-i.center[0],-i.center[1])}.bind(this)),g.load()}return this.image_&&(this.renderedPixelToCoordinateTransform_=t.pixelToCoordinateTransform.slice()),!!this.image_}preRender(){}postRender(){}renderDeclutter(){}forEachFeatureAtCoordinate(t,e,i,n,r){return this.vectorRenderer_?this.vectorRenderer_.forEachFeatureAtCoordinate(t,e,i,n,r):super.forEachFeatureAtCoordinate(t,e,i,n,r)}}const Cp={image:["Polygon","Circle","LineString","Image","Text"],hybrid:["Polygon","LineString"],vector:[]},bp={hybrid:["Image","Text","Default"],vector:["Polygon","Circle","LineString","Image","Text","Default"]};class Rp extends Oc{constructor(t){super(t),this.boundHandleStyleImageChange_=this.handleStyleImageChange_.bind(this),this.renderedLayerRevision_,this.renderedPixelToCoordinateTransform_=null,this.renderedRotation_,this.tmpTransform_=[1,0,0,1,0,0]}prepareTile(t,e,i){let n;const r=t.getState();return r!==J&&r!==Q||(this.updateExecutorGroup_(t,e,i),this.tileImageNeedsRender_(t)&&(n=!0)),n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState,o=s.resolution,a=s.projection,l=this.getLayer(),h=l.getSource().getTile(t,e,i,r,a),c=n.viewHints,u=!(c[Ro]||c[Po]);!u&&h.wantedResolution||(h.wantedResolution=o);return this.prepareTile(h,r,a)&&(u||Date.now()-n.time<8)&&"vector"!==l.getRenderMode()&&this.renderTileImage_(h,n),super.getTile(t,e,i,n)}isDrawableTile(t){const e=this.getLayer();return super.isDrawableTile(t)&&("vector"===e.getRenderMode()?z(e)in t.executorGroups:t.hasContext(e))}getTileImage(t){return t.getImage(this.getLayer())}prepareFrame(t){const e=this.getLayer().getRevision();return this.renderedLayerRevision_!==e&&(this.renderedLayerRevision_=e,this.renderedTiles.length=0),super.prepareFrame(t)}updateExecutorGroup_(t,e,i){const n=this.getLayer(),r=n.getRevision(),s=n.getRenderOrder()||null,o=t.wantedResolution,a=t.getReplayState(n);if(!a.dirty&&a.renderedResolution===o&&a.renderedRevision==r&&a.renderedRenderOrder==s)return;const l=n.getSource(),h=n.getDeclutter(),c=l.getTileGrid(),u=l.getTileGridForProjection(i).getTileCoordExtent(t.wrappedTileCoord),d=l.getSourceTiles(e,i,t),g=z(n);delete t.hitDetectionImageData[g],t.executorGroups[g]=[],h&&(t.declutterExecutorGroups[g]=[]),a.dirty=!1;for(let i=0,r=d.length;i{const r=n===p?e.declutterTree.all().map((t=>t.value)):null;for(let e=0,a=n.length;e0)return void e([]);const g=xe(h.getTileCoordExtent(d.wrappedTileCoord)),f=[(c[0]-g[0])/l,(g[1]-c[1])/l],p=d.getSourceTiles().reduce((function(t,e){return t.concat(e.getFeatures())}),[]);let m=d.hitDetectionImageData[r];if(!m&&!this.animatingOrInteracting_){const t=Va(h.getTileSize(h.getZForResolution(l,s.zDirection))),e=this.renderedRotation_;m=Sp(t,[this.getRenderTransform(h.getTileCoordCenter(d.wrappedTileCoord),l,0,vp,t[0]*vp,t[1]*vp,0)],p,n.getStyleFunction(),h.getTileCoordExtent(d.wrappedTileCoord),d.getReplayState(n).renderedResolution,e),d.hitDetectionImageData[r]=m}e(wp(f,p,m))}.bind(this))}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&void 0!==this.renderedLayerRevision_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}renderDeclutter(t){const e=this.context,i=e.globalAlpha;e.globalAlpha=this.getLayer().getOpacity();const n=t.viewHints,r=!(n[Ro]||n[Po]),s=this.renderedTiles;for(let e=0,i=s.length;e=0;--e)n[e].execute(this.context,1,this.getTileRenderTransform(i,t),t.viewState.rotation,r,void 0,t.declutterTree)}e.globalAlpha=i}getTileRenderTransform(t,e){const i=e.pixelRatio,n=e.viewState,r=n.center,s=n.resolution,o=n.rotation,a=e.size,l=Math.round(a[0]*i),h=Math.round(a[1]*i),c=this.getLayer().getSource().getTileGridForProjection(e.viewState.projection),u=t.tileCoord,d=c.getTileCoordExtent(t.wrappedTileCoord),g=c.getTileCoordExtent(u,this.tmpExtent)[0]-d[0];return Et(Pt(this.inversePixelTransform.slice(),1/i,1/i),this.getRenderTransform(r,s,o,i,l,h,g))}postRender(t,e){const i=e.viewHints,n=!(i[Ro]||i[Po]);this.renderedPixelToCoordinateTransform_=e.pixelToCoordinateTransform.slice(),this.renderedRotation_=e.viewState.rotation;const r=this.getLayer(),s=r.getRenderMode(),o=t.globalAlpha;t.globalAlpha=r.getOpacity();const a=bp[s],l=e.viewState,h=l.rotation,c=r.getSource(),u=c.getTileGridForProjection(l.projection).getZForResolution(l.resolution,c.zDirection),d=this.renderedTiles,g=[],f=[];let p=!0;for(let i=d.length-1;i>=0;--i){const s=d[i];p=p&&!s.getReplayState(r).dirty;const o=s.executorGroups[z(r)].filter((t=>t.hasExecutors(a)));if(0===o.length)continue;const l=this.getTileRenderTransform(s,e),c=s.tileCoord[0];let m=!1;const _=o[0].getClipCoords(l);if(_){for(let e=0,i=g.length;e=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||he(t,this.intersectsCoordinate.bind(this)))}return!1}setCenter(t){const e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(let i=1;i1?a:2,s=s||new Array(a);for(let e=0;e>1;r1?new Gp(i,"XY",r):new ur(i,"XY",n);default:throw new Error("Invalid geometry type:"+e)}}Bp.prototype.getEndss=Bp.prototype.getEnds,Bp.prototype.getFlatCoordinates=Bp.prototype.getOrientedFlatCoordinates;class zp extends Ig{constructor(t){super(t)}createRenderer(){return new Ep(this)}}function Xp(t,e,i){const n=[];let r=t(0),s=t(1),o=e(r),a=e(s);const l=[s,r],h=[a,o],c=[1,0],u={};let d,g,f,p,m,_,y=1e5;for(;--y>0&&c.length>0;)f=c.pop(),r=l.pop(),o=h.pop(),_=f.toString(),_ in u||(n.push(o[0],o[1]),u[_]=!0),p=c.pop(),s=l.pop(),a=h.pop(),m=(f+p)/2,d=t(m),g=e(d),ni(g[0],g[1],o[0],o[1],a[0],a[1]) */ +read:function(t,e,i,n,r){var s,o,a=8*r-n-1,l=(1<>1,c=-7,u=i?r-1:0,d=i?-1:1,g=t[e+u];for(u+=d,s=g&(1<<-c)-1,g>>=-c,c+=a;c>0;s=256*s+t[e+u],u+=d,c-=8);for(o=s&(1<<-c)-1,s>>=-c,c+=n;c>0;o=256*o+t[e+u],u+=d,c-=8);if(0===s)s=1-h;else{if(s===l)return o?NaN:1/0*(g?-1:1);o+=Math.pow(2,n),s-=h}return(g?-1:1)*o*Math.pow(2,s-n)},write:function(t,e,i,n,r,s){var o,a,l,h=8*s-r-1,c=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:s-1,f=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+u>=1?d/l:d*Math.pow(2,1-u))*l>=2&&(o++,l/=2),o+u>=c?(a=0,o=c):o+u>=1?(a=(e*l-1)*Math.pow(2,r),o+=u):(a=e*Math.pow(2,u-1)*Math.pow(2,r),o=0));r>=8;t[i+g]=255&a,g+=f,a/=256,r-=8);for(o=o<0;t[i+g]=255&o,g+=f,o/=256,h-=8);t[i+g-f]|=128*p}},im=rm,nm=em;function rm(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}rm.Varint=0,rm.Fixed64=1,rm.Bytes=2,rm.Fixed32=5;var sm=4294967296,om=1/sm,am="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function lm(t){return t.type===rm.Bytes?t.readVarint()+t.pos:t.pos+1}function hm(t,e,i){return i?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function cm(t,e,i){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));i.realloc(n);for(var r=i.pos-1;r>=t;r--)i.buf[r+n]=i.buf[r]}function um(t,e){for(var i=0;i>>8,t[i+2]=e>>>16,t[i+3]=e>>>24}function wm(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}rm.prototype={destroy:function(){this.buf=null},readFields:function(t,e,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&n,t(r,e,this),this.pos===s&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=vm(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=wm(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=vm(this.buf,this.pos)+vm(this.buf,this.pos+4)*sm;return this.pos+=8,t},readSFixed64:function(){var t=vm(this.buf,this.pos)+wm(this.buf,this.pos+4)*sm;return this.pos+=8,t},readFloat:function(){var t=nm.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=nm.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,i,n=this.buf;return e=127&(i=n[this.pos++]),i<128?e:(e|=(127&(i=n[this.pos++]))<<7,i<128?e:(e|=(127&(i=n[this.pos++]))<<14,i<128?e:(e|=(127&(i=n[this.pos++]))<<21,i<128?e:function(t,e,i){var n,r,s=i.buf;if(r=s[i.pos++],n=(112&r)>>4,r<128)return hm(t,n,e);if(r=s[i.pos++],n|=(127&r)<<3,r<128)return hm(t,n,e);if(r=s[i.pos++],n|=(127&r)<<10,r<128)return hm(t,n,e);if(r=s[i.pos++],n|=(127&r)<<17,r<128)return hm(t,n,e);if(r=s[i.pos++],n|=(127&r)<<24,r<128)return hm(t,n,e);if(r=s[i.pos++],n|=(1&r)<<31,r<128)return hm(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(i=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&am?function(t,e,i){return am.decode(t.subarray(e,i))}(this.buf,e,t):function(t,e,i){var n="",r=e;for(;r239?4:l>223?3:l>191?2:1;if(r+c>i)break;1===c?l<128&&(h=l):2===c?128==(192&(s=t[r+1]))&&(h=(31&l)<<6|63&s)<=127&&(h=null):3===c?(s=t[r+1],o=t[r+2],128==(192&s)&&128==(192&o)&&((h=(15&l)<<12|(63&s)<<6|63&o)<=2047||h>=55296&&h<=57343)&&(h=null)):4===c&&(s=t[r+1],o=t[r+2],a=t[r+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&((h=(15&l)<<18|(63&s)<<12|(63&o)<<6|63&a)<=65535||h>=1114112)&&(h=null)),null===h?(h=65533,c=1):h>65535&&(h-=65536,n+=String.fromCharCode(h>>>10&1023|55296),h=56320|1023&h),n+=String.fromCharCode(h),r+=c}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==rm.Bytes)return t.push(this.readVarint(e));var i=lm(this);for(t=t||[];this.pos127;);else if(e===rm.Bytes)this.pos=this.readVarint()+this.pos;else if(e===rm.Fixed32)this.pos+=4;else{if(e!==rm.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var i,n;t>=0?(i=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(i=~(-t%4294967296))?i=i+1|0:(i=0,n=n+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,i){i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos]=127&t}(i,0,e),function(t,e){var i=(7&t)<<4;if(e.buf[e.pos++]|=i|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,i){for(var n,r,s=0;s55295&&n<57344){if(!r){n>56319||s+1===e.length?(t[i++]=239,t[i++]=191,t[i++]=189):r=n;continue}if(n<56320){t[i++]=239,t[i++]=191,t[i++]=189,r=n;continue}n=r-55296<<10|n-56320|65536,r=null}else r&&(t[i++]=239,t[i++]=191,t[i++]=189,r=null);n<128?t[i++]=n:(n<2048?t[i++]=n>>6|192:(n<65536?t[i++]=n>>12|224:(t[i++]=n>>18|240,t[i++]=n>>12&63|128),t[i++]=n>>6&63|128),t[i++]=63&n|128)}return i}(this.buf,t,this.pos);var i=this.pos-e;i>=128&&cm(e,i,this),this.pos=e-1,this.writeVarint(i),this.pos+=i},writeFloat:function(t){this.realloc(4),nm.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),nm.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var i=0;i=128&&cm(i,n,this),this.pos=i-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,i){this.writeTag(t,rm.Bytes),this.writeRawMessage(e,i)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,um,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,dm,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,pm,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,gm,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,fm,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,mm,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,_m,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,ym,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,xm,e)},writeBytesField:function(t,e){this.writeTag(t,rm.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,rm.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,rm.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,rm.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,rm.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,rm.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,rm.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,rm.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,rm.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,rm.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};class Em extends Jp{constructor(t){super(),t=t||{},this.dataProjection=new Ae({code:"",units:"tile-pixels"}),this.featureClass_=t.featureClass?t.featureClass:Bp,this.geometryName_=t.geometryName,this.layerName_=t.layerName?t.layerName:"layer",this.layers_=t.layers?t.layers:null,this.idProperty_=t.idProperty,this.supportedMediaTypes=["application/vnd.mapbox-vector-tile","application/x-protobuf"]}readRawGeometry_(t,e,i,n){t.pos=e.geometry;const r=t.readVarint()+t.pos;let s=1,o=0,a=0,l=0,h=0,c=0;for(;t.pos>3}o--,1===s||2===s?(a+=t.readSVarint(),l+=t.readSVarint(),1===s&&h>c&&(n.push(h),c=h),i.push(a,l),h+=2):7===s?h>c&&(i.push(i[c],i[c+1]),h+=2):at(!1,59)}h>c&&(n.push(h),c=h)}createFeature_(t,e,i){const n=e.type;if(0===n)return null;let r;const s=e.properties;let o;this.idProperty_?(o=s[this.idProperty_],delete s[this.idProperty_]):o=e.id,s[this.layerName_]=e.layer.name;const a=[],l=[];this.readRawGeometry_(t,e,a,l);const h=function(t,e){let i;1===t?i=1===e?"Point":"MultiPoint":2===t?i=1===e?"LineString":"MultiLineString":3===t&&(i="Polygon");return i}(n,l.length);if(this.featureClass_===Bp)r=new this.featureClass_(h,a,l,s,o),r.transform(i.dataProjection);else{let t;if("Polygon"==h){const e=cr(a,l);t=e.length>1?new Gp(a,"XY",e):new ur(a,"XY",l)}else t="Point"===h?new Wn(a,"XY"):"LineString"===h?new Op(a,"XY"):"MultiPoint"===h?new Dp(a,"XY"):"MultiLineString"===h?new Np(a,"XY",l):null;r=new(0,this.featureClass_),this.geometryName_&&r.setGeometryName(this.geometryName_);const e=Qp(t,!1,i);r.setGeometry(e),void 0!==o&&r.setId(o),r.setProperties(s,!0)}return r}getType(){return"arraybuffer"}readFeatures(t,e){const i=this.layers_,n=Ui((e=this.adaptOptions(e)).dataProjection);n.setWorldExtent(e.extent),e.dataProjection=n;const r=new im(t),s=r.readFields(Tm,{}),o=[];for(const t in s){if(i&&!i.includes(t))continue;const a=s[t],l=a?[0,0,a.extent,a.extent]:null;n.setExtent(l);for(let t=0,i=a.length;t>3)?i.readString():2===t?i.readFloat():3===t?i.readDouble():4===t?i.readVarint64():5===t?i.readVarint():6===t?i.readSVarint():7===t?i.readBoolean():null;e.values.push(n)}}function bm(t,e,i){if(1==t)e.id=i.readVarint();else if(2==t){const t=i.readVarint()+i.pos;for(;i.pos1&&!t.variables)throw new Error(`Missing variables in style (expected ${n.variables})`);for(let e=0;e ${fd.RENDER_EXTENT}[2] ||\n v_mapCoord[1] > ${fd.RENDER_EXTENT}[3]\n ) {\n discard;\n }\n\n vec4 color = texture2D(${fd.TILE_TEXTURE_ARRAY}[0], v_textureCoord);\n\n ${r.join("\n")}\n\n if (color.a == 0.0) {\n discard;\n }\n\n gl_FragColor = color;\n gl_FragColor.rgb *= gl_FragColor.a;\n gl_FragColor *= ${fd.TRANSITION_ALPHA};\n }`,uniforms:s,paletteTextures:n.paletteTextures}}class Mm extends Ac{constructor(t){const e=(t=t?Object.assign({},t):{}).style||{};delete t.style;const i=t.cacheSize;delete t.cacheSize,super(t),this.sources_=t.sources,this.renderedSource_=null,this.renderedResolution_=NaN,this.style_=e,this.cacheSize_=i,this.styleVariables_=this.style_.variables||{},this.addChangeListener(ds,this.handleSourceUpdate_)}getSources(t,e){const i=this.getSource();return this.sources_?"function"==typeof this.sources_?this.sources_(t,e):this.sources_:i?[i]:[]}getRenderSource(){return this.renderedSource_||this.getSource()}getSourceState(){const t=this.getRenderSource();return t?t.getState():"undefined"}handleSourceUpdate_(){this.hasRenderer()&&this.getRenderer().clearCache(),this.getSource()&&this.setStyle(this.style_)}getSourceBandCount_(){const t=Number.MAX_SAFE_INTEGER,e=this.getSources([-t,-t,t,t],t);return e&&e.length&&"bandCount"in e[0]?e[0].bandCount:4}createRenderer(){const t=Lm(this.style_,this.getSourceBandCount_());return new wd(this,{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms,cacheSize:this.cacheSize_,paletteTextures:t.paletteTextures})}renderSources(t,e){const i=this.getRenderer();let n;for(let r=0,s=e.length;r{"ready"==e.getState()&&(e.removeEventListener("change",t),this.changed())};e.addEventListener("change",t)}r=r&&"ready"==i}const s=this.renderSources(t,n);if(this.getRenderer().renderComplete&&r)return this.renderedResolution_=i.resolution,s;if(this.renderedResolution_>.5*i.resolution){const e=this.getSources(t.extent,this.renderedResolution_).filter((t=>!n.includes(t)));if(e.length>0)return this.renderSources(t,e)}return s}setStyle(t){this.styleVariables_=t.variables||{},this.style_=t;const e=Lm(this.style_,this.getSourceBandCount_());this.getRenderer().reset({vertexShader:e.vertexShader,fragmentShader:e.fragmentShader,uniforms:e.uniforms,paletteTextures:e.paletteTextures}),this.changed()}updateStyleVariables(t){Object.assign(this.styleVariables_,t),this.changed()}}Mm.prototype.dispose;const Fm="addfeatures";class Am extends i{constructor(t,e,i,n){super(t),this.features=i,this.file=e,this.projection=n}}const Om="drawstart",Nm="drawend",Dm="drawabort";class km extends i{constructor(t,e){super(t),this.feature=e}}function Gm(t,e){return ri(t[0],t[1],e[0],e[1])}function jm(t,e){const i=t.length;return e<0?t[e+i]:e>=i?t[e-i]:t[e]}function Bm(t,e,i){let n,r;eo){return Gm(Zm(t,n),Zm(t,r))}let a=0;if(n=i?n-=i:n<0&&(n+=i);let s=n+1;s>=i&&(s-=i);const o=t[n],a=o[0],l=o[1],h=t[s];return[a+(h[0]-a)*r,l+(h[1]-l)*r]}function Ym(){const t=fg();return function(e,i){return t[e.getGeometry().getType()]}}const Km="extentchanged";class qm extends i{constructor(t){super(Km),this.extent=t}}function Hm(){const t=fg();return function(e,i){return t.Polygon}}function $m(){const t=fg();return function(e,i){return t.Point}}function Jm(t){return function(e){return zt([t,e])}}function Qm(t,e){return t[0]==e[0]?function(i){return zt([t,[i[0],e[1]]])}:t[1]==e[1]?function(i){return zt([t,[e[0],i[1]]])}:null}function t_(t){return parseFloat(t)}function e_(t){return function(t){return ci(t,5)}(t).toString()}function i_(t,e){return!isNaN(t)&&t!==t_(e_(e))}const n_=[0,0,0,0],r_=[],s_="modifystart",o_="modifyend";class a_ extends i{constructor(t,e,i){super(t),this.features=e,this.mapBrowserEvent=i}}function l_(t,e){return t.index-e.index}function h_(t,e,i){const n=e.geometry;if("Circle"===n.getType()){let r=n;if(1===e.index){const e=en();e&&(r=r.clone().transform(e,i));const n=Ti(r.getCenter(),rn(t,i)),s=Math.sqrt(n)-r.getRadius();return s*s}}const r=rn(t,i);return r_[0]=rn(e.segment[0],i),r_[1]=rn(e.segment[1],i),bi(r,r_)}function c_(t,e,i){const n=e.geometry;if("Circle"===n.getType()&&1===e.index){let e=n;const r=en();return r&&(e=e.clone().transform(r,i)),nn(e.getClosestPoint(rn(t,i)),i)}const r=rn(t,i);return r_[0]=rn(e.segment[0],i),r_[1]=rn(e.segment[1],i),nn(yi(r,r_),i)}function u_(){const t=fg();return function(e,i){return t.Point}}const d_="select";class g_ extends i{constructor(t,e,i,n){super(t),this.selected=e,this.deselected=i,this.mapBrowserEvent=n}}const f_={};class p_ extends ea{constructor(t){let e;if(super(),this.on,this.once,this.un,t=t||{},this.boundAddFeature_=this.addFeature_.bind(this),this.boundRemoveFeature_=this.removeFeature_.bind(this),this.condition_=t.condition?t.condition:pa,this.addCondition_=t.addCondition?t.addCondition:fa,this.removeCondition_=t.removeCondition?t.removeCondition:fa,this.toggleCondition_=t.toggleCondition?t.toggleCondition:_a,this.multi_=!!t.multi&&t.multi,this.filter_=t.filter?t.filter:g,this.hitTolerance_=t.hitTolerance?t.hitTolerance:0,this.style_=void 0!==t.style?t.style:function(){const t=fg();return c(t.Polygon,t.LineString),c(t.GeometryCollection,t.LineString),function(e){return e.getGeometry()?t[e.getGeometry().getType()]:null}}(),this.features_=t.features||new q,t.layers)if("function"==typeof t.layers)e=t.layers;else{const i=t.layers;e=function(t){return i.includes(t)}}else e=g;this.layerFilter_=e,this.featureLayerAssociation_={}}addFeatureLayerAssociation_(t,e){this.featureLayerAssociation_[z(t)]=e}getFeatures(){return this.features_}getHitTolerance(){return this.hitTolerance_}getLayer(t){return this.featureLayerAssociation_[z(t)]}setHitTolerance(t){this.hitTolerance_=t}setMap(t){this.getMap()&&this.style_&&this.features_.forEach(this.restorePreviousStyle_.bind(this)),super.setMap(t),t?(this.features_.addEventListener(W,this.boundAddFeature_),this.features_.addEventListener(Z,this.boundRemoveFeature_),this.style_&&this.features_.forEach(this.applySelectedStyle_.bind(this))):(this.features_.removeEventListener(W,this.boundAddFeature_),this.features_.removeEventListener(Z,this.boundRemoveFeature_))}addFeature_(t){const e=t.element;if(this.style_&&this.applySelectedStyle_(e),!this.getLayer(e)){const t=this.getMap().getAllLayers().find((function(t){if(t instanceof zp&&t.getSource()&&t.getSource().hasFeature(e))return t}));t&&this.addFeatureLayerAssociation_(e,t)}}removeFeature_(t){this.style_&&this.restorePreviousStyle_(t.element)}getStyle(){return this.style_}applySelectedStyle_(t){const e=z(t);e in f_||(f_[e]=t.getStyle()),t.setStyle(this.style_)}restorePreviousStyle_(t){const e=this.getMap().getInteractions().getArray();for(let i=e.length-1;i>=0;--i){const n=e[i];if(n!==this&&n instanceof p_&&n.getStyle()&&-1!==n.getFeatures().getArray().lastIndexOf(t))return void t.setStyle(n.getStyle())}const i=z(t);t.setStyle(f_[i]),delete f_[i]}removeFeatureLayerAssociation_(t){delete this.featureLayerAssociation_[z(t)]}handleEvent(t){if(!this.condition_(t))return!0;const e=this.addCondition_(t),i=this.removeCondition_(t),n=this.toggleCondition_(t),r=!e&&!i&&!n,s=t.map,o=this.getFeatures(),a=[],l=[];if(r){y(this.featureLayerAssociation_),s.forEachFeatureAtPixel(t.pixel,function(t,e){if(t instanceof lt&&this.filter_(t,e))return this.addFeatureLayerAssociation_(t,e),l.push(t),!this.multi_}.bind(this),{layerFilter:this.layerFilter_,hitTolerance:this.hitTolerance_});for(let t=o.getLength()-1;t>=0;--t){const e=o.item(t),i=l.indexOf(e);i>-1?l.splice(i,1):(o.remove(e),a.push(e))}0!==l.length&&o.extend(l)}else{s.forEachFeatureAtPixel(t.pixel,function(t,r){if(t instanceof lt&&this.filter_(t,r))return!e&&!n||o.getArray().includes(t)?(i||n)&&o.getArray().includes(t)&&(a.push(t),this.removeFeatureLayerAssociation_(t)):(this.addFeatureLayerAssociation_(t,r),l.push(t)),!this.multi_}.bind(this),{layerFilter:this.layerFilter_,hitTolerance:this.hitTolerance_});for(let t=a.length-1;t>=0;--t)o.remove(a[t]);o.extend(l)}return(l.length>0||a.length>0)&&this.dispatchEvent(new g_(d_,l,a,t)),!0}}function m_(t){return t.feature?t.feature:t.element?t.element:void 0}const __=[];const y_="translatestart",x_="translating",v_="translateend";class S_ extends i{constructor(t,e,i,n,r){super(t),this.features=e,this.coordinate=i,this.startCoordinate=n,this.mapBrowserEvent=r}}function w_(t,e,i,n,r,s){void 0!==r?s=void 0!==s?s:0:(r=[],s=0);let o=e;for(;o=0;e--)r.push(n[t][e]);return{hasZ:i.hasZ,hasM:i.hasM,rings:r}}};function R_(t,e){if(!t)return null;let i;if("number"==typeof t.x&&"number"==typeof t.y)i="Point";else if(t.points)i="MultiPoint";else if(t.paths){i=1===t.paths.length?"LineString":"MultiLineString"}else if(t.rings){const e=t,n=P_(e),r=function(t,e){const i=[],n=[],r=[];let s,o;for(s=0,o=t.length;s=0;s--){const i=n[s][0];if(Yt(new Vn(i).getExtent(),new Vn(t).getExtent())){n[s].push(t),e=!0;break}}e||n.push([t.reverse()])}return n}(e.rings,n);1===r.length?(i="Polygon",t=Object.assign({},t,{rings:r[0]})):(i="MultiPolygon",t=Object.assign({},t,{rings:r}))}return Qp((0,C_[i])(t),!1,e)}function P_(t){let e="XY";return!0===t.hasZ&&!0===t.hasM?e="XYZM":!0===t.hasZ?e="XYZ":!0===t.hasM&&(e="XYM"),e}function I_(t){const e=t.getLayout();return{hasZ:"XYZ"===e||"XYZM"===e,hasM:"XYM"===e||"XYZM"===e}}function L_(t,e){return(0,b_[t.getType()])(Qp(t,!0,e),e)}class M_ extends Jp{constructor(){super(),this.xmlSerializer_=Nu()}getType(){return"xml"}readFeature(t,e){if(t){if("string"==typeof t){const i=_u(t);return this.readFeatureFromDocument(i,e)}return pu(t)?this.readFeatureFromDocument(t,e):this.readFeatureFromNode(t,e)}return null}readFeatureFromDocument(t,e){const i=this.readFeaturesFromDocument(t,e);return i.length>0?i[0]:null}readFeatureFromNode(t,e){return null}readFeatures(t,e){if(t){if("string"==typeof t){const i=_u(t);return this.readFeaturesFromDocument(i,e)}return pu(t)?this.readFeaturesFromDocument(t,e):this.readFeaturesFromNode(t,e)}return[]}readFeaturesFromDocument(t,e){const i=[];for(let n=t.firstChild;n;n=n.nextSibling)n.nodeType==Node.ELEMENT_NODE&&c(i,this.readFeaturesFromNode(n,e));return i}readFeaturesFromNode(t,e){return B()}readGeometry(t,e){if(t){if("string"==typeof t){const i=_u(t);return this.readGeometryFromDocument(i,e)}return pu(t)?this.readGeometryFromDocument(t,e):this.readGeometryFromNode(t,e)}return null}readGeometryFromDocument(t,e){return null}readGeometryFromNode(t,e){return null}readProjection(t){if(t){if("string"==typeof t){const e=_u(t);return this.readProjectionFromDocument(e)}return pu(t)?this.readProjectionFromDocument(t):this.readProjectionFromNode(t)}return null}readProjectionFromDocument(t){return this.dataProjection}readProjectionFromNode(t){return this.dataProjection}writeFeature(t,e){const i=this.writeFeatureNode(t,e);return this.xmlSerializer_.serializeToString(i)}writeFeatureNode(t,e){return null}writeFeatures(t,e){const i=this.writeFeaturesNode(t,e);return this.xmlSerializer_.serializeToString(i)}writeFeaturesNode(t,e){return null}writeGeometry(t,e){const i=this.writeGeometryNode(t,e);return this.xmlSerializer_.serializeToString(i)}writeGeometryNode(t,e){return null}}const F_="http://www.opengis.net/gml",A_=/^\s*$/;class O_ extends M_{constructor(t){super(),t=t||{},this.featureType=t.featureType,this.featureNS=t.featureNS,this.srsName=t.srsName,this.schemaLocation="",this.FEATURE_COLLECTION_PARSERS={},this.FEATURE_COLLECTION_PARSERS[this.namespace]={featureMember:xu(this.readFeaturesInternal),featureMembers:vu(this.readFeaturesInternal)},this.supportedMediaTypes=["application/gml+xml"]}readFeaturesInternal(t,e){const i=t.localName;let n=null;if("FeatureCollection"==i)n=Lu([],this.FEATURE_COLLECTION_PARSERS,t,e,this);else if("featureMembers"==i||"featureMember"==i||"member"==i){const r=e[0];let s=r.featureType,o=r.featureNS;const a="p",l="p0";if(!s&&t.childNodes){s=[],o={};for(let e=0,i=t.childNodes.length;e0){t={_content_:t};for(let e=0;e0){e[e.length-1].push(...i)}},outerBoundaryIs:function(t,e){const i=Lu(void 0,tv,t,e);if(i){e[e.length-1][0]=i}}});function Ux(t,e){const i=Lu({},Ox,t,e),n=Lu([null],Bx,t,e);if(n&&n[0]){const t=n[0],e=[t.length];for(let i=1,r=n.length;i0;let o;const a=r.href;let l,h,c;a?o=a:s&&(o=ix);let u="bottom-left";const d=i.hotSpot;let g;d?(l=[d.x,d.y],h=d.xunits,c=d.yunits,u=d.origin):/^https?:\/\/maps\.(?:google|gstatic)\.com\//.test(o)&&(o.includes("pushpin")?(l=Jy,h=Qy,c=tx):o.includes("arrow-reverse")?(l=[54,42],h=Qy,c=tx):o.includes("paddle")&&(l=[32,1],h=Qy,c=tx));const f=r.x,p=r.y;let m;void 0!==f&&void 0!==p&&(g=[f,p]);const _=r.w,y=r.h;let x;void 0!==_&&void 0!==y&&(m=[_,y]);const v=i.heading;void 0!==v&&(x=ai(v));const S=i.scale,w=i.color;if(s){o==ix&&(m=ex);const t=new lg({anchor:l,anchorOrigin:u,anchorXUnits:h,anchorYUnits:c,crossOrigin:this.crossOrigin_,offset:g,offsetOrigin:"bottom-left",rotation:x,scale:S,size:m,src:this.iconUrlFunction_(o),color:w}),e=t.getScaleArray()[0],i=t.getSize();if(null===i){const i=t.getImageState();if(i===Pr||i===Ir){const n=function(){const i=t.getImageState();if(i!==Pr&&i!==Ir){const i=t.getSize();if(i&&2==i.length){const n=dx(i);t.setScale(e*n)}t.unlistenImageChange(n)}};t.listenImageChange(n),i===Pr&&t.load()}}else if(2==i.length){const n=dx(i);t.setScale(e*n)}n.imageStyle=t}else n.imageStyle=rx},LabelStyle:function(t,e){const i=Lu({},Ex,t,e);if(!i)return;const n=e[e.length-1],r=new mg({fill:new rg({color:"color"in i?i.color:$y}),scale:i.scale});n.textStyle=r},LineStyle:function(t,e){const i=Lu({},Tx,t,e);if(!i)return;const n=e[e.length-1],r=new hg({color:"color"in i?i.color:$y,width:"width"in i?i.width:1});n.strokeStyle=r},PolyStyle:function(t,e){const i=Lu({},Cx,t,e);if(!i)return;const n=e[e.length-1],r=new rg({color:"color"in i?i.color:$y});n.fillStyle=r;const s=i.fill;void 0!==s&&(n.fill=s);const o=i.outline;void 0!==o&&(n.outline=o)}});function Xx(t,e){const i=Lu({},zx,t,e,this);if(!i)return null;let n="fillStyle"in i?i.fillStyle:nx;const r=i.fill;let s;void 0===r||r||(n=null),"imageStyle"in i?i.imageStyle!=rx&&(s=i.imageStyle):s=sx;const o="textStyle"in i?i.textStyle:lx,a="strokeStyle"in i?i.strokeStyle:ax,l=i.outline;return void 0===l||l?[new cg({fill:n,image:s,stroke:a,text:o,zIndex:void 0})]:[new cg({geometry:function(t){const e=t.getGeometry(),i=e.getType();if("GeometryCollection"===i){return new Ip(e.getGeometriesArrayRecursive().filter((function(t){const e=t.getType();return"Polygon"!==e&&"MultiPolygon"!==e})))}if("Polygon"!==i&&"MultiPolygon"!==i)return e},fill:n,image:s,stroke:a,text:o,zIndex:void 0}),new cg({geometry:function(t){const e=t.getGeometry(),i=e.getType();if("GeometryCollection"===i){return new Ip(e.getGeometriesArrayRecursive().filter((function(t){const e=t.getType();return"Polygon"===e||"MultiPolygon"===e})))}if("Polygon"===i||"MultiPolygon"===i)return e},fill:n,stroke:null,zIndex:void 0})]}function Vx(t,e){const i=e.length,n=new Array(e.length),r=new Array(e.length),s=new Array(e.length);let o,a,l;o=!1,a=!1,l=!1;for(let t=0;t0){const t=Ru(r,o);Fu(n,Cv,Rv,[{names:o,values:t}],i)}const u=i[0];let d=e.getGeometry();d&&(d=Qp(d,!0,u)),Fu(n,Cv,mv,[d],i)}const Iv=Pu(Xy,["extrude","tessellate","altitudeMode","coordinates"]),Lv=Pu(Xy,{extrude:Eu(X_),tessellate:Eu(X_),altitudeMode:Eu(K_),coordinates:Eu((function(t,e,i){const n=i[i.length-1],r=n.layout,s=n.stride;let o;"XY"==r||"XYM"==r?o=2:"XYZ"==r||"XYZM"==r?o=3:at(!1,34);const a=e.length;let l="";if(a>0){l+=e[0];for(let t=1;t>1):i>>1}return e}function mS(t){let e="";for(let i=0,n=t.length;i=32;)e=63+(32|31&t),i+=String.fromCharCode(e),t>>=5;return e=t+63,i+=String.fromCharCode(e),i}const xS={Point:function(t,e,i){const n=t.coordinates;e&&i&&TS(n,e,i);return new Wn(n)},LineString:function(t,e){const i=vS(t.arcs,e);return new Op(i)},Polygon:function(t,e){const i=[];for(let n=0,r=t.arcs.length;n0&&i.pop(),n>=0){const t=e[n];for(let e=0,n=t.length;e=0;--e)i.push(t[e].slice(0))}return i}function SS(t,e,i,n,r,s,o){const a=t.geometries,l=[];for(let t=0,h=a.length;t=2,57)}}class RS extends bS{constructor(t){super("And",Array.prototype.slice.call(arguments))}}class PS extends CS{constructor(t,e,i){if(super("BBOX"),this.geometryName=t,this.extent=e,4!==e.length)throw new Error("Expected an extent with four values ([minX, minY, maxX, maxY])");this.srsName=i}}class IS extends CS{constructor(t,e,i,n){super(t),this.geometryName=e||"the_geom",this.geometry=i,this.srsName=n}}class LS extends IS{constructor(t,e,i){super("Contains",t,e,i)}}class MS extends IS{constructor(t,e,i,n,r){super("DWithin",t,e,r),this.distance=i,this.unit=n}}class FS extends IS{constructor(t,e,i){super("Disjoint",t,e,i)}}class AS extends CS{constructor(t,e){super(t),this.propertyName=e}}class OS extends AS{constructor(t,e,i){super("During",t),this.begin=e,this.end=i}}class NS extends AS{constructor(t,e,i,n){super(t,e),this.expression=i,this.matchCase=n}}class DS extends NS{constructor(t,e,i){super("PropertyIsEqualTo",t,e,i)}}class kS extends NS{constructor(t,e){super("PropertyIsGreaterThan",t,e)}}class GS extends NS{constructor(t,e){super("PropertyIsGreaterThanOrEqualTo",t,e)}}class jS extends IS{constructor(t,e,i){super("Intersects",t,e,i)}}class BS extends AS{constructor(t,e,i){super("PropertyIsBetween",t),this.lowerBoundary=e,this.upperBoundary=i}}class US extends AS{constructor(t,e,i,n,r,s){super("PropertyIsLike",t),this.pattern=e,this.wildCard=void 0!==i?i:"*",this.singleChar=void 0!==n?n:".",this.escapeChar=void 0!==r?r:"!",this.matchCase=s}}class zS extends AS{constructor(t){super("PropertyIsNull",t)}}class XS extends NS{constructor(t,e){super("PropertyIsLessThan",t,e)}}class VS extends NS{constructor(t,e){super("PropertyIsLessThanOrEqualTo",t,e)}}class WS extends CS{constructor(t){super("Not"),this.condition=t}}class ZS extends NS{constructor(t,e,i){super("PropertyIsNotEqualTo",t,e,i)}}class YS extends bS{constructor(t){super("Or",Array.prototype.slice.call(arguments))}}class KS extends CS{constructor(t){super("ResourceId"),this.rid=t}}class qS extends IS{constructor(t,e,i){super("Within",t,e,i)}}function HS(t){const e=[null].concat(Array.prototype.slice.call(arguments));return new(Function.prototype.bind.apply(RS,e))}function $S(t,e,i){return new PS(t,e,i)}const JS={"http://www.opengis.net/gml":{boundedBy:wu(O_.prototype.readExtentElement,"bounds")},"http://www.opengis.net/wfs/2.0":{member:xu(O_.prototype.readFeaturesInternal)}},QS={"http://www.opengis.net/wfs":{totalInserted:wu(B_),totalUpdated:wu(B_),totalDeleted:wu(B_)},"http://www.opengis.net/wfs/2.0":{totalInserted:wu(B_),totalUpdated:wu(B_),totalDeleted:wu(B_)}},tw={"http://www.opengis.net/wfs":{TransactionSummary:wu(uw,"transactionSummary"),InsertResults:wu(pw,"insertIds")},"http://www.opengis.net/wfs/2.0":{TransactionSummary:wu(uw,"transactionSummary"),InsertResults:wu(pw,"insertIds")}},ew={"http://www.opengis.net/wfs":{PropertyName:Eu(K_)},"http://www.opengis.net/wfs/2.0":{PropertyName:Eu(K_)}},iw={"http://www.opengis.net/wfs":{Insert:Eu(mw),Update:Eu(vw),Delete:Eu(xw),Property:Eu(Sw),Native:Eu(ww)},"http://www.opengis.net/wfs/2.0":{Insert:Eu(mw),Update:Eu(vw),Delete:Eu(xw),Property:Eu(Sw),Native:Eu(ww)}},nw="feature",rw="http://www.w3.org/2000/xmlns/",sw={"2.0.0":"http://www.opengis.net/ogc/1.1","1.1.0":"http://www.opengis.net/ogc","1.0.0":"http://www.opengis.net/ogc"},ow={"2.0.0":"http://www.opengis.net/wfs/2.0","1.1.0":"http://www.opengis.net/wfs","1.0.0":"http://www.opengis.net/wfs"},aw={"2.0.0":"http://www.opengis.net/fes/2.0","1.1.0":"http://www.opengis.net/fes","1.0.0":"http://www.opengis.net/fes"},lw={"2.0.0":"http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd","1.1.0":"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd","1.0.0":"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"},hw={"2.0.0":ty,"1.1.0":J_,"1.0.0":H_};function cw(t,e,i,n){Fu(n,iw,Cu(t),e,i)}function uw(t,e){return Lu({},QS,t,e)}const dw={"http://www.opengis.net/ogc":{FeatureId:xu((function(t,e){return t.getAttribute("fid")}))},"http://www.opengis.net/ogc/1.1":{FeatureId:xu((function(t,e){return t.getAttribute("fid")}))}};function gw(t,e){Iu(dw,t,e)}const fw={"http://www.opengis.net/wfs":{Feature:gw},"http://www.opengis.net/wfs/2.0":{Feature:gw}};function pw(t,e){return Lu([],fw,t,e)}function mw(t,e,i){const n=i[i.length-1],r=n.featureType,s=n.featureNS,o=n.gmlVersion,a=du(s,r);t.appendChild(a),2===o?H_.prototype.writeFeatureElement(a,e,i):3===o?J_.prototype.writeFeatureElement(a,e,i):ty.prototype.writeFeatureElement(a,e,i)}function _w(t,e,i){const n=i[i.length-1].version,r=sw[n],s=du(r,"Filter"),o=du(r,"FeatureId");s.appendChild(o),o.setAttribute("fid",e),t.appendChild(s)}function yw(t,e){const i=(t=t||nw)+":";return e.startsWith(i)?e:i+e}function xw(t,e,i){const n=i[i.length-1];at(void 0!==e.getId(),26);const r=n.featureType,s=n.featurePrefix,o=n.featureNS,a=yw(s,r);t.setAttribute("typeName",a),t.setAttributeNS(rw,"xmlns:"+s,o);const l=e.getId();void 0!==l&&_w(t,l,i)}function vw(t,e,i){const n=i[i.length-1];at(void 0!==e.getId(),27);const r=n.version,s=n.featureType,o=n.featurePrefix,a=n.featureNS,l=yw(o,s),h=e.getGeometryName();t.setAttribute("typeName",l),t.setAttributeNS(rw,"xmlns:"+o,a);const c=e.getId();if(void 0!==c){const s=e.getKeys(),o=[];for(let t=0,i=s.length;t0,i=this.readUint32(e),n=Math.floor((268435455&i)/1e3),r=Boolean(2147483648&i)||1===n||3===n,s=Boolean(1073741824&i)||2===n||3===n,o=Boolean(536870912&i),a=(268435455&i)%1e3,l=["XY",r?"Z":"",s?"M":""].join(""),h=o?this.readUint32(e):null;if(void 0!==t&&t!==a)throw new Error("Unexpected WKB geometry type "+a);if(this.initialized_){if(this.isLittleEndian_!==e)throw new Error("Inconsistent endian");if(this.layout_!==l)throw new Error("Inconsistent geometry layout");if(h&&this.srid_!==h)throw new Error("Inconsistent coordinate system (SRID)")}else this.isLittleEndian_=e,this.hasZ_=r,this.hasM_=s,this.layout_=l,this.srid_=h,this.initialized_=!0;return a}readWkbPayload(t){switch(t){case zw:return this.readPoint();case Xw:return this.readLineString();case Vw:case $w:return this.readPolygon();case Ww:return this.readMultiPoint();case Zw:return this.readMultiLineString();case Yw:case qw:case Hw:return this.readMultiPolygon();case Kw:return this.readGeometryCollection();default:throw new Error("Unsupported WKB geometry type "+t+" is found")}}readWkbBlock(t){return this.readWkbPayload(this.readWkbHeader(t))}readWkbCollection(t,e){const i=this.readUint32(),n=[];for(let r=0;r({[e]:t[i]}))));for(const t of this.layout_)this.writeDouble(t in i?i[t]:this.nodata_[t])}writeLineString(t,e){this.writeUint32(t.length);for(let i=0;it+e[0]),0),e=new ArrayBuffer(t),i=new DataView(e);let n=0;return this.writeQueue_.forEach((t=>{switch(t[0]){case 1:i.setUint8(n,t[1]);break;case 4:i.setUint32(n,t[1],this.isLittleEndian_);break;case 8:i.setFloat64(n,t[1],this.isLittleEndian_)}n+=t[0]})),e}}function tE(t){return"string"==typeof t?function(t){const e=new Uint8Array(t.length/2);for(let i=0;i="a"&&t<="z"||t>="A"&&t<="Z"}isNumeric_(t,e){return e=void 0!==e&&e,t>="0"&&t<="9"||"."==t&&!e}isWhiteSpace_(t){return" "==t||"\t"==t||"\r"==t||"\n"==t}nextChar_(){return this.wkt.charAt(++this.index_)}nextToken(){const t=this.nextChar_(),e=this.index_;let i,n=t;if("("==t)i=sE;else if(","==t)i=lE;else if(")"==t)i=oE;else if(this.isNumeric_(t)||"-"==t)i=aE,n=this.readNumber_();else if(this.isAlpha_(t))i=rE,n=this.readText_();else{if(this.isWhiteSpace_(t))return this.nextToken();if(""!==t)throw new Error("Unexpected character: "+t);i=hE}return{position:e,value:n,type:i}}readNumber_(){let t;const e=this.index_;let i=!1,n=!1;do{"."==t?i=!0:"e"!=t&&"E"!=t||(n=!0),t=this.nextChar_()}while(this.isNumeric_(t,i)||!n&&("e"==t||"E"==t)||n&&("-"==t||"+"==t));return parseFloat(this.wkt.substring(e,this.index_--))}readText_(){let t;const e=this.index_;do{t=this.nextChar_()}while(this.isAlpha_(t));return this.wkt.substring(e,this.index_--).toUpperCase()}}class dE{constructor(t){this.lexer_=t,this.token_={position:0,type:nE},this.layout_="XY"}consume_(){this.token_=this.lexer_.nextToken()}isTokenType(t){return this.token_.type==t}match(t){const e=this.isTokenType(t);return e&&this.consume_(),e}parse(){return this.consume_(),this.parseGeometry_()}parseGeometryLayout_(){let t="XY";const e=this.token_;if(this.isTokenType(rE)){const i=e.value;"Z"===i?t="XYZ":"M"===i?t="XYM":"ZM"===i&&(t="XYZM"),"XY"!==t&&this.consume_()}return t}parseGeometryCollectionText_(){if(this.match(sE)){const t=[];do{t.push(this.parseGeometry_())}while(this.match(lE));if(this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parsePointText_(){if(this.match(sE)){const t=this.parsePoint_();if(this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parseLineStringText_(){if(this.match(sE)){const t=this.parsePointList_();if(this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parsePolygonText_(){if(this.match(sE)){const t=this.parseLineStringTextList_();if(this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parseMultiPointText_(){if(this.match(sE)){let t;if(t=this.token_.type==sE?this.parsePointTextList_():this.parsePointList_(),this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parseMultiLineStringText_(){if(this.match(sE)){const t=this.parseLineStringTextList_();if(this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parseMultiPolygonText_(){if(this.match(sE)){const t=this.parsePolygonTextList_();if(this.match(oE))return t}throw new Error(this.formatErrorMessage_())}parsePoint_(){const t=[],e=this.layout_.length;for(let i=0;i0&&(n+=" "+e)}return 0===i.length?n+" "+iE:n+"("+i+")"}const yE=[null,"http://www.opengis.net/wms"],xE=Pu(yE,{Service:wu((function(t,e){return Lu({},SE,t,e)})),Capability:wu((function(t,e){return Lu({},vE,t,e)}))}),vE=Pu(yE,{Request:wu((function(t,e){return Lu({},IE,t,e)})),Exception:wu((function(t,e){return Lu([],CE,t,e)})),Layer:wu((function(t,e){const i=Lu({},bE,t,e);if(void 0===i.Layer)return Object.assign(i,DE(t,e));return i}))});const SE=Pu(yE,{Name:wu(z_),Title:wu(z_),Abstract:wu(z_),KeywordList:wu(BE),OnlineResource:wu(Yv),ContactInformation:wu((function(t,e){return Lu({},wE,t,e)})),Fees:wu(z_),AccessConstraints:wu(z_),LayerLimit:wu(B_),MaxWidth:wu(B_),MaxHeight:wu(B_)}),wE=Pu(yE,{ContactPersonPrimary:wu((function(t,e){return Lu({},EE,t,e)})),ContactPosition:wu(z_),ContactAddress:wu((function(t,e){return Lu({},TE,t,e)})),ContactVoiceTelephone:wu(z_),ContactFacsimileTelephone:wu(z_),ContactElectronicMailAddress:wu(z_)}),EE=Pu(yE,{ContactPerson:wu(z_),ContactOrganization:wu(z_)}),TE=Pu(yE,{AddressType:wu(z_),Address:wu(z_),City:wu(z_),StateOrProvince:wu(z_),PostCode:wu(z_),Country:wu(z_)}),CE=Pu(yE,{Format:xu(z_)}),bE=Pu(yE,{Name:wu(z_),Title:wu(z_),Abstract:wu(z_),KeywordList:wu(BE),CRS:Su(z_),EX_GeographicBoundingBox:wu((function(t,e){const i=Lu({},PE,t,e);if(!i)return;const n=i.westBoundLongitude,r=i.southBoundLatitude,s=i.eastBoundLongitude,o=i.northBoundLatitude;if(void 0===n||void 0===r||void 0===s||void 0===o)return;return[n,r,s,o]})),BoundingBox:Su((function(t,e){const i=[j_(t.getAttribute("minx")),j_(t.getAttribute("miny")),j_(t.getAttribute("maxx")),j_(t.getAttribute("maxy"))],n=[j_(t.getAttribute("resx")),j_(t.getAttribute("resy"))];return{crs:t.getAttribute("CRS"),extent:i,res:n}})),Dimension:Su((function(t,e){return{name:t.getAttribute("name"),units:t.getAttribute("units"),unitSymbol:t.getAttribute("unitSymbol"),default:t.getAttribute("default"),multipleValues:D_(t.getAttribute("multipleValues")),nearestValue:D_(t.getAttribute("nearestValue")),current:D_(t.getAttribute("current")),values:z_(t)}})),Attribution:wu((function(t,e){return Lu({},RE,t,e)})),AuthorityURL:Su((function(t,e){const i=kE(t,e);if(i)return i.name=t.getAttribute("name"),i;return})),Identifier:Su(z_),MetadataURL:Su((function(t,e){const i=kE(t,e);if(i)return i.type=t.getAttribute("type"),i;return})),DataURL:Su(kE),FeatureListURL:Su(kE),Style:Su((function(t,e){return Lu({},AE,t,e)})),MinScaleDenominator:wu(G_),MaxScaleDenominator:wu(G_),Layer:Su(DE)}),RE=Pu(yE,{Title:wu(z_),OnlineResource:wu(Yv),LogoURL:wu(jE)}),PE=Pu(yE,{westBoundLongitude:wu(G_),eastBoundLongitude:wu(G_),southBoundLatitude:wu(G_),northBoundLatitude:wu(G_)}),IE=Pu(yE,{GetCapabilities:wu(GE),GetMap:wu(GE),GetFeatureInfo:wu(GE)}),LE=Pu(yE,{Format:Su(z_),DCPType:Su((function(t,e){return Lu({},ME,t,e)}))}),ME=Pu(yE,{HTTP:wu((function(t,e){return Lu({},FE,t,e)}))}),FE=Pu(yE,{Get:wu(kE),Post:wu(kE)}),AE=Pu(yE,{Name:wu(z_),Title:wu(z_),Abstract:wu(z_),LegendURL:Su(jE),StyleSheetURL:wu(kE),StyleURL:wu(kE)}),OE=Pu(yE,{Format:wu(z_),OnlineResource:wu(Yv)}),NE=Pu(yE,{Keyword:xu(z_)});function DE(t,e){const i=e[e.length-1],n=Lu({},bE,t,e);if(!n)return;let r=D_(t.getAttribute("queryable"));void 0===r&&(r=i.queryable),n.queryable=void 0!==r&&r;let s=U_(t.getAttribute("cascaded"));void 0===s&&(s=i.cascaded),n.cascaded=s;let o=D_(t.getAttribute("opaque"));void 0===o&&(o=i.opaque),n.opaque=void 0!==o&&o;let a=D_(t.getAttribute("noSubsets"));void 0===a&&(a=i.noSubsets),n.noSubsets=void 0!==a&&a;let l=j_(t.getAttribute("fixedWidth"));l||(l=i.fixedWidth),n.fixedWidth=l;let h=j_(t.getAttribute("fixedHeight"));h||(h=i.fixedHeight),n.fixedHeight=h;["Style","CRS","AuthorityURL"].forEach((function(t){if(t in i){const e=n[t]||[];n[t]=e.concat(i[t])}}));return["EX_GeographicBoundingBox","BoundingBox","Dimension","Attribution","MinScaleDenominator","MaxScaleDenominator"].forEach((function(t){if(!(t in n)){const e=i[t];n[t]=e}})),n}function kE(t,e){return Lu({},OE,t,e)}function GE(t,e){return Lu({},LE,t,e)}function jE(t,e){const i=kE(t,e);if(i){const e=[U_(t.getAttribute("width")),U_(t.getAttribute("height"))];return i.size=e,i}}function BE(t,e){return Lu([],NE,t,e)}const UE=[null,"http://www.opengis.net/wmts/1.0"],zE=[null,"http://www.opengis.net/ows/1.1"],XE=Pu(UE,{Contents:wu((function(t,e){return Lu({},VE,t,e)}))});const VE=Pu(UE,{Layer:Su((function(t,e){return Lu({},WE,t,e)})),TileMatrixSet:Su((function(t,e){return Lu({},JE,t,e)}))}),WE=Pu(UE,{Style:Su((function(t,e){const i=Lu({},ZE,t,e);if(!i)return;const n="true"===t.getAttribute("isDefault");return i.isDefault=n,i})),Format:Su(z_),TileMatrixSetLink:Su((function(t,e){return Lu({},YE,t,e)})),Dimension:Su((function(t,e){return Lu({},HE,t,e)})),ResourceURL:Su((function(t,e){const i=t.getAttribute("format"),n=t.getAttribute("template"),r=t.getAttribute("resourceType"),s={};i&&(s.format=i);n&&(s.template=n);r&&(s.resourceType=r);return s}))},Pu(zE,{Title:wu(z_),Abstract:wu(z_),WGS84BoundingBox:wu(tT),Identifier:wu(z_)})),ZE=Pu(UE,{LegendURL:Su((function(t,e){const i={};return i.format=t.getAttribute("format"),i.href=Yv(t),i}))},Pu(zE,{Title:wu(z_),Identifier:wu(z_)})),YE=Pu(UE,{TileMatrixSet:wu(z_),TileMatrixSetLimits:wu((function(t,e){return Lu([],KE,t,e)}))}),KE=Pu(UE,{TileMatrixLimits:xu((function(t,e){return Lu({},qE,t,e)}))}),qE=Pu(UE,{TileMatrix:wu(z_),MinTileRow:wu(B_),MaxTileRow:wu(B_),MinTileCol:wu(B_),MaxTileCol:wu(B_)}),HE=Pu(UE,{Default:wu(z_),Value:Su(z_)},Pu(zE,{Identifier:wu(z_)})),$E=Pu(zE,{LowerCorner:xu(eT),UpperCorner:xu(eT)}),JE=Pu(UE,{WellKnownScaleSet:wu(z_),TileMatrix:Su((function(t,e){return Lu({},QE,t,e)}))},Pu(zE,{SupportedCRS:wu(z_),Identifier:wu(z_),BoundingBox:wu(tT)})),QE=Pu(UE,{TopLeftCorner:wu(eT),ScaleDenominator:wu(G_),TileWidth:wu(B_),TileHeight:wu(B_),MatrixWidth:wu(B_),MatrixHeight:wu(B_)},Pu(zE,{Identifier:wu(z_)}));function tT(t,e){const i=Lu([],$E,t,e);if(2==i.length)return zt(i)}function eT(t,e){const i=z_(t).split(/\s+/);if(!i||2!=i.length)return;const n=+i[0],r=+i[1];return isNaN(n)||isNaN(r)?void 0:[n,r]}const iT=["fullscreenchange","webkitfullscreenchange","MSFullscreenChange"],nT="enterfullscreen",rT="leavefullscreen";function sT(t){const e=t.body;return!!(e.webkitRequestFullscreen||e.requestFullscreen&&t.fullscreenEnabled)}function oT(t){return!(!t.webkitIsFullScreen&&!t.fullscreenElement)}function aT(t){t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen()}const lT="projection",hT="coordinateFormat";const cT=.75,uT=.1;const dT="units",gT=[1,2,5],fT=25.4/.28;const pT=0,mT=1;var _T={};return _T.AssertionError=e,_T.Collection=q,_T.Collection.CollectionEvent=K,_T.DataTile=ot,_T.Disposable=s,_T.Feature=lt,_T.Feature.createStyleFunction=ht,_T.Geolocation=class extends V{constructor(t){super(),this.on,this.once,this.un,t=t||{},this.position_=null,this.transform_=Gi,this.watchId_=void 0,this.addChangeListener(wr,this.handleProjectionChanged_),this.addChangeListener(Tr,this.handleTrackingChanged_),void 0!==t.projection&&this.setProjection(t.projection),void 0!==t.trackingOptions&&this.setTrackingOptions(t.trackingOptions),this.setTracking(void 0!==t.tracking&&t.tracking)}disposeInternal(){this.setTracking(!1),super.disposeInternal()}handleProjectionChanged_(){const t=this.getProjection();t&&(this.transform_=qi(Ui("EPSG:4326"),t),this.position_&&this.set(Sr,this.transform_(this.position_)))}handleTrackingChanged_(){if("geolocation"in navigator){const t=this.getTracking();t&&void 0===this.watchId_?this.watchId_=navigator.geolocation.watchPosition(this.positionChange_.bind(this),this.positionError_.bind(this),this.getTrackingOptions()):t||void 0===this.watchId_||(navigator.geolocation.clearWatch(this.watchId_),this.watchId_=void 0)}}positionChange_(t){const e=t.coords;this.set(mr,e.accuracy),this.set(yr,null===e.altitude?void 0:e.altitude),this.set(xr,null===e.altitudeAccuracy?void 0:e.altitudeAccuracy),this.set(vr,null===e.heading?void 0:ai(e.heading)),this.position_?(this.position_[0]=e.longitude,this.position_[1]=e.latitude):this.position_=[e.longitude,e.latitude];const i=this.transform_(this.position_);this.set(Sr,i),this.set(Er,null===e.speed?void 0:e.speed);const n=dr(this.position_,e.accuracy);n.applyTransform(this.transform_),this.set(_r,n),this.changed()}positionError_(t){this.dispatchEvent(new br(t))}getAccuracy(){return this.get(mr)}getAccuracyGeometry(){return this.get(_r)||null}getAltitude(){return this.get(yr)}getAltitudeAccuracy(){return this.get(xr)}getHeading(){return this.get(vr)}getPosition(){return this.get(Sr)}getProjection(){return this.get(wr)}getSpeed(){return this.get(Er)}getTracking(){return this.get(Tr)}getTrackingOptions(){return this.get(Cr)}setProjection(t){this.set(wr,Ui(t))}setTracking(t){this.set(Tr,t)}setTrackingOptions(t){this.set(Cr,t)}},_T.Image=Ar,_T.Image.listenImage=Or,_T.ImageBase=Rr,_T.ImageCanvas=Nr,_T.ImageTile=Vr,_T.Kinetic=Wr,_T.Map=Ya,_T.MapBrowserEvent=oo,_T.MapBrowserEventHandler=go,_T.MapEvent=so,_T.Object=V,_T.Object.ObjectEvent=X,_T.Observable=G,_T.Observable.unByKey=j,_T.Overlay=Qa,_T.Tile=st,_T.TileCache=ll,_T.TileQueue=Co,_T.TileQueue.getTilePriority=bo,_T.TileRange=hl,_T.TileRange.createOrUpdate=cl,_T.VectorRenderTile=dl,_T.VectorTile=gl,_T.View=zo,_T.View.createCenterConstraint=Vo,_T.View.createResolutionConstraint=Wo,_T.View.createRotationConstraint=Zo,_T.View.isNoopAnimation=Yo,_T.array={},_T.array.binarySearch=o,_T.array.equals=u,_T.array.extend=c,_T.array.isSorted=d,_T.array.linearFindNearest=l,_T.array.numberSafeCompareFunction=a,_T.array.remove=function(t,e){const i=t.indexOf(e),n=i>-1;return n&&t.splice(i,1),n},_T.array.reverseSubArray=h,_T.array.stableSort=function(t,e){const i=t.length,n=Array(t.length);let r;for(r=0;rc*cT||h>u*cT?this.resetExtent_():Yt(s,n)||this.recenter_()}resetExtent_(){const t=this.getMap(),e=this.ovmap_,i=t.getSize(),n=t.getView().calculateExtentInternal(i),r=e.getView(),s=Math.log(7.5)/Math.LN2;Ce(n,1/(Math.pow(2,s/2)*uT)),r.fitInternal(gr(n))}recenter_(){const t=this.getMap(),e=this.ovmap_,i=t.getView();e.getView().setCenterInternal(i.getCenterInternal())}updateBox_(){const t=this.getMap(),e=this.ovmap_;if(!t.isRendered()||!e.isRendered())return;const i=t.getSize(),n=t.getView(),r=e.getView(),s=this.rotateWithView_?0:-n.getRotation(),o=this.boxOverlay_,a=this.boxOverlay_.getElement(),l=n.getCenterInternal(),h=n.getResolution(),c=r.getResolution(),u=i[0]*h/c,d=i[1]*h/c;if(o.setPosition(l),a){a.style.width=u+"px",a.style.height=d+"px";const t="rotate("+s+"rad)";a.style.transform=t}}updateBoxAfterOvmapIsRendered_(){this.ovmapPostrenderKey_||(this.ovmapPostrenderKey_=D(this.ovmap_,fo,(function(t){delete this.ovmapPostrenderKey_,this.updateBox_()}),this))}handleClick_(t){t.preventDefault(),this.handleToggle_()}handleToggle_(){this.element.classList.toggle(Ls),this.collapsed_?Br(this.collapseLabel_,this.label_):Br(this.label_,this.collapseLabel_),this.collapsed_=!this.collapsed_;const t=this.ovmap_;if(!this.collapsed_){if(t.isRendered())return this.viewExtent_=void 0,void t.render();t.updateSize(),this.resetExtent_(),this.updateBoxAfterOvmapIsRendered_()}}getCollapsible(){return this.collapsible_}setCollapsible(t){this.collapsible_!==t&&(this.collapsible_=t,this.element.classList.toggle("ol-uncollapsible"),!t&&this.collapsed_&&this.handleToggle_())}setCollapsed(t){this.collapsible_&&this.collapsed_!==t&&this.handleToggle_()}getCollapsed(){return this.collapsed_}getRotateWithView(){return this.rotateWithView_}setRotateWithView(t){this.rotateWithView_!==t&&(this.rotateWithView_=t,0!==this.getMap().getView().getRotation()&&(this.rotateWithView_?this.handleRotationChanged_():this.ovmap_.getView().setRotation(0),this.viewExtent_=void 0,this.validateExtent_(),this.updateBox_()))}getOverviewMap(){return this.ovmap_}render(t){this.validateExtent_(),this.updateBox_()}},_T.control.Rotate=$o,_T.control.ScaleLine=class extends qo{constructor(t){t=t||{};const e=document.createElement("div");e.style.pointerEvents="none",super({element:e,render:t.render,target:t.target}),this.on,this.once,this.un;const i=void 0!==t.className?t.className:t.bar?"ol-scale-bar":"ol-scale-line";this.innerElement_=document.createElement("div"),this.innerElement_.className=i+"-inner",this.element.className=i+" "+Rs,this.element.appendChild(this.innerElement_),this.viewState_=null,this.minWidth_=void 0!==t.minWidth?t.minWidth:64,this.maxWidth_=t.maxWidth,this.renderedVisible_=!1,this.renderedWidth_=void 0,this.renderedHTML_="",this.addChangeListener(dT,this.handleUnitsChanged_),this.setUnits(t.units||"metric"),this.scaleBar_=t.bar||!1,this.scaleBarSteps_=t.steps||4,this.scaleBarText_=t.text||!1,this.dpi_=t.dpi||void 0}getUnits(){return this.get(dT)}handleUnitsChanged_(){this.updateElement_()}setUnits(t){this.set(dT,t)}setDpi(t){this.dpi_=t}updateElement_(){const t=this.viewState_;if(!t)return void(this.renderedVisible_&&(this.element.style.display="none",this.renderedVisible_=!1));const e=t.center,i=t.projection,n=this.getUnits(),r="degrees"==n?"degrees":"m";let s=zi(i,t.resolution,e,r);const o=this.minWidth_*(this.dpi_||fT)/fT,a=void 0!==this.maxWidth_?this.maxWidth_*(this.dpi_||fT)/fT:void 0;let l=o*s,h="";if("degrees"==n){const t=Fe.degrees;l*=t,l=a){c=g,u=f,d=p;break}if(u>=o)break;g=c,f=u,p=d,++m}const _=this.scaleBar_?this.createScaleBar(u,c,h):c.toFixed(d<0?-d:0)+" "+h;this.renderedHTML_!=_&&(this.innerElement_.innerHTML=_,this.renderedHTML_=_),this.renderedWidth_!=u&&(this.innerElement_.style.width=u+"px",this.renderedWidth_=u),this.renderedVisible_||(this.element.style.display="",this.renderedVisible_=!0)}createScaleBar(t,e,i){const n=this.getScaleForResolution(),r=n<1?Math.round(1/n).toLocaleString()+" : 1":"1 : "+Math.round(n).toLocaleString(),s=this.scaleBarSteps_,o=t/s,a=[this.createMarker("absolute")];for(let n=0;n
`+this.createMarker("relative")+(n%2==0||2===s?this.createStepText(n,t,!1,e,i):"")+"")}a.push(this.createStepText(s,t,!0,e,i));return(this.scaleBarText_?`
`+r+"
":"")+a.join("")}createMarker(t){return`
`}createStepText(t,e,i,n,r){const s=(0===t?0:Math.round(n/this.scaleBarSteps_*t*100)/100)+(0===t?"":" "+r);return`
`+s+"
"}getScaleForResolution(){return zi(this.viewState_.projection,this.viewState_.resolution,this.viewState_.center,"m")*(1e3/25.4)*(this.dpi_||fT)}render(t){const e=t.frameState;this.viewState_=e?e.viewState:null,this.updateElement_()}},_T.control.Zoom=Jo,_T.control.ZoomSlider=class extends qo{constructor(t){t=t||{},super({element:document.createElement("div"),render:t.render}),this.dragListenerKeys_=[],this.currentResolution_=void 0,this.direction_=pT,this.dragging_,this.heightLimit_=0,this.widthLimit_=0,this.startX_,this.startY_,this.thumbSize_=null,this.sliderInitialized_=!1,this.duration_=void 0!==t.duration?t.duration:200;const e=void 0!==t.className?t.className:"ol-zoomslider",i=document.createElement("button");i.setAttribute("type","button"),i.className=e+"-thumb "+Rs;const r=this.element;r.className=e+" "+"ol-unselectable "+Is,r.appendChild(i),r.addEventListener(ho,this.handleDraggerStart_.bind(this),!1),r.addEventListener(lo,this.handleDraggerDrag_.bind(this),!1),r.addEventListener(co,this.handleDraggerEnd_.bind(this),!1),r.addEventListener(T,this.handleContainerClick_.bind(this),!1),i.addEventListener(T,n,!1)}setMap(t){super.setMap(t),t&&t.render()}initSlider_(){const t=this.element;let e=t.offsetWidth,i=t.offsetHeight;if(0===e&&0===i)return this.sliderInitialized_=!1;const n=getComputedStyle(t);e-=parseFloat(n.paddingRight)+parseFloat(n.paddingLeft),i-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom);const r=t.firstElementChild,s=getComputedStyle(r),o=r.offsetWidth+parseFloat(s.marginRight)+parseFloat(s.marginLeft),a=r.offsetHeight+parseFloat(s.marginTop)+parseFloat(s.marginBottom);return this.thumbSize_=[o,a],e>i?(this.direction_=mT,this.widthLimit_=e-o):(this.direction_=pT,this.heightLimit_=i-a),this.sliderInitialized_=!0}handleContainerClick_(t){const e=this.getMap().getView(),i=this.getRelativePosition_(t.offsetX-this.thumbSize_[0]/2,t.offsetY-this.thumbSize_[1]/2),n=this.getResolutionForPosition_(i),r=e.getConstrainedZoom(e.getZoomForResolution(n));e.animateInternal({zoom:r,duration:this.duration_,easing:it})}handleDraggerStart_(t){if(!this.dragging_&&t.target===this.element.firstElementChild){const e=this.element.firstElementChild;if(this.getMap().getView().beginInteraction(),this.startX_=t.clientX-parseFloat(e.style.left),this.startY_=t.clientY-parseFloat(e.style.top),this.dragging_=!0,0===this.dragListenerKeys_.length){const t=this.handleDraggerDrag_,e=this.handleDraggerEnd_,i=this.getMap().getOwnerDocument();this.dragListenerKeys_.push(N(i,lo,t,this),N(i,co,e,this))}}}handleDraggerDrag_(t){if(this.dragging_){const e=t.clientX-this.startX_,i=t.clientY-this.startY_,n=this.getRelativePosition_(e,i);this.currentResolution_=this.getResolutionForPosition_(n),this.getMap().getView().setResolution(this.currentResolution_)}}handleDraggerEnd_(t){if(this.dragging_){this.getMap().getView().endInteraction(),this.dragging_=!1,this.startX_=void 0,this.startY_=void 0,this.dragListenerKeys_.forEach(k),this.dragListenerKeys_.length=0}}setThumbPosition_(t){const e=this.getPositionForResolution_(t),i=this.element.firstElementChild;this.direction_==mT?i.style.left=this.widthLimit_*e+"px":i.style.top=this.heightLimit_*e+"px"}getRelativePosition_(t,e){let i;return i=this.direction_===mT?t/this.widthLimit_:e/this.heightLimit_,ii(i,0,1)}getResolutionForPosition_(t){return this.getMap().getView().getResolutionForValueFunction()(1-t)}getPositionForResolution_(t){return ii(1-this.getMap().getView().getValueForResolutionFunction()(t),0,1)}render(t){if(!t.frameState)return;if(!this.sliderInitialized_&&!this.initSlider_())return;const e=t.frameState.viewState.resolution;this.currentResolution_=e,this.setThumbPosition_(e)}},_T.control.ZoomToExtent=class extends qo{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target}),this.extent=t.extent?t.extent:null;const e=void 0!==t.className?t.className:"ol-zoom-extent",i=void 0!==t.label?t.label:"E",n=void 0!==t.tipLabel?t.tipLabel:"Fit to extent",r=document.createElement("button");r.setAttribute("type","button"),r.title=n,r.appendChild("string"==typeof i?document.createTextNode(i):i),r.addEventListener(T,this.handleClick_.bind(this),!1);const s=e+" "+"ol-unselectable "+Is,o=this.element;o.className=s,o.appendChild(r)}handleClick_(t){t.preventDefault(),this.handleZoomToExtent()}handleZoomToExtent(){const t=this.getMap().getView(),e=this.extent?this.extent:t.getProjection().getExtent();t.fitInternal(gr(e))}},_T.control.defaults={},_T.control.defaults.defaults=Qo,_T.coordinate={},_T.coordinate.add=mi,_T.coordinate.closestOnCircle=_i,_T.coordinate.closestOnSegment=yi,_T.coordinate.createStringXY=function(t){return function(e){return Ri(e,t)}},_T.coordinate.degreesToStringHDMS=xi,_T.coordinate.distance=Ci,_T.coordinate.equals=Si,_T.coordinate.format=vi,_T.coordinate.getWorldsAway=Ii,_T.coordinate.rotate=wi,_T.coordinate.scale=Ei,_T.coordinate.squaredDistance=Ti,_T.coordinate.squaredDistanceToSegment=bi,_T.coordinate.toStringHDMS=function(t,e){return t?xi("NS",t[1],e)+" "+xi("EW",t[0],e):""},_T.coordinate.toStringXY=Ri,_T.coordinate.wrapX=Pi,_T.css={},_T.css.CLASS_COLLAPSED=Ls,_T.css.CLASS_CONTROL=Is,_T.css.CLASS_HIDDEN=Cs,_T.css.CLASS_SELECTABLE=bs,_T.css.CLASS_UNSELECTABLE=Rs,_T.css.CLASS_UNSUPPORTED=Ps,_T.css.getFontParameters=As,_T.dom={},_T.dom.createCanvasContext2D=Dr,_T.dom.outerHeight=jr,_T.dom.outerWidth=Gr,_T.dom.releaseCanvas=kr,_T.dom.removeChildren=zr,_T.dom.removeNode=Ur,_T.dom.replaceChildren=Xr,_T.dom.replaceNode=Br,_T.easing={},_T.easing.easeIn=et,_T.easing.easeOut=it,_T.easing.inAndOut=nt,_T.easing.linear=rt,_T.easing.upAndDown=function(t){return t<.5?nt(2*t):1-nt(2*(t-.5))},_T.events={},_T.events.Event=i,_T.events.Event.preventDefault=function(t){t.preventDefault()},_T.events.Event.stopPropagation=n,_T.events.Target=v,_T.events.condition={},_T.events.condition.all=aa,_T.events.condition.altKeyOnly=la,_T.events.condition.altShiftKeysOnly=ha,_T.events.condition.always=da,_T.events.condition.click=function(t){return t.type==ao.CLICK},_T.events.condition.doubleClick=function(t){return t.type==ao.DBLCLICK},_T.events.condition.focus=ca,_T.events.condition.focusWithTabindex=ua,_T.events.condition.mouseActionButton=ga,_T.events.condition.mouseOnly=xa,_T.events.condition.never=fa,_T.events.condition.noModifierKeys=ma,_T.events.condition.penOnly=function(t){const e=t.originalEvent;return at(void 0!==e,56),"pen"===e.pointerType},_T.events.condition.platformModifierKeyOnly=function(t){const e=t.originalEvent;return!e.altKey&&(pt?e.metaKey:e.ctrlKey)&&!e.shiftKey},_T.events.condition.pointerMove=function(t){return"pointermove"==t.type},_T.events.condition.primaryAction=va,_T.events.condition.shiftKeyOnly=_a,_T.events.condition.singleClick=pa,_T.events.condition.targetNotEditable=ya,_T.events.condition.touchOnly=function(t){const e=t.originalEvent;return at(void 0!==e,56),"touch"===e.pointerType},_T.events.listen=N,_T.events.listenOnce=D,_T.events.unlistenByKey=k,_T.extent={},_T.extent.applyTransform=Re,_T.extent.approximatelyEquals=ie,_T.extent.boundingExtent=zt,_T.extent.buffer=Xt,_T.extent.clone=Vt,_T.extent.closestSquaredDistanceXY=Wt,_T.extent.containsCoordinate=Zt,_T.extent.containsExtent=Yt,_T.extent.containsXY=Kt,_T.extent.coordinateRelationship=qt,_T.extent.createEmpty=Ht,_T.extent.createOrUpdate=$t,_T.extent.createOrUpdateEmpty=Jt,_T.extent.createOrUpdateFromCoordinate=Qt,_T.extent.createOrUpdateFromCoordinates=function(t,e){return se(Jt(e),t)},_T.extent.createOrUpdateFromFlatCoordinates=te,_T.extent.createOrUpdateFromRings=function(t,e){return ae(Jt(e),t)},_T.extent.equals=ee,_T.extent.extend=ne,_T.extent.extendCoordinate=re,_T.extent.extendCoordinates=se,_T.extent.extendFlatCoordinates=oe,_T.extent.extendRings=ae,_T.extent.extendXY=le,_T.extent.forEachCorner=he,_T.extent.getArea=ce,_T.extent.getBottomLeft=ue,_T.extent.getBottomRight=de,_T.extent.getCenter=ge,_T.extent.getCorner=fe,_T.extent.getEnlargedArea=function(t,e){const i=Math.min(t[0],e[0]),n=Math.min(t[1],e[1]);return(Math.max(t[2],e[2])-i)*(Math.max(t[3],e[3])-n)},_T.extent.getForViewAndSize=pe,_T.extent.getHeight=_e,_T.extent.getIntersection=ye,_T.extent.getIntersectionArea=function(t,e){return ce(ye(t,e))},_T.extent.getMargin=function(t){return Se(t)+_e(t)},_T.extent.getRotatedViewport=me,_T.extent.getSize=function(t){return[t[2]-t[0],t[3]-t[1]]},_T.extent.getTopLeft=xe,_T.extent.getTopRight=ve,_T.extent.getWidth=Se,_T.extent.intersects=we,_T.extent.intersectsSegment=be,_T.extent.isEmpty=Ee,_T.extent.returnOrUpdate=Te,_T.extent.scaleFromCenter=Ce,_T.extent.wrapAndSliceX=Ie,_T.extent.wrapX=Pe,_T.featureloader={},_T.featureloader.loadFeaturesXhr=_l,_T.featureloader.setWithCredentials=function(t){ml=t},_T.featureloader.xhr=yl,_T.format={},_T.format.EsriJSON=class extends E_{constructor(t){t=t||{},super(),this.geometryName_=t.geometryName}readFeatureFromObject(t,e,i){const n=t,r=R_(n.geometry,e),s=new lt;if(this.geometryName_&&s.setGeometryName(this.geometryName_),s.setGeometry(r),n.attributes){s.setProperties(n.attributes,!0);const t=n.attributes[i];void 0!==t&&s.setId(t)}return s}readFeaturesFromObject(t,e){if(e=e||{},t.features){const i=[],n=t.features;for(let r=0,s=n.length;r0&&"string"==typeof this.imageInfo.profile[0]&&hc.test(this.imageInfo.profile[0]))return this.imageInfo.profile[0]}}getComplianceLevelFromProfile(t){const e=this.getComplianceLevelEntryFromProfile(t);if(void 0===e)return;const i=e.match(/level[0-2](?:\.json)?$/g);return Array.isArray(i)?i[0].replace(".json",""):void 0}getComplianceLevelSupportedFeatures(){if(void 0===this.imageInfo)return;const t=this.getImageApiVersion(),e=this.getComplianceLevelFromProfile(t);return void 0===e?ac.none.none:ac[t][e]}getTileSourceOptions(t){const e=t||{},i=this.getImageApiVersion();if(void 0===i)return;const n=void 0===i?void 0:uc[i](this);return void 0!==n?{url:n.url,version:i,size:[this.imageInfo.width,this.imageInfo.height],sizes:n.sizes,format:void 0!==e.format&&n.formats.includes(e.format)?e.format:void 0!==n.preferredFormat?n.preferredFormat:"jpg",supports:n.supports,quality:e.quality&&n.qualities.includes(e.quality)?e.quality:n.qualities.includes("native")?"native":"default",resolutions:Array.isArray(n.resolutions)?n.resolutions.sort((function(t,e){return e-t})):void 0,tileSize:n.tileSize}:void 0}},_T.format.JSONFeature=E_,_T.format.KML=class extends M_{constructor(t){super(),t=t||{},ux||($y=[255,255,255,1],nx=new rg({color:$y}),Jy=[20,2],Qy="pixels",tx="pixels",ex=[64,64],ix="https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",sx=new lg({anchor:Jy,anchorOrigin:"bottom-left",anchorXUnits:Qy,anchorYUnits:tx,crossOrigin:"anonymous",rotation:0,scale:dx(ex),size:ex,src:ix}),rx="NO_IMAGE",ax=new hg({color:$y,width:1}),ox=new hg({color:[51,51,51,1],width:2}),lx=new mg({font:"bold 16px Helvetica",fill:nx,stroke:ox,scale:.8}),hx=new cg({fill:nx,image:sx,text:lx,stroke:ax,zIndex:0}),ux=[hx]),this.dataProjection=Ui("EPSG:4326"),this.defaultStyle_=t.defaultStyle?t.defaultStyle:ux,this.extractStyles_=void 0===t.extractStyles||t.extractStyles,this.writeStyles_=void 0===t.writeStyles||t.writeStyles,this.sharedStyles_={},this.showPointNames_=void 0===t.showPointNames||t.showPointNames,this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:"anonymous",this.iconUrlFunction_=t.iconUrlFunction?t.iconUrlFunction:gx,this.supportedMediaTypes=["application/vnd.google-earth.kml+xml"]}readDocumentOrFolder_(t,e){const i=Lu([],Pu(Xy,{Document:yu(this.readDocumentOrFolder_,this),Folder:yu(this.readDocumentOrFolder_,this),Placemark:xu(this.readPlacemark_,this),Style:this.readSharedStyle_.bind(this),StyleMap:this.readSharedStyleMap_.bind(this)}),t,e,this);return i||void 0}readPlacemark_(t,e){const i=Lu({geometry:null},Wy,t,e,this);if(!i)return;const n=new lt,r=t.getAttribute("id");null!==r&&n.setId(r);const s=e[0],o=i.geometry;if(o&&Qp(o,!1,s),n.setGeometry(o),delete i.geometry,this.extractStyles_){const t=function(t,e,i,n,r){return function(s,o){let a=r,l="",h=[];if(a){const t=s.getGeometry();if(t)if(t instanceof Ip)h=t.getGeometriesArrayRecursive().filter((function(t){const e=t.getType();return"Point"===e||"MultiPoint"===e})),a=h.length>0;else{const e=t.getType();a="Point"===e||"MultiPoint"===e}}a&&(l=s.get("name"),a=a&&!!l,a&&/&[^&]+;/.test(l)&&(cx||(cx=document.createElement("textarea")),cx.innerHTML=l,l=cx.value));let c=i;if(t?c=t:e&&(c=fx(e,i,n)),a){const t=function(t,e){const i=[0,0];let n="start";const r=t.getImage();if(r){const t=r.getSize();if(t&&2==t.length){const e=r.getScaleArray(),s=r.getAnchor();i[0]=e[0]*(t[0]-s[0]),i[1]=e[1]*(t[1]/2-s[1]),n="left"}}let s=t.getText();s?(s=s.clone(),s.setFont(s.getFont()||lx.getFont()),s.setScale(s.getScale()||lx.getScale()),s.setFill(s.getFill()||lx.getFill()),s.setStroke(s.getStroke()||ox)):s=lx.clone();s.setText(e),s.setOffsetX(i[0]),s.setOffsetY(i[1]),s.setTextAlign(n);return new cg({image:r,text:s})}(c[0],l);if(h.length>0){t.setGeometry(new Ip(h));return[t,new cg({geometry:c[0].getGeometry(),image:null,fill:c[0].getFill(),stroke:c[0].getStroke(),text:null})].concat(c.slice(1))}return t}return c}}(i.Style,i.styleUrl,this.defaultStyle_,this.sharedStyles_,this.showPointNames_);n.setStyle(t)}return delete i.Style,n.setProperties(i,!0),n}readSharedStyle_(t,e){const i=t.getAttribute("id");if(null!==i){const n=Xx.call(this,t,e);if(n){let e,r=t.baseURI;if(r&&"about:blank"!=r||(r=window.location.href),r){e=new URL("#"+i,r).href}else e="#"+i;this.sharedStyles_[e]=n}}}readSharedStyleMap_(t,e){const i=t.getAttribute("id");if(null===i)return;const n=Sx.call(this,t,e);if(!n)return;let r,s=t.baseURI;if(s&&"about:blank"!=s||(s=window.location.href),s){r=new URL("#"+i,s).href}else r="#"+i;this.sharedStyles_[r]=n}readFeatureFromNode(t,e){if(!Xy.includes(t.namespaceURI))return null;const i=this.readPlacemark_(t,[this.getReadOptions(t,e)]);return i||null}readFeaturesFromNode(t,e){if(!Xy.includes(t.namespaceURI))return[];let i;const n=t.localName;if("Document"==n||"Folder"==n)return i=this.readDocumentOrFolder_(t,[this.getReadOptions(t,e)]),i||[];if("Placemark"==n){const i=this.readPlacemark_(t,[this.getReadOptions(t,e)]);return i?[i]:[]}if("kml"==n){i=[];for(let n=t.firstElementChild;n;n=n.nextElementSibling){const t=this.readFeaturesFromNode(n,e);t&&c(i,t)}return i}return[]}readName(t){if(t){if("string"==typeof t){const e=_u(t);return this.readNameFromDocument(e)}return pu(t)?this.readNameFromDocument(t):this.readNameFromNode(t)}}readNameFromDocument(t){for(let e=t.firstChild;e;e=e.nextSibling)if(e.nodeType==Node.ELEMENT_NODE){const t=this.readNameFromNode(e);if(t)return t}}readNameFromNode(t){for(let e=t.firstElementChild;e;e=e.nextElementSibling)if(Xy.includes(e.namespaceURI)&&"name"==e.localName)return z_(e);for(let e=t.firstElementChild;e;e=e.nextElementSibling){const t=e.localName;if(Xy.includes(e.namespaceURI)&&("Document"==t||"Folder"==t||"Placemark"==t||"kml"==t)){const t=this.readNameFromNode(e);if(t)return t}}}readNetworkLinks(t){const e=[];if("string"==typeof t){const i=_u(t);c(e,this.readNetworkLinksFromDocument(i))}else pu(t)?c(e,this.readNetworkLinksFromDocument(t)):c(e,this.readNetworkLinksFromNode(t));return e}readNetworkLinksFromDocument(t){const e=[];for(let i=t.firstChild;i;i=i.nextSibling)i.nodeType==Node.ELEMENT_NODE&&c(e,this.readNetworkLinksFromNode(i));return e}readNetworkLinksFromNode(t){const e=[];for(let i=t.firstElementChild;i;i=i.nextElementSibling)if(Xy.includes(i.namespaceURI)&&"NetworkLink"==i.localName){const t=Lu({},Zy,i,[]);e.push(t)}for(let i=t.firstElementChild;i;i=i.nextElementSibling){const t=i.localName;!Xy.includes(i.namespaceURI)||"Document"!=t&&"Folder"!=t&&"kml"!=t||c(e,this.readNetworkLinksFromNode(i))}return e}readRegion(t){const e=[];if("string"==typeof t){const i=_u(t);c(e,this.readRegionFromDocument(i))}else pu(t)?c(e,this.readRegionFromDocument(t)):c(e,this.readRegionFromNode(t));return e}readRegionFromDocument(t){const e=[];for(let i=t.firstChild;i;i=i.nextSibling)i.nodeType==Node.ELEMENT_NODE&&c(e,this.readRegionFromNode(i));return e}readRegionFromNode(t){const e=[];for(let i=t.firstElementChild;i;i=i.nextElementSibling)if(Xy.includes(i.namespaceURI)&&"Region"==i.localName){const t=Lu({},Ky,i,[]);e.push(t)}for(let i=t.firstElementChild;i;i=i.nextElementSibling){const t=i.localName;!Xy.includes(i.namespaceURI)||"Document"!=t&&"Folder"!=t&&"kml"!=t||c(e,this.readRegionFromNode(i))}return e}writeFeaturesNode(t,e){e=this.adaptOptions(e);const i=du(Xy[4],"kml"),n="http://www.w3.org/2000/xmlns/";i.setAttributeNS(n,"xmlns:gx",zy[0]),i.setAttributeNS(n,"xmlns:xsi",uu),i.setAttributeNS(uu,"xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");const r={node:i},s={};t.length>1?s.Document=t:1==t.length&&(s.Placemark=t[0]);const o=qy[i.namespaceURI],a=Ru(s,o);return Fu(r,Hy,bu,a,[e],o,this),i}},_T.format.KML.getDefaultFillStyle=function(){return nx},_T.format.KML.getDefaultImageStyle=function(){return sx},_T.format.KML.getDefaultStrokeStyle=function(){return ax},_T.format.KML.getDefaultStyle=function(){return hx},_T.format.KML.getDefaultStyleArray=function(){return ux},_T.format.KML.getDefaultTextStyle=function(){return lx},_T.format.KML.readFlatCoordinates=mx,_T.format.MVT=Em,_T.format.OSMXML=class extends M_{constructor(){super(),this.dataProjection=Ui("EPSG:4326")}readFeaturesFromNode(t,e){if(e=this.getReadOptions(t,e),"osm"==t.localName){const i=Lu({nodes:{},ways:[],features:[]},Xv,t,[e]);for(let t=0;t{const r=this.combineBboxAndFilter(n.geometryName,n.bbox,t.srsName,t.filter);Object.assign(i,{geometryName:n.geometryName,filter:r}),Bw(e,[n.name],[i])}));return e}combineBboxAndFilter(t,e,i,n){const r=$S(t,e,i);return n?HS(n,r):r}writeTransaction(t,e,i,n){const r=[],s=n.version?n.version:this.version_,o=du(ow[s],"Transaction");let a;o.setAttribute("service","WFS"),o.setAttribute("version",s),n&&(a=n.gmlOptions?n.gmlOptions:{},n.handle&&o.setAttribute("handle",n.handle)),o.setAttributeNS(uu,"xsi:schemaLocation",lw[s]);const l=function(t,e,i,n){const r=n.featurePrefix?n.featurePrefix:nw;let s;"1.0.0"===i?s=2:"1.1.0"===i?s=3:"2.0.0"===i&&(s=3.2);return Object.assign({node:t},{version:i,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:r,gmlVersion:s,hasZ:n.hasZ,srsName:n.srsName},e)}(o,a,s,n);return t&&cw("Insert",t,r,l),e&&cw("Update",e,r,l),i&&cw("Delete",i,r,l),n.nativeElements&&cw("Native",n.nativeElements,r,l),o}readProjectionFromDocument(t){for(let e=t.firstChild;e;e=e.nextSibling)if(e.nodeType==Node.ELEMENT_NODE)return this.readProjectionFromNode(e);return null}readProjectionFromNode(t){if(t.firstElementChild&&t.firstElementChild.firstElementChild)for(let e=(t=t.firstElementChild.firstElementChild).firstElementChild;e;e=e.nextElementSibling)if(0!==e.childNodes.length&&(1!==e.childNodes.length||3!==e.firstChild.nodeType)){const t=[{}];return this.gmlFormat_.readGeometryElement(e,t),Ui(t.pop().srsName)}return null}},_T.format.WFS.writeFilter=function(t,e){const i=du(Uw(e=e||"1.1.0"),"Filter"),n={node:i};return Object.assign(n,{version:e,filter:t}),Cw(i,t,[n]),i},_T.format.WKB=class extends Jp{constructor(t){super(),t=t||{},this.splitCollection=Boolean(t.splitCollection),this.viewCache_=null,this.hex_=!1!==t.hex,this.littleEndian_=!1!==t.littleEndian,this.ewkb_=!1!==t.ewkb,this.layout_=t.geometryLayout,this.nodataZ_=t.nodataZ||0,this.nodataM_=t.nodataM||0,this.srid_=t.srid}getType(){return this.hex_?"text":"arraybuffer"}readFeature(t,e){return new lt({geometry:this.readGeometry(t,e)})}readFeatures(t,e){let i=[];const n=this.readGeometry(t,e);return i=this.splitCollection&&n instanceof Ip?n.getGeometriesArray():[n],i.map((t=>new lt({geometry:t})))}readGeometry(t,e){const i=tE(t);if(!i)return null;const n=new Jw(i).readGeometry();return this.viewCache_=i,e=this.getReadOptions(t,e),this.viewCache_=null,Qp(n,!1,e)}readProjection(t){const e=this.viewCache_||tE(t);if(!e)return;const i=new Jw(e);return i.readWkbHeader(),i.getSrid()&&Ui("EPSG:"+i.getSrid())||void 0}writeFeature(t,e){return this.writeGeometry(t.getGeometry(),e)}writeFeatures(t,e){return this.writeGeometry(new Ip(t.map((t=>t.getGeometry()))),e)}writeGeometry(t,e){e=this.adaptOptions(e);const i=new Qw({layout:this.layout_,littleEndian:this.littleEndian_,ewkb:this.ewkb_,nodata:{Z:this.nodataZ_,M:this.nodataM_}});let n=Number.isInteger(this.srid_)?Number(this.srid_):null;if(!1!==this.srid_&&!Number.isInteger(this.srid_)){const t=e.dataProjection&&Ui(e.dataProjection);if(t){const e=t.getCode();e.startsWith("EPSG:")&&(n=Number(e.substring(5)))}}i.writeGeometry(Qp(t,!0,e),n);const r=i.getBuffer();return this.hex_?function(t){const e=new Uint8Array(t);return Array.from(e.values()).map((t=>(t<16?"0":"")+Number(t).toString(16).toUpperCase())).join("")}(r):r}},_T.format.WKT=class extends Dy{constructor(t){super(),t=t||{},this.splitCollection_=void 0!==t.splitCollection&&t.splitCollection}parse_(t){const e=new uE(t);return new dE(e).parse()}readFeatureFromText(t,e){const i=this.readGeometryFromText(t,e),n=new lt;return n.setGeometry(i),n}readFeaturesFromText(t,e){let i=[];const n=this.readGeometryFromText(t,e);i=this.splitCollection_&&"GeometryCollection"==n.getType()?n.getGeometriesArray():[n];const r=[];for(let t=0,e=i.length;t3&&!!Un(t,e,i,n)},_T.geom.flat.transform={},_T.geom.flat.transform.rotate=dn,_T.geom.flat.transform.scale=gn,_T.geom.flat.transform.transform2D=un,_T.geom.flat.transform.translate=fn,_T.has={},_T.has.DEVICE_PIXEL_RATIO=mt,_T.has.FIREFOX=ut,_T.has.IMAGE_DECODE=yt,_T.has.MAC=pt,_T.has.PASSIVE_EVENT_LISTENERS=xt,_T.has.SAFARI=dt,_T.has.SAFARI_BUG_237906=gt,_T.has.WEBKIT=ft,_T.has.WORKER_OFFSCREEN_CANVAS=_t,_T.interaction={},_T.interaction.DoubleClickZoom=ra,_T.interaction.DragAndDrop=class extends ea{constructor(t){t=t||{},super({handleEvent:g}),this.on,this.once,this.un,this.readAsBuffer_=!1,this.formats_=[];const e=t.formatConstructors?t.formatConstructors:[];for(let t=0,i=e.length;t0){this.source_&&(this.source_.clear(),this.source_.addFeatures(l)),this.dispatchEvent(new Am(Fm,t,l,s));break}}}registerListeners_(){const t=this.getMap();if(t){const e=this.target?this.target:t.getViewport();this.dropListenKeys_=[N(e,P,this.handleDrop,this),N(e,b,this.handleStop,this),N(e,R,this.handleStop,this),N(e,P,this.handleStop,this)]}}setActive(t){!this.getActive()&&t&&this.registerListeners_(),this.getActive()&&!t&&this.unregisterListeners_(),super.setActive(t)}setMap(t){this.unregisterListeners_(),super.setMap(t),this.getActive()&&this.registerListeners_()}tryReadFeatures_(t,e,i){try{return t.readFeatures(e,i)}catch(t){return null}}unregisterListeners_(){this.dropListenKeys_&&(this.dropListenKeys_.forEach(k),this.dropListenKeys_=null)}handleDrop(t){const e=t.dataTransfer.files;for(let t=0,i=e.length;t1?1:-1;return e.endInteraction(this.duration_,i),this.lastScaleDelta_=0,!1}handleDownEvent(t){return!!xa(t)&&(!!this.condition_(t)&&(t.map.getView().beginInteraction(),this.lastAngle_=void 0,this.lastMagnitude_=void 0,!0))}},_T.interaction.DragZoom=La,_T.interaction.Draw=class extends sa{constructor(t){const e=t;e.stopDown||(e.stopDown=f),super(e),this.on,this.once,this.un,this.shouldHandle_=!1,this.downPx_=null,this.downTimeout_,this.lastDragTime_,this.pointerType_,this.freehand_=!1,this.source_=t.source?t.source:null,this.features_=t.features?t.features:null,this.snapTolerance_=t.snapTolerance?t.snapTolerance:12,this.type_=t.type,this.mode_=function(t){switch(t){case"Point":case"MultiPoint":return"Point";case"LineString":case"MultiLineString":return"LineString";case"Polygon":case"MultiPolygon":return"Polygon";case"Circle":return"Circle";default:throw new Error("Invalid type: "+t)}}(this.type_),this.stopClick_=!!t.stopClick,this.minPoints_=t.minPoints?t.minPoints:"Polygon"===this.mode_?3:2,this.maxPoints_="Circle"===this.mode_?2:t.maxPoints?t.maxPoints:1/0,this.finishCondition_=t.finishCondition?t.finishCondition:g,this.geometryLayout_=t.geometryLayout?t.geometryLayout:"XY";let i=t.geometryFunction;if(!i){const t=this.mode_;if("Circle"===t)i=function(t,e,i){const n=e||new Pp([NaN,NaN]),r=rn(t[0],i),s=Ti(r,rn(t[t.length-1],i));n.setCenterAndRadius(r,Math.sqrt(s),this.geometryLayout_);const o=en();return o&&n.transform(i,o),n};else{let e;"Point"===t?e=Wn:"LineString"===t?e=Op:"Polygon"===t&&(e=ur),i=function(i,n,r){return n?"Polygon"===t?i[0].length?n.setCoordinates([i[0].concat([i[0][0]])],this.geometryLayout_):n.setCoordinates([],this.geometryLayout_):n.setCoordinates(i,this.geometryLayout_):n=new e(i,this.geometryLayout_),n}}}this.geometryFunction_=i,this.dragVertexDelay_=void 0!==t.dragVertexDelay?t.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=t.clickTolerance?t.clickTolerance*t.clickTolerance:36,this.overlay_=new zp({source:new zh({useSpatialIndex:!1,wrapX:!!t.wrapX&&t.wrapX}),style:t.style?t.style:Ym(),updateWhileInteracting:!0}),this.geometryName_=t.geometryName,this.condition_=t.condition?t.condition:ma,this.freehandCondition_,t.freehand?this.freehandCondition_=da:this.freehandCondition_=t.freehandCondition?t.freehandCondition:_a,this.traceCondition_,this.setTrace(t.trace||!1),this.traceState_={active:!1},this.traceSource_=t.traceSource||t.source||null,this.addChangeListener(ta,this.updateState_)}setTrace(t){let e;e=t?!0===t?da:t:fa,this.traceCondition_=e}setMap(t){super.setMap(t),this.updateState_()}getOverlay(){return this.overlay_}handleEvent(t){t.originalEvent.type===E&&t.originalEvent.preventDefault(),this.freehand_="Point"!==this.mode_&&this.freehandCondition_(t);let e=t.type===ao.POINTERMOVE,i=!0;if(!this.freehand_&&this.lastDragTime_&&t.type===ao.POINTERDRAG){Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=t.pixel,this.shouldHandle_=!this.freehand_,e=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0)}return this.freehand_&&t.type===ao.POINTERDRAG&&null!==this.sketchFeature_?(this.addToDrawing_(t.coordinate),i=!1):this.freehand_&&t.type===ao.POINTERDOWN?i=!1:e&&this.getPointerCount()<2?(i=t.type===ao.POINTERMOVE,i&&this.freehand_?(this.handlePointerMove_(t),this.shouldHandle_&&t.originalEvent.preventDefault()):("mouse"===t.originalEvent.pointerType||t.type===ao.POINTERDRAG&&void 0===this.downTimeout_)&&this.handlePointerMove_(t)):t.type===ao.DBLCLICK&&(i=!1),super.handleEvent(t)&&i}handleDownEvent(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t.coordinate),!0):this.condition_(t)?(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new oo(ao.POINTERMOVE,t.map,t.originalEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0):(this.lastDragTime_=void 0,!1)}deactivateTrace_(){this.traceState_={active:!1}}toggleTraceState_(t){if(!this.traceSource_||!this.traceCondition_(t))return;if(this.traceState_.active)return void this.deactivateTrace_();const e=this.getMap(),i=zt([e.getCoordinateFromPixel([t.pixel[0]-this.snapTolerance_,t.pixel[1]+this.snapTolerance_]),e.getCoordinateFromPixel([t.pixel[0]+this.snapTolerance_,t.pixel[1]-this.snapTolerance_])]),n=this.traceSource_.getFeaturesInExtent(i);if(0===n.length)return;const r=function(t,e){const i=[];for(let n=0;nt.endIndex||!i&&et.endIndex)&&this.removeTracedCoordinates_(e,t.endIndex):(this.removeTracedCoordinates_(t.startIndex,t.endIndex),this.addTracedCoordinates_(t,t.startIndex,e))}removeTracedCoordinates_(t,e){if(t===e)return;let i=0;if(t0&&this.removeLastPoints_(i)}addTracedCoordinates_(t,e,i){if(e===i)return;const n=[];if(e=s;--e)n.push(jm(t.coordinates,e))}n.length&&this.appendCoordinates(n)}updateTrace_(t){const e=this.traceState_;if(!e.active)return;if(-1===e.targetIndex&&Ci(e.startPx,t.pixel)i.startIndex?hi.startIndex&&(h-=n.length)),l=h,a=t)}const h=e.targets[a];let c=h.ring;if(e.targetIndex===a&&c){const t=Zm(h.coordinates,l);Ci(i.getPixelFromCoordinate(t),e.startPx)>n&&(c=!1)}if(c){const t=h.coordinates,e=t.length,i=h.startIndex,n=l;if(ithis.squaredClickTolerance_:s<=this.squaredClickTolerance_,!this.shouldHandle_)return}this.finishCoordinate_?(this.updateTrace_(t),this.modifyDrawing_(t.coordinate)):this.createOrUpdateSketchPoint_(t.coordinate.slice())}atFinish_(t,e){let i=!1;if(this.sketchFeature_){let n=!1,r=[this.finishCoordinate_];const s=this.mode_;if("Point"===s)i=!0;else if("Circle"===s)i=2===this.sketchCoords_.length;else if("LineString"===s)n=!e&&this.sketchCoords_.length>this.minPoints_;else if("Polygon"===s){const t=this.sketchCoords_;n=t[0].length>this.minPoints_,r=[t[0][0],t[0][t[0].length-2]],r=e?[t[0][0]]:[t[0][0],t[0][t[0].length-2]]}if(n){const e=this.getMap();for(let n=0,s=r.length;n=this.maxPoints_&&(this.freehand_?r.pop():n=!0),r.push(t.slice()),this.geometryFunction_(r,e,i)):"Polygon"===s&&(r=this.sketchCoords_[0],r.length>=this.maxPoints_&&(this.freehand_?r.pop():n=!0),r.push(t.slice()),n&&(this.finishCoordinate_=r[0]),this.geometryFunction_(this.sketchCoords_,e,i)),this.createOrUpdateSketchPoint_(t.slice()),this.updateSketchFeatures_(),n&&this.finishDrawing()}removeLastPoints_(t){if(!this.sketchFeature_)return;const e=this.sketchFeature_.getGeometry(),i=this.getMap().getView().getProjection(),n=this.mode_;for(let r=0;r=2){this.finishCoordinate_=t[t.length-2].slice();const e=this.finishCoordinate_.slice();t[t.length-1]=e,this.createOrUpdateSketchPoint_(e)}this.geometryFunction_(t,e,i),"Polygon"===e.getType()&&this.sketchLine_&&this.createOrUpdateCustomSketchLine_(e)}else if("Polygon"===n){t=this.sketchCoords_[0],t.splice(-2,1);const n=this.sketchLine_.getGeometry();if(t.length>=2){const e=t[t.length-2].slice();t[t.length-1]=e,this.createOrUpdateSketchPoint_(e)}n.setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e,i)}if(1===t.length){this.abortDrawing();break}}this.updateSketchFeatures_()}removeLastPoint(){this.removeLastPoints_(1)}finishDrawing(){const t=this.abortDrawing_();if(!t)return;let e=this.sketchCoords_;const i=t.getGeometry(),n=this.getMap().getView().getProjection();"LineString"===this.mode_?(e.pop(),this.geometryFunction_(e,i,n)):"Polygon"===this.mode_&&(e[0].pop(),this.geometryFunction_(e,i,n),e=i.getCoordinates()),"MultiPoint"===this.type_?t.setGeometry(new Dp([e])):"MultiLineString"===this.type_?t.setGeometry(new Np([e])):"MultiPolygon"===this.type_&&t.setGeometry(new Gp([e])),this.dispatchEvent(new km(Nm,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}abortDrawing_(){this.finishCoordinate_=null;const t=this.sketchFeature_;return this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0),this.deactivateTrace_(),t}abortDrawing(){const t=this.abortDrawing_();t&&this.dispatchEvent(new km(Dm,t))}appendCoordinates(t){const e=this.mode_,i=!this.sketchFeature_;let n;if(i&&this.startDrawing_(t[0]),"LineString"===e||"Circle"===e)n=this.sketchCoords_;else{if("Polygon"!==e)return;n=this.sketchCoords_&&this.sketchCoords_.length?this.sketchCoords_[0]:[]}i&&n.shift(),n.pop();for(let e=0;er?o[1]:o[0]),a}}return null}handlePointerMove_(t){const e=t.pixel,i=t.map;let n=this.snapToVertex_(e,i);n||(n=i.getCoordinateFromPixelInternal(e)),this.createOrUpdatePointerFeature_(n)}createOrUpdateExtentFeature_(t){let e=this.extentFeature_;return e?t?e.setGeometry(gr(t)):e.setGeometry(void 0):(e=new lt(t?gr(t):{}),this.extentFeature_=e,this.extentOverlay_.getSource().addFeature(e)),e}createOrUpdatePointerFeature_(t){let e=this.vertexFeature_;if(e){e.getGeometry().setCoordinates(t)}else e=new lt(new Wn(t)),this.vertexFeature_=e,this.vertexOverlay_.getSource().addFeature(e);return e}handleEvent(t){return!t.originalEvent||!this.condition_(t)||(t.type!=ao.POINTERMOVE||this.handlingDownUpSequence||this.handlePointerMove_(t),super.handleEvent(t),!1)}handleDownEvent(t){const e=t.pixel,i=t.map,n=this.getExtentInternal();let r=this.snapToVertex_(e,i);const s=function(t){let e=null,i=null;return t[0]==n[0]?e=n[2]:t[0]==n[2]&&(e=n[0]),t[1]==n[1]?i=n[3]:t[1]==n[3]&&(i=n[1]),null!==e&&null!==i?[e,i]:null};if(r&&n){const t=r[0]==n[0]||r[0]==n[2]?r[0]:null,e=r[1]==n[1]||r[1]==n[3]?r[1]:null;null!==t&&null!==e?this.pointerHandler_=Jm(s(r)):null!==t?this.pointerHandler_=Qm(s([t,n[1]]),s([t,n[3]])):null!==e&&(this.pointerHandler_=Qm(s([n[0],e]),s([n[2],e])))}else r=i.getCoordinateFromPixelInternal(e),this.setExtent([r[0],r[1],r[0],r[1]]),this.pointerHandler_=Jm(r);return!0}handleDragEvent(t){if(this.pointerHandler_){const e=t.coordinate;this.setExtent(this.pointerHandler_(e)),this.createOrUpdatePointerFeature_(e)}}handleUpEvent(t){this.pointerHandler_=null;const e=this.getExtentInternal();return e&&0!==ce(e)||this.setExtent(null),!1}setMap(t){this.extentOverlay_.setMap(t),this.vertexOverlay_.setMap(t),super.setMap(t)}getExtent(){return sn(this.getExtentInternal(),this.getMap().getView().getProjection())}getExtentInternal(){return this.extent_}setExtent(t){this.extent_=t||null,this.createOrUpdateExtentFeature_(t),this.dispatchEvent(new qm(this.extent_))}},_T.interaction.Extent.ExtentEvent=qm,_T.interaction.Interaction=ea,_T.interaction.Interaction.pan=ia,_T.interaction.Interaction.zoomByDelta=na,_T.interaction.KeyboardPan=Na,_T.interaction.KeyboardZoom=Da,_T.interaction.Link=class extends ea{constructor(t){let e;super(),e=!0===(t=Object.assign({animate:!0,replace:!1,prefix:""},t||{})).animate?{duration:250}:t.animate?t.animate:null,this.animationOptions_=e,this.replace_=t.replace,this.prefix_=t.prefix,this.listenerKeys_=[],this.initial_=!0,this.updateState_=this.updateState_.bind(this)}getParamName_(t){return this.prefix_?this.prefix_+t:t}get_(t,e){return t.get(this.getParamName_(e))}set_(t,e,i){t.set(this.getParamName_(e),i)}delete_(t,e){t.delete(this.getParamName_(e))}setMap(t){const e=this.getMap();super.setMap(t),t!==e&&(e&&this.unregisterListeners_(e),t&&(this.initial_=!0,this.updateState_(),this.registerListeners_(t)))}registerListeners_(t){this.listenerKeys_.push(N(t,mo,this.updateUrl_,this),N(t.getLayerGroup(),S,this.updateUrl_,this),N(t,"change:layergroup",this.handleChangeLayerGroup_,this)),this.replace_||addEventListener("popstate",this.updateState_)}unregisterListeners_(t){for(let t=0,e=this.listenerKeys_.length;t=0;--t){const n=i[t];for(let t=this.dragSegments_.length-1;t>=0;--t)this.dragSegments_[t][0]===n&&this.dragSegments_.splice(t,1);e.remove(n)}}setActive(t){this.vertexFeature_&&!t&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),super.setActive(t)}setMap(t){this.overlay_.setMap(t),super.setMap(t)}getOverlay(){return this.overlay_}handleSourceAdd_(t){t.feature&&this.features_.push(t.feature)}handleSourceRemove_(t){t.feature&&this.features_.remove(t.feature)}handleFeatureAdd_(t){this.addFeature_(t.element)}handleFeatureChange_(t){if(!this.changingFeature_){const e=t.target;this.removeFeature_(e),this.addFeature_(e)}}handleFeatureRemove_(t){this.removeFeature_(t.element)}writePointGeometry_(t,e){const i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)}writeMultiPointGeometry_(t,e){const i=e.getCoordinates();for(let n=0,r=i.length;n=0;--t)this.insertVertex_(r[t],s)}return!!this.vertexFeature_}handleUpEvent(t){for(let e=this.dragSegments_.length-1;e>=0;--e){const i=this.dragSegments_[e][0],n=i.geometry;if("Circle"===n.getType()){const e=n.getCenter(),r=i.featureSegments[0],s=i.featureSegments[1];r.segment[0]=e,r.segment[1]=e,s.segment[0]=e,s.segment[1]=e,this.rBush_.update(Qt(e),r);let o=n;const a=en();if(a){const e=t.map.getView().getProjection();o=o.clone().transform(a,e),o=fr(o).transform(e,a)}this.rBush_.update(o.getExtent(),s)}else this.rBush_.update(zt(i.segment),i)}return this.featuresBeingModified_&&(this.dispatchEvent(new a_(o_,this.featuresBeingModified_,t)),this.featuresBeingModified_=null),!1}handlePointerMove_(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map,t.coordinate)}handlePointerAtPixel_(t,e,i){const n=i||e.getCoordinateFromPixel(t),r=e.getView().getProjection(),s=function(t,e){return h_(n,t,r)-h_(n,e,r)};let o,a;if(this.hitDetection_){const i="object"==typeof this.hitDetection_?t=>t===this.hitDetection_:void 0;e.forEachFeatureAtPixel(t,((t,e,i)=>{if("Point"===(i=i||t.getGeometry()).getType()&&this.features_.getArray().includes(t)){a=i;const e=i.getFlatCoordinates().slice(0,2);o=[{feature:t,geometry:i,segment:[e,e]}]}return!0}),{layerFilter:i})}if(!o){const t=sn(Xt(on(Qt(n,n_),r),e.getView().getResolution()*this.pixelTolerance_,n_),r);o=this.rBush_.getInExtent(t)}if(o&&o.length>0){const i=o.sort(s)[0],l=i.segment;let h=c_(n,i,r);const c=e.getPixelFromCoordinate(h);let u=Ci(t,c);if(a||u<=this.pixelTolerance_){const t={};if(t[z(l)]=!0,this.snapToPointer_||(this.delta_[0]=h[0]-n[0],this.delta_[1]=h[1]-n[1]),"Circle"===i.geometry.getType()&&1===i.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(h,[i.feature],[i.geometry]);else{const n=e.getPixelFromCoordinate(l[0]),r=e.getPixelFromCoordinate(l[1]),s=Ti(c,n),a=Ti(c,r);u=Math.sqrt(Math.min(s,a)),this.snappedToVertex_=u<=this.pixelTolerance_,this.snappedToVertex_&&(h=s>a?l[1]:l[0]),this.createOrUpdateVertexFeature_(h,[i.feature],[i.geometry]);const d={};d[z(i.geometry)]=!0;for(let e=1,i=o.length;e=0;--o)r=t[o],u=r[0],d=z(u.feature),u.depth&&(d+="-"+u.depth.join("-")),d in e||(e[d]={}),0===r[1]?(e[d].right=u,e[d].index=u.index):1==r[1]&&(e[d].left=u,e[d].index=u.index+1);for(d in e){switch(c=e[d].right,l=e[d].left,a=e[d].index,h=a-1,u=void 0!==l?l:c,h<0&&(h=0),s=u.geometry,n=s.getCoordinates(),i=n,g=!1,s.getType()){case"MultiLineString":n[u.depth[0]].length>2&&(n[u.depth[0]].splice(a,1),g=!0);break;case"LineString":n.length>2&&(n.splice(a,1),g=!0);break;case"MultiPolygon":i=i[u.depth[1]];case"Polygon":i=i[u.depth[0]],i.length>4&&(a==i.length-1&&(a=0),i.splice(a,1),g=!0,0===a&&(i.pop(),i.push(i[0]),h=i.length-1))}if(g){this.setGeometryCoordinates_(s,n);const e=[];if(void 0!==l&&(this.rBush_.remove(l),e.push(l.segment[0])),void 0!==c&&(this.rBush_.remove(c),e.push(c.segment[1])),void 0!==l&&void 0!==c){const t={depth:u.depth,feature:u.feature,geometry:u.geometry,index:h,segment:e};this.rBush_.insert(zt(t.segment),t)}this.updateSegmentIndices_(s,a,u.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.length=0}}return g}setGeometryCoordinates_(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1}updateSegmentIndices_(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||u(r.depth,i))&&r.index>e&&(r.index+=n)}))}},_T.interaction.Modify.ModifyEvent=a_,_T.interaction.MouseWheelZoom=ka,_T.interaction.PinchRotate=Ga,_T.interaction.PinchZoom=ja,_T.interaction.Pointer=sa,_T.interaction.Pointer.centroid=oa,_T.interaction.Select=p_,_T.interaction.Select.SelectEvent=g_,_T.interaction.Snap=class extends sa{constructor(t){const e=t=t||{};e.handleDownEvent||(e.handleDownEvent=g),e.stopDown||(e.stopDown=f),super(e),this.source_=t.source?t.source:null,this.vertex_=void 0===t.vertex||t.vertex,this.edge_=void 0===t.edge||t.edge,this.features_=t.features?t.features:null,this.featuresListenerKeys_=[],this.featureChangeListenerKeys_={},this.indexedFeaturesExtents_={},this.pendingFeatures_={},this.pixelTolerance_=void 0!==t.pixelTolerance?t.pixelTolerance:10,this.rBush_=new Ah,this.GEOMETRY_SEGMENTERS_={Point:this.segmentPointGeometry_.bind(this),LineString:this.segmentLineStringGeometry_.bind(this),LinearRing:this.segmentLineStringGeometry_.bind(this),Polygon:this.segmentPolygonGeometry_.bind(this),MultiPoint:this.segmentMultiPointGeometry_.bind(this),MultiLineString:this.segmentMultiLineStringGeometry_.bind(this),MultiPolygon:this.segmentMultiPolygonGeometry_.bind(this),GeometryCollection:this.segmentGeometryCollectionGeometry_.bind(this),Circle:this.segmentCircleGeometry_.bind(this)}}addFeature(t,e){e=void 0===e||e;const i=z(t),n=t.getGeometry();if(n){const e=this.GEOMETRY_SEGMENTERS_[n.getType()];if(e){this.indexedFeaturesExtents_[i]=n.getExtent([1/0,1/0,-1/0,-1/0]);const r=[];if(e(r,n),1===r.length)this.rBush_.insert(zt(r[0]),{feature:t,segment:r[0]});else if(r.length>1){const e=r.map((t=>zt(t))),i=r.map((e=>({feature:t,segment:e})));this.rBush_.load(e,i)}}}e&&(this.featureChangeListenerKeys_[i]=N(t,S,this.handleFeatureChange_,this))}forEachFeatureAdd_(t){this.addFeature(t)}forEachFeatureRemove_(t){this.removeFeature(t)}getFeatures_(){let t;return this.features_?t=this.features_:this.source_&&(t=this.source_.getFeatures()),t}handleEvent(t){const e=this.snapTo(t.pixel,t.coordinate,t.map);return e&&(t.coordinate=e.vertex.slice(0,2),t.pixel=e.vertexPixel),super.handleEvent(t)}handleFeatureAdd_(t){const e=m_(t);this.addFeature(e)}handleFeatureRemove_(t){const e=m_(t);this.removeFeature(e)}handleFeatureChange_(t){const e=t.target;if(this.handlingDownUpSequence){const t=z(e);t in this.pendingFeatures_||(this.pendingFeatures_[t]=e)}else this.updateFeature_(e)}handleUpEvent(t){const e=Object.values(this.pendingFeatures_);return e.length&&(e.forEach(this.updateFeature_.bind(this)),this.pendingFeatures_={}),!1}removeFeature(t,e){const i=void 0===e||e,n=z(t),r=this.indexedFeaturesExtents_[n];if(r){const e=this.rBush_,i=[];e.forEachInExtent(r,(function(e){t===e.feature&&i.push(e)}));for(let t=i.length-1;t>=0;--t)e.remove(i[t])}i&&(k(this.featureChangeListenerKeys_[n]),delete this.featureChangeListenerKeys_[n])}setMap(t){const e=this.getMap(),i=this.featuresListenerKeys_,n=this.getFeatures_();e&&(i.forEach(k),i.length=0,n.forEach(this.forEachFeatureRemove_.bind(this))),super.setMap(t),t&&(this.features_?i.push(N(this.features_,W,this.handleFeatureAdd_,this),N(this.features_,Z,this.handleFeatureRemove_,this)):this.source_&&i.push(N(this.source_,Oh,this.handleFeatureAdd_,this),N(this.source_,kh,this.handleFeatureRemove_,this)),n.forEach(this.forEachFeatureAdd_.bind(this)))}snapTo(t,e,i){const n=zt([i.getCoordinateFromPixel([t[0]-this.pixelTolerance_,t[1]+this.pixelTolerance_]),i.getCoordinateFromPixel([t[0]+this.pixelTolerance_,t[1]-this.pixelTolerance_])]),r=this.rBush_.getInExtent(n),s=r.length;if(0===s)return null;const o=i.getView().getProjection(),a=rn(e,o);let l,h=1/0;const c=this.pixelTolerance_*this.pixelTolerance_,u=()=>{if(l){const e=i.getPixelFromCoordinate(l);if(Ti(t,e)<=c)return{vertex:l,vertexPixel:[Math.round(e[0]),Math.round(e[1])]}}return null};if(this.vertex_){for(let t=0;t{const e=rn(t,o),i=Ti(a,e);i{t.push([e])}))}segmentMultiPolygonGeometry_(t,e){const i=e.getCoordinates();for(let e=0,n=i.length;ethis.featurePool_.length;)a=new lt,this.featurePool_.push(a);const h=n.getFeaturesCollection();h.clear();let c,u,d=0;for(c=0,u=this.meridians_.length;cMath.PI/2}const d=Al(t);for(let t=a;t<=l;++t){let i,n,c,g,f=this.meridians_.length+this.parallels_.length;if(this.meridiansLabels_)for(n=0,c=this.meridiansLabels_.length;n=a?(t[0]=o[0],t[2]=o[2]):s=!0);const l=[ii(e[0],this.minX_,this.maxX_),ii(e[1],this.minY_,this.maxY_)],h=this.toLonLatTransform_(l);isNaN(h[1])&&(h[1]=Math.abs(this.maxLat_)>=Math.abs(this.minLat_)?this.maxLat_:this.minLat_);let c=ii(h[0],this.minLon_,this.maxLon_),u=ii(h[1],this.minLat_,this.maxLat_);const d=this.maxLines_;let g,f,p,m,_=t;s||(_=[ii(t[0],this.minX_,this.maxX_),ii(t[1],this.minY_,this.maxY_),ii(t[2],this.minX_,this.maxX_),ii(t[3],this.minY_,this.maxY_)]);const y=Re(_,this.toLonLatTransform_,void 0,8);let x=y[3],v=y[2],S=y[1],w=y[0];if(s||(Zt(_,this.bottomLeft_)&&(w=this.minLon_,S=this.minLat_),Zt(_,this.bottomRight_)&&(v=this.maxLon_,S=this.minLat_),Zt(_,this.topLeft_)&&(w=this.minLon_,x=this.maxLat_),Zt(_,this.topRight_)&&(v=this.maxLon_,x=this.maxLat_),x=ii(x,u,this.maxLat_),v=ii(v,c,this.maxLon_),S=ii(S,this.minLat_,u),w=ii(w,this.minLon_,c)),c=Math.floor(c/r)*r,m=ii(c,this.minLon_,this.maxLon_),f=this.addMeridian_(m,S,x,n,t,0),g=0,s)for(;(m-=r)>=w&&g++n[s]&&(r=s,s=1);const o=Math.max(e[1],n[r]),a=Math.min(e[3],n[s]),l=ii(e[1]+Math.abs(e[1]-e[3])*this.lonLabelPosition_,o,a),h=[n[r-1]+(n[s-1]-n[r-1])*(l-n[r])/(n[s]-n[r]),l],c=this.meridiansLabels_[i].geom;return c.setCoordinates(h),c}getMeridians(){return this.meridians_}getParallel_(t,e,i,n,r){const s=Wp(t,e,i,this.projection_,n);let o=this.parallels_[r];return o?(o.setFlatCoordinates("XY",s),o.changed()):o=new Op(s,"XY"),o}getParallelPoint_(t,e,i){const n=t.getFlatCoordinates();let r=0,s=n.length-2;n[r]>n[s]&&(r=s,s=0);const o=Math.max(e[0],n[r]),a=Math.min(e[2],n[s]),l=ii(e[0]+Math.abs(e[0]-e[2])*this.latLabelPosition_,o,a),h=[l,n[r+1]+(n[s+1]-n[r+1])*(l-n[r])/(n[s]-n[r])],c=this.parallelsLabels_[i].geom;return c.setCoordinates(h),c}getParallels(){return this.parallels_}updateProjectionInfo_(t){const e=Ui("EPSG:4326"),i=t.getWorldExtent();this.maxLat_=i[3],this.maxLon_=i[2],this.minLat_=i[1],this.minLon_=i[0];const n=Hi(t,e);if(this.minLon_=Math.abs(this.minLat_)?this.maxLat_:this.minLat_),this.projection_=t}},_T.layer.Group=ro,_T.layer.Group.GroupEvent=io,_T.layer.Heatmap=class extends Ig{constructor(t){t=t||{};const e=Object.assign({},t);delete e.gradient,delete e.radius,delete e.blur,delete e.weight,super(e),this.gradient_=null,this.addChangeListener(qp,this.handleGradientChanged_),this.setGradient(t.gradient?t.gradient:$p),this.setBlur(void 0!==t.blur?t.blur:15),this.setRadius(void 0!==t.radius?t.radius:8);const i=t.weight?t.weight:"weight";this.weightFunction_="string"==typeof i?function(t){return t.get(i)}:i,this.setRenderOrder(null)}getBlur(){return this.get(Kp)}getGradient(){return this.get(qp)}getRadius(){return this.get(Hp)}handleGradientChanged_(){this.gradient_=function(t){const e=1,i=256,n=Dr(e,i),r=n.createLinearGradient(0,0,e,i),s=1/(t.length-1);for(let e=0,i=t.length;e{i.setState("ready")})).catch((t=>{this.dispatchEvent(new Im(t));this.getSource().setState("error")})),void 0===this.getBackground()&&olms.applyBackground(this,t.styleUrl,{accessToken:this.accessToken})}},_T.layer.Tile=Nc,_T.layer.Vector=zp,_T.layer.VectorImage=class extends Ig{constructor(t){t=t||{};const e=Object.assign({},t);delete e.imageRatio,super(e),this.imageRatio_=void 0!==t.imageRatio?t.imageRatio:1}getImageRatio(){return this.imageRatio_}createRenderer(){return new Tp(this)}},_T.layer.VectorTile=Pm,_T.layer.WebGLPoints=class extends vs{constructor(t){super(Object.assign({},t)),this.parseResult_=tg(t.style),this.styleVariables_=t.style.variables||{},this.hitDetectionDisabled_=!!t.disableHitDetection}createRenderer(){return new gf(this,{vertexShader:this.parseResult_.builder.getSymbolVertexShader(),fragmentShader:this.parseResult_.builder.getSymbolFragmentShader(),hitVertexShader:!this.hitDetectionDisabled_&&this.parseResult_.builder.getSymbolVertexShader(!0),hitFragmentShader:!this.hitDetectionDisabled_&&this.parseResult_.builder.getSymbolFragmentShader(!0),uniforms:this.parseResult_.uniforms,attributes:this.parseResult_.attributes})}updateStyleVariables(t){Object.assign(this.styleVariables_,t),this.changed()}},_T.layer.WebGLTile=Mm,_T.loadingstrategy={},_T.loadingstrategy.all=xl,_T.loadingstrategy.bbox=function(t,e){return[t]},_T.loadingstrategy.tile=function(t){return function(e,i,n){const r=t.getZForResolution(ln(i,n)),s=t.getTileRangeForExtentAndZ(on(e,n),r),o=[],a=[r,0,0];for(a[1]=s.minX;a[1]<=s.maxX;++a[1])for(a[2]=s.minY;a[2]<=s.maxY;++a[2])o.push(sn(t.getTileCoordExtent(a),n));return o}},_T.math={},_T.math.ceil=gi,_T.math.clamp=ii,_T.math.floor=di,_T.math.lerp=hi,_T.math.modulo=li,_T.math.round=ui,_T.math.solveLinearSystem=si,_T.math.squaredDistance=ri,_T.math.squaredSegmentDistance=ni,_T.math.toDegrees=oi,_T.math.toFixed=ci,_T.math.toRadians=ai,_T.net={},_T.net.ClientError=wl,_T.net.ResponseError=Sl,_T.net.getJSON=El,_T.net.jsonp=vl,_T.net.overrideXHR=function(t){"undefined"!=typeof XMLHttpRequest&&(pl=XMLHttpRequest),global.XMLHttpRequest=t},_T.net.resolveUrl=Tl,_T.net.restoreXHR=function(){global.XMLHttpRequest=pl},_T.obj={},_T.obj.clear=y,_T.obj.isEmpty=x,_T.proj={},_T.proj.Projection=Ae,_T.proj.Units={},_T.proj.Units.METERS_PER_UNIT=Fe,_T.proj.Units.fromCode=Me,_T.proj.addCommon=cn,_T.proj.addCoordinateTransforms=Yi,_T.proj.addEquivalentProjections=Xi,_T.proj.addEquivalentTransforms=Vi,_T.proj.addProjection=ji,_T.proj.addProjections=Bi,_T.proj.clearAllProjections=function(){qe(),Qe()},_T.proj.clearUserProjection=function(){Qi=null},_T.proj.cloneTransform=ki,_T.proj.createProjection=Wi,_T.proj.createSafeCoordinateTransform=hn,_T.proj.createTransformFromCoordinateTransform=Zi,_T.proj.disableCoordinateWarning=Di,_T.proj.epsg3857={},_T.proj.epsg3857.EXTENT=De,_T.proj.epsg3857.HALF_SIZE=Ne,_T.proj.epsg3857.MAX_SAFE_Y=Ge,_T.proj.epsg3857.PROJECTIONS=Be,_T.proj.epsg3857.RADIUS=Oe,_T.proj.epsg3857.WORLD_EXTENT=ke,_T.proj.epsg3857.fromEPSG4326=Ue,_T.proj.epsg3857.toEPSG4326=ze,_T.proj.epsg4326={},_T.proj.epsg4326.EXTENT=Ve,_T.proj.epsg4326.METERS_PER_UNIT=We,_T.proj.epsg4326.PROJECTIONS=Ye,_T.proj.epsg4326.RADIUS=Xe,_T.proj.equivalent=Ki,_T.proj.fromLonLat=function(t,e){return Di(),$i(t,"EPSG:4326",void 0!==e?e:"EPSG:3857")},_T.proj.fromUserCoordinate=rn,_T.proj.fromUserExtent=on,_T.proj.fromUserResolution=ln,_T.proj.get=Ui,_T.proj.getPointResolution=zi,_T.proj.getTransform=Hi,_T.proj.getTransformFromProjections=qi,_T.proj.getUserProjection=en,_T.proj.identityTransform=Gi,_T.proj.proj4={},_T.proj.proj4.register=function(t){const e=Object.keys(t.defs),i=e.length;let n,r;for(n=0;n180)&&(i[0]=li(n+180,360)-180),i},_T.proj.toUserCoordinate=nn,_T.proj.toUserExtent=sn,_T.proj.toUserResolution=an,_T.proj.transform=$i,_T.proj.transformExtent=Ji,_T.proj.transformWithProjections=function(t,e,i){return qi(e,i)(t)},_T.proj.transforms={},_T.proj.transforms.add=ti,_T.proj.transforms.clear=Qe,_T.proj.transforms.get=ei,_T.proj.transforms.remove=function(t,e){const i=t.getCode(),n=e.getCode(),r=Je[i][n];return delete Je[i][n],x(Je[i])&&delete Je[i],r},_T.proj.useGeographic=function(){tn("EPSG:4326")},_T.render={},_T.render.Box=Ea,_T.render.Event=Ts,_T.render.Feature=Bp,_T.render.Feature.toFeature=function(t,e){const i=t.getId(),n=Up(t),r=t.getProperties(),s=new lt;return void 0!==e&&s.setGeometryName(e),s.setGeometry(n),void 0!==i&&s.setId(i),s.setProperties(r,!0),s},_T.render.Feature.toGeometry=Up,_T.render.VectorContext=Cl,_T.render.canvas={},_T.render.canvas.Builder=qf,_T.render.canvas.BuilderGroup=np,_T.render.canvas.Executor=pp,_T.render.canvas.ExecutorGroup=_p,_T.render.canvas.ExecutorGroup.getPixelIndexArray=xp,_T.render.canvas.ImageBuilder=Hf,_T.render.canvas.Immediate=bl,_T.render.canvas.Instruction={},_T.render.canvas.Instruction.beginPathInstruction=Yf,_T.render.canvas.Instruction.closePathInstruction=Kf,_T.render.canvas.Instruction.fillInstruction=Wf,_T.render.canvas.Instruction.strokeInstruction=Zf,_T.render.canvas.LineStringBuilder=$f,_T.render.canvas.PolygonBuilder=Jf,_T.render.canvas.TextBuilder=ep,_T.render.canvas.checkedFonts=Vs,_T.render.canvas.defaultFillStyle=Ns,_T.render.canvas.defaultFont=Os,_T.render.canvas.defaultLineCap=Ds,_T.render.canvas.defaultLineDash=ks,_T.render.canvas.defaultLineDashOffset=0,_T.render.canvas.defaultLineJoin=Gs,_T.render.canvas.defaultLineWidth=1,_T.render.canvas.defaultMiterLimit=js,_T.render.canvas.defaultPadding=Xs,_T.render.canvas.defaultStrokeStyle=Bs,_T.render.canvas.defaultTextAlign=Us,_T.render.canvas.defaultTextBaseline=zs,_T.render.canvas.drawImageOrLabel=to,_T.render.canvas.getTextDimensions=Qs,_T.render.canvas.hitdetect={},_T.render.canvas.hitdetect.HIT_DETECT_RESOLUTION=vp,_T.render.canvas.hitdetect.createHitDetectionImageData=Sp,_T.render.canvas.hitdetect.hitDetect=wp,_T.render.canvas.measureAndCacheTextWidth=Js,_T.render.canvas.measureTextHeight=qs,_T.render.canvas.measureTextWidth=$s,_T.render.canvas.registerFont=Ks,_T.render.canvas.rotateAtOffset=function(t,e,i,n){0!==e&&(t.translate(i,n),t.rotate(e),t.translate(-i,-n))},_T.render.canvas.textHeights=Ys,_T.render.getRenderPixel=function(t,e){return bt(t.inversePixelTransform,e.slice(0))},_T.render.getVectorContext=Al,_T.render.toContext=function(t,e){const i=t.canvas,n=(e=e||{}).pixelRatio||mt,r=e.size;r&&(i.width=r[0]*n,i.height=r[1]*n,i.style.width=r[0]+"px",i.style.height=r[1]+"px");const s=[0,0,i.width,i.height],o=Pt([1,0,0,1,0,0],n,n);return new bl(t,n,s,o,0)},_T.render.webgl={},_T.render.webgl.BatchRenderer=pf,_T.render.webgl.LineStringBatchRenderer=_f,_T.render.webgl.MixedGeometryBatch=yf,_T.render.webgl.PointBatchRenderer=vf,_T.render.webgl.PolygonBatchRenderer=wf,_T.render.webgl.utils={},_T.render.webgl.utils.colorDecodeId=uf,_T.render.webgl.utils.colorEncodeId=cf,_T.render.webgl.utils.getBlankImageData=function(){const t=document.createElement("canvas").getContext("2d").createImageData(1,1);return t.data[0]=255,t.data[1]=255,t.data[2]=255,t.data[3]=255,t},_T.render.webgl.utils.writeLineSegmentToBuffers=function(t,e,i,n,r,s,o,a,l,h){const c=5+a.length,u=s.length/c,d=[t[e+0],t[e+1]],g=[t[i],t[i+1]],f=bt(h,[...d]),p=bt(h,[...g]);function m(t,e,i){const n=1e4;return Math.round(1500*e)+Math.round(1500*i)*n+t*n*n}function _(t,e,i){const n=Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),r=[(e[0]-t[0])/n,(e[1]-t[1])/n],s=[-r[1],r[0]],o=Math.sqrt((i[0]-t[0])*(i[0]-t[0])+(i[1]-t[1])*(i[1]-t[1])),a=[(i[0]-t[0])/o,(i[1]-t[1])/o],l=0===n||0===o?0:Math.acos(ii(a[0]*r[0]+a[1]*r[1],-1,1));return a[0]*s[0]+a[1]*s[1]>0?l:2*Math.PI-l}const y=null!==r;let x=0,v=0;if(null!==n){x=_(f,p,bt(h,[...[t[n],t[n+1]]]))}if(y){v=_(p,f,bt(h,[...[t[r],t[r+1]]]))}s.push(d[0],d[1],g[0],g[1],m(0,x,v)),s.push(...a),s.push(d[0],d[1],g[0],g[1],m(1,x,v)),s.push(...a),s.push(d[0],d[1],g[0],g[1],m(2,x,v)),s.push(...a),s.push(d[0],d[1],g[0],g[1],m(3,x,v)),s.push(...a),o.push(u,u+1,u+2,u+1,u+3,u+2)},_T.render.webgl.utils.writePointFeatureToBuffers=function(t,e,i,n,r,s){const o=3+r,a=t[e+0],l=t[e+1],h=af;h.length=r;for(let i=0;i{l--,this.ready=l<=0,this.getLayer().changed()};this.polygonRenderer_.rebuild(this.batch_.polygonBatch,t,"Polygon",h),this.lineStringRenderer_.rebuild(this.batch_.lineStringBatch,t,"LineString",h),this.pointRenderer_.rebuild(this.batch_.pointBatch,t,"Point",h),this.previousExtent_=t.extent.slice()}return this.helper.makeProjectionTransform(t,this.currentTransform_),this.helper.prepareDraw(t),!0}forEachFeatureAtCoordinate(t,e,i,n,r){}disposeInternal(){this.worker_.terminate(),this.layer_=null,this.sourceListenKeys_.forEach((function(t){k(t)})),this.sourceListenKeys_=null,super.disposeInternal()}},_T.renderer.webgl.shaders={},_T.renderer.webgl.shaders.FILL_FRAGMENT_SHADER=bf,_T.renderer.webgl.shaders.FILL_VERTEX_SHADER=Cf,_T.renderer.webgl.shaders.POINT_FRAGMENT_SHADER=Lf,_T.renderer.webgl.shaders.POINT_VERTEX_SHADER=If,_T.renderer.webgl.shaders.STROKE_FRAGMENT_SHADER=Pf,_T.renderer.webgl.shaders.STROKE_VERTEX_SHADER=Rf,_T.renderer.webgl.shaders.packColor=Ef,_T.reproj={},_T.reproj.Image=gc,_T.reproj.Tile=zl,_T.reproj.Triangulation=Ul,_T.reproj.calculateSourceExtentResolution=jl,_T.reproj.calculateSourceResolution=Gl,_T.reproj.canvasPool=Nl,_T.reproj.common={},_T.reproj.common.ERROR_THRESHOLD=.5,_T.reproj.render=Bl,_T.resolutionconstraint={},_T.resolutionconstraint.createMinMaxResolution=ko,_T.resolutionconstraint.createSnapToPower=Do,_T.resolutionconstraint.createSnapToResolutions=No,_T.rotationconstraint={},_T.rotationconstraint.createSnapToN=Bo,_T.rotationconstraint.createSnapToZero=Uo,_T.rotationconstraint.disable=Go,_T.rotationconstraint.none=jo,_T.size={},_T.size.buffer=Ua,_T.size.hasArea=za,_T.size.scale=Xa,_T.size.toSize=Va,_T.source={},_T.source.BingMaps=class extends uh{constructor(t){const e=void 0!==t.hidpi&&t.hidpi;super({cacheSize:t.cacheSize,crossOrigin:"anonymous",interpolate:t.interpolate,opaque:!0,projection:Ui("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,tilePixelRatio:e?2:1,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.hidpi_=e,this.culture_=void 0!==t.culture?t.culture:"en-us",this.maxZoom_=void 0!==t.maxZoom?t.maxZoom:-1,this.apiKey_=t.key,this.imagerySet_=t.imagerySet;vl("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+this.imagerySet_+"?uriScheme=https&include=ImageryProviders&key="+this.apiKey_+"&c="+this.culture_,this.handleImageryMetadataResponse.bind(this),void 0,"jsonp")}getApiKey(){return this.apiKey_}getImagerySet(){return this.imagerySet_}handleImageryMetadataResponse(t){if(200!=t.statusCode||"OK"!=t.statusDescription||"ValidCredentials"!=t.authenticationResultCode||1!=t.resourceSets.length||1!=t.resourceSets[0].resources.length)return void this.setState("error");const e=t.resourceSets[0].resources[0],i=-1==this.maxZoom_?e.zoomMax:this.maxZoom_,n=ih(this.getProjection()),r=this.hidpi_?2:1,s=e.imageWidth==e.imageHeight?e.imageWidth/r:[e.imageWidth/r,e.imageHeight/r],o=Ql({extent:n,minZoom:e.zoomMin,maxZoom:i,tileSize:s});this.tileGrid=o;const a=this.culture_,l=this.hidpi_;if(this.tileUrlFunction=ah(e.imageUrlSubdomains.map((function(t){const i=[0,0,0],n=e.imageUrl.replace("{subdomain}",t).replace("{culture}",a);return function(t,e,r){if(t){el(t[0],t[1],t[2],i);let e=n;return l&&(e+="&dpi=d1&device=mobile"),e.replace("{quadkey}",gh(i))}}}))),e.imageryProviders){const t=qi(Ui("EPSG:4326"),this.getProjection());this.setAttributions(function(i){const n=[],r=i.viewState,s=this.getTileGrid(),o=s.getZForResolution(r.resolution,this.zDirection),a=s.getTileCoordForCoordAndZ(r.center,o)[0];return e.imageryProviders.map((function(e){let r=!1;const s=e.coverageAreas;for(let e=0,n=s.length;e=n.zoomMin&&a<=n.zoomMax){const e=n.bbox;if(we(Re([e[1],e[0],e[3],e[2]],t),i.extent)){r=!0;break}}}r&&n.push(e.attribution)})),n.push('Terms of Use'),n}.bind(this))}this.setState("ready")}},_T.source.BingMaps.quadKey=gh,_T.source.CartoDB=class extends fh{constructor(t){super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,maxZoom:void 0!==t.maxZoom?t.maxZoom:18,minZoom:t.minZoom,projection:t.projection,transition:t.transition,wrapX:t.wrapX,zDirection:t.zDirection}),this.account_=t.account,this.mapId_=t.map||"",this.config_=t.config||{},this.templateCache_={},this.initializeMap_()}getConfig(){return this.config_}updateConfig(t){Object.assign(this.config_,t),this.initializeMap_()}setConfig(t){this.config_=t||{},this.initializeMap_()}initializeMap_(){const t=JSON.stringify(this.config_);if(this.templateCache_[t])return void this.applyTemplate_(this.templateCache_[t]);let e="https://"+this.account_+".carto.com/api/v1/map";this.mapId_&&(e+="/named/"+this.mapId_);const i=new XMLHttpRequest;i.addEventListener("load",this.handleInitResponse_.bind(this,t)),i.addEventListener("error",this.handleInitError_.bind(this)),i.open("POST",e),i.setRequestHeader("Content-type","application/json"),i.send(JSON.stringify(this.config_))}handleInitResponse_(t,e){const i=e.target;if(!i.status||i.status>=200&&i.status<300){let e;try{e=JSON.parse(i.responseText)}catch(t){return void this.setState("error")}this.applyTemplate_(e),this.templateCache_[t]=e,this.setState("ready")}else this.setState("error")}handleInitError_(t){this.setState("error")}applyTemplate_(t){const e="https://"+t.cdn_url.https+"/"+this.account_+"/api/v1/map/"+t.layergroupid+"/{z}/{x}/{y}.png";this.setUrl(e)}},_T.source.Cluster=class extends zh{constructor(t){super({attributions:t.attributions,wrapX:t.wrapX}),this.resolution=void 0,this.distance=void 0!==t.distance?t.distance:20,this.minDistance=t.minDistance||0,this.interpolationRatio=0,this.features=[],this.geometryFunction=t.geometryFunction||function(t){const e=t.getGeometry();return at("Point"==e.getType(),10),e},this.createCustomCluster_=t.createCluster,this.source=null,this.boundRefresh_=this.refresh.bind(this),this.updateDistance(this.distance,this.minDistance),this.setSource(t.source||null)}clear(t){this.features.length=0,super.clear(t)}getDistance(){return this.distance}getSource(){return this.source}loadFeatures(t,e,i){this.source.loadFeatures(t,e,i),e!==this.resolution&&(this.resolution=e,this.refresh())}setDistance(t){this.updateDistance(t,this.minDistance)}setMinDistance(t){this.updateDistance(this.distance,t)}getMinDistance(){return this.minDistance}setSource(t){this.source&&this.source.removeEventListener(S,this.boundRefresh_),this.source=t,t&&t.addEventListener(S,this.boundRefresh_),this.refresh()}refresh(){this.clear(),this.cluster(),this.addFeatures(this.features)}updateDistance(t,e){const i=0===t?0:Math.min(e,t)/t,n=t!==this.distance||this.interpolationRatio!==i;this.distance=t,this.minDistance=e,this.interpolationRatio=i,n&&this.refresh()}cluster(){if(void 0===this.resolution||!this.source)return;const t=[1/0,1/0,-1/0,-1/0],e=this.distance*this.resolution,i=this.source.getFeatures(),n={};for(let r=0,s=i.length;r=0;--e){const n=this.geometryFunction(t[e]);n?mi(i,n.getCoordinates()):t.splice(e,1)}Ei(i,1/t.length);const n=ge(e),r=this.interpolationRatio,s=new Wn([i[0]*(1-r)+n[0]*r,i[1]*(1-r)+n[1]*r]);return this.createCustomCluster_?this.createCustomCluster_(s,t):new lt({geometry:s,features:t})}},_T.source.DataTile=Xh,_T.source.GeoTIFF=ic,_T.source.IIIF=class extends uh{constructor(t){const e=t||{};let i=e.url||"";i+=i.lastIndexOf("/")===i.length-1||""===i?"":"/";const n=e.version||sc,r=e.sizes||[],s=e.size;at(null!=s&&Array.isArray(s)&&2==s.length&&!isNaN(s[0])&&s[0]>0&&!isNaN(s[1])&&s[1]>0,60);const o=s[0],a=s[1],l=e.tileSize,h=e.tilePixelRatio||1,c=e.format||"jpg",u=e.quality||(e.version==rc?"native":"default");let d=e.resolutions||[];const g=e.supports||[],f=e.extent||[0,-a,o,0],p=null!=r&&Array.isArray(r)&&r.length>0,m=void 0!==l&&("number"==typeof l&&Number.isInteger(l)&&l>0||Array.isArray(l)&&l.length>0),_=null!=g&&Array.isArray(g)&&(g.includes("regionByPx")||g.includes("regionByPct"))&&(g.includes("sizeByWh")||g.includes("sizeByH")||g.includes("sizeByW")||g.includes("sizeByPct"));let y,x,v;if(d.sort((function(t,e){return e-t})),m||_)if(null!=l&&("number"==typeof l&&Number.isInteger(l)&&l>0?(y=l,x=l):Array.isArray(l)&&l.length>0&&((1==l.length||null==l[1]&&Number.isInteger(l[0]))&&(y=l[0],x=l[0]),2==l.length&&(Number.isInteger(l[0])&&Number.isInteger(l[1])?(y=l[0],x=l[1]):null==l[0]&&Number.isInteger(l[1])&&(y=l[1],x=l[1])))),void 0!==y&&void 0!==x||(y=Lo,x=Lo),0==d.length){v=Math.max(Math.ceil(Math.log(o/y)/Math.LN2),Math.ceil(Math.log(a/x)/Math.LN2));for(let t=v;t>=0;t--)d.push(Math.pow(2,t))}else{const t=Math.max(...d);v=Math.round(Math.log(t)/Math.LN2)}else if(y=o,x=a,d=[],p){r.sort((function(t,e){return t[0]-e[0]})),v=-1;const t=[];for(let e=0;e0&&d[d.length-1]==i?t.push(e):(d.push(i),v++)}if(t.length>0)for(let e=0;ev)return;const S=t[1],w=t[2],E=d[f];if(!(void 0===S||void 0===w||void 0===E||S<0||Math.ceil(o/E/y)<=S||w<0||Math.ceil(a/E/x)<=w)){if(_||m){const t=S*y*E,e=w*x*E;let i=y*E,r=x*E,s=y,c=x;if(t+i>o&&(i=o-t),e+r>a&&(r=a-e),t+y*E>o&&(s=Math.floor((o-t+E-1)/E)),e+x*E>a&&(c=Math.floor((a-e+E-1)/E)),0==t&&i==o&&0==e&&r==a)l="full";else if(!_||g.includes("regionByPx"))l=t+","+e+","+i+","+r;else if(g.includes("regionByPct")){l="pct:"+dc(t/o*100)+","+dc(e/a*100)+","+dc(i/o*100)+","+dc(r/a*100)}n!=oc||_&&!g.includes("sizeByWh")?!_||g.includes("sizeByW")?h=s+",":g.includes("sizeByH")?h=","+c:g.includes("sizeByWh")?h=s+","+c:g.includes("sizeByPct")&&(h="pct:"+dc(100/E)):h=s+","+c}else if(l="full",p){const t=r[f][0],e=r[f][1];h=n==oc?t==o&&e==a?"max":t+","+e:t==o?"full":t+","}else h=n==oc?"max":"full";return i+l+"/"+h+"/0/"+u+"."+c}},transition:e.transition}),this.zDirection=e.zDirection}},_T.source.Image=yc,_T.source.Image.ImageSourceEvent=_c,_T.source.Image.defaultImageLoadFunction=xc,_T.source.ImageArcGISRest=class extends yc{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions}),this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.hidpi_=void 0===t.hidpi||t.hidpi,this.url_=t.url,this.imageLoadFunction_=void 0!==t.imageLoadFunction?t.imageLoadFunction:xc,this.params_=t.params||{},this.image_=null,this.imageSize_=[0,0],this.renderedRevision_=0,this.ratio_=void 0!==t.ratio?t.ratio:1.5}getParams(){return this.params_}getImageInternal(t,e,i,n){if(void 0===this.url_)return null;e=this.findNearestResolution(e),i=this.hidpi_?i:1;const r=this.image_;if(r&&this.renderedRevision_==this.getRevision()&&r.getResolution()==e&&r.getPixelRatio()==i&&Yt(r.getExtent(),t))return r;const s={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Object.assign(s,this.params_);const o=((t=t.slice())[0]+t[2])/2,a=(t[1]+t[3])/2;if(1!=this.ratio_){const e=this.ratio_*Se(t)/2,i=this.ratio_*_e(t)/2;t[0]=o-e,t[1]=a-i,t[2]=o+e,t[3]=a+i}const l=e/i,h=Math.ceil(Se(t)/l),c=Math.ceil(_e(t)/l);t[0]=o-l*h/2,t[2]=o+l*h/2,t[1]=a-l*c/2,t[3]=a+l*c/2,this.imageSize_[0]=h,this.imageSize_[1]=c;const u=this.getRequestUrl_(t,this.imageSize_,i,n,s);return this.image_=new Ar(t,e,i,u,this.crossOrigin_,this.imageLoadFunction_),this.renderedRevision_=this.getRevision(),this.image_.addEventListener(S,this.handleImageChange.bind(this)),this.image_}getImageLoadFunction(){return this.imageLoadFunction_}getRequestUrl_(t,e,i,n,r){const s=n.getCode().split(/:(?=\d+$)/).pop();r.SIZE=e[0]+","+e[1],r.BBOX=t.join(","),r.BBOXSR=s,r.IMAGESR=s,r.DPI=Math.round(90*i);const o=this.url_,a=o.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage");return a==o&&at(!1,50),vc(a,r)}getUrl(){return this.url_}setImageLoadFunction(t){this.image_=null,this.imageLoadFunction_=t,this.changed()}setUrl(t){t!=this.url_&&(this.url_=t,this.image_=null,this.changed())}updateParams(t){Object.assign(this.params_,t),this.image_=null,this.changed()}},_T.source.ImageCanvas=class extends yc{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions,state:t.state}),this.canvasFunction_=t.canvasFunction,this.canvas_=null,this.renderedRevision_=0,this.ratio_=void 0!==t.ratio?t.ratio:1.5}getImageInternal(t,e,i,n){e=this.findNearestResolution(e);let r=this.canvas_;if(r&&this.renderedRevision_==this.getRevision()&&r.getResolution()==e&&r.getPixelRatio()==i&&Yt(r.getExtent(),t))return r;Ce(t=t.slice(),this.ratio_);const s=[Se(t)/e*i,_e(t)/e*i],o=this.canvasFunction_.call(this,t,e,i,s,n);return o&&(r=new Nr(t,e,i,o)),this.canvas_=r,this.renderedRevision_=this.getRevision(),r}},_T.source.ImageMapGuide=class extends yc{constructor(t){super({interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions}),this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.displayDpi_=void 0!==t.displayDpi?t.displayDpi:96,this.params_=t.params||{},this.url_=t.url,this.imageLoadFunction_=void 0!==t.imageLoadFunction?t.imageLoadFunction:xc,this.hidpi_=void 0===t.hidpi||t.hidpi,this.metersPerUnit_=void 0!==t.metersPerUnit?t.metersPerUnit:1,this.ratio_=void 0!==t.ratio?t.ratio:1,this.useOverlay_=void 0!==t.useOverlay&&t.useOverlay,this.image_=null,this.renderedRevision_=0}getParams(){return this.params_}getImageInternal(t,e,i,n){e=this.findNearestResolution(e),i=this.hidpi_?i:1;let r=this.image_;if(r&&this.renderedRevision_==this.getRevision()&&r.getResolution()==e&&r.getPixelRatio()==i&&Yt(r.getExtent(),t))return r;1!=this.ratio_&&Ce(t=t.slice(),this.ratio_);const s=[Se(t)/e*i,_e(t)/e*i];if(void 0!==this.url_){const o=this.getUrl(this.url_,this.params_,t,s,n);r=new Ar(t,e,i,o,this.crossOrigin_,this.imageLoadFunction_),r.addEventListener(S,this.handleImageChange.bind(this))}else r=null;return this.image_=r,this.renderedRevision_=this.getRevision(),r}getImageLoadFunction(){return this.imageLoadFunction_}updateParams(t){Object.assign(this.params_,t),this.changed()}getUrl(t,e,i,n,r){const s=function(t,e,i,n){const r=Se(t),s=_e(t),o=e[0],a=e[1],l=.0254/n;return a*r>o*s?r*i/(o*l):s*i/(a*l)}(i,n,this.metersPerUnit_,this.displayDpi_),o=ge(i),a={OPERATION:this.useOverlay_?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol/source/ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.displayDpi_,SETDISPLAYWIDTH:Math.round(n[0]),SETDISPLAYHEIGHT:Math.round(n[1]),SETVIEWSCALE:s,SETVIEWCENTERX:o[0],SETVIEWCENTERY:o[1]};return Object.assign(a,e),vc(t,a)}setImageLoadFunction(t){this.image_=null,this.imageLoadFunction_=t,this.changed()}},_T.source.ImageStatic=class extends yc{constructor(t){const e=void 0!==t.crossOrigin?t.crossOrigin:null,i=void 0!==t.imageLoadFunction?t.imageLoadFunction:xc;super({attributions:t.attributions,interpolate:t.interpolate,projection:Ui(t.projection)}),this.url_=t.url,this.imageExtent_=t.imageExtent,this.image_=new Ar(this.imageExtent_,void 0,1,this.url_,e,i),this.imageSize_=t.imageSize?t.imageSize:null,this.image_.addEventListener(S,this.handleImageChange.bind(this))}getImageExtent(){return this.imageExtent_}getImageInternal(t,e,i,n){return we(t,this.image_.getExtent())?this.image_:null}getUrl(){return this.url_}handleImageChange(t){if(this.image_.getState()==Lr){const t=this.image_.getExtent(),e=this.image_.getImage();let i,n;this.imageSize_?(i=this.imageSize_[0],n=this.imageSize_[1]):(i=e.width,n=e.height);const r=Se(t),s=_e(t),o=r/i,a=s/n;let l=i,h=n;if(o>a?l=Math.round(r/a):h=Math.round(s/o),l!==i||h!==n){const t=Dr(l,h);this.getInterpolate()||(t.imageSmoothingEnabled=!1);const r=t.canvas;t.drawImage(e,0,0,i,n,0,0,r.width,r.height),this.image_.setImage(r)}}super.handleImageChange(t)}},_T.source.ImageWMS=class extends yc{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:t.interpolate,projection:t.projection,resolutions:t.resolutions}),this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.url_=t.url,this.imageLoadFunction_=void 0!==t.imageLoadFunction?t.imageLoadFunction:xc,this.params_=Object.assign({},t.params),this.v13_=!0,this.updateV13_(),this.serverType_=t.serverType,this.hidpi_=void 0===t.hidpi||t.hidpi,this.image_=null,this.imageSize_=[0,0],this.renderedRevision_=0,this.ratio_=void 0!==t.ratio?t.ratio:1.5}getFeatureInfoUrl(t,e,i,n){if(void 0===this.url_)return;const r=Ui(i),s=this.getProjection();s&&s!==r&&(e=Gl(s,r,t,e),t=$i(t,r,s));const o=pe(t,e,0,wc),a={SERVICE:"WMS",VERSION:Sc,REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.params_.LAYERS};Object.assign(a,this.params_,n);const l=di((t[0]-o[0])/e,4),h=di((o[3]-t[1])/e,4);return a[this.v13_?"I":"X"]=l,a[this.v13_?"J":"Y"]=h,this.getRequestUrl_(o,wc,1,s||r,a)}getLegendUrl(t,e){if(void 0===this.url_)return;const i={SERVICE:"WMS",VERSION:Sc,REQUEST:"GetLegendGraphic",FORMAT:"image/png"};if(void 0===e||void 0===e.LAYER){const t=this.params_.LAYERS;if(!(!Array.isArray(t)||1===t.length))return;i.LAYER=t}if(void 0!==t){const e=this.getProjection()?this.getProjection().getMetersPerUnit():1,n=28e-5;i.SCALE=t*e/n}return Object.assign(i,e),vc(this.url_,i)}getParams(){return this.params_}getImageInternal(t,e,i,n){if(void 0===this.url_)return null;e=this.findNearestResolution(e),1==i||this.hidpi_&&void 0!==this.serverType_||(i=1);const r=e/i,s=ge(t),o=pe(s,r,0,[gi(Se(t)/r,4),gi(_e(t)/r,4)]),a=pe(s,r,0,[gi(this.ratio_*Se(t)/r,4),gi(this.ratio_*_e(t)/r,4)]),l=this.image_;if(l&&this.renderedRevision_==this.getRevision()&&l.getResolution()==e&&l.getPixelRatio()==i&&Yt(l.getExtent(),o))return l;const h={SERVICE:"WMS",VERSION:Sc,REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};Object.assign(h,this.params_),this.imageSize_[0]=ui(Se(a)/r,4),this.imageSize_[1]=ui(_e(a)/r,4);const c=this.getRequestUrl_(a,this.imageSize_,i,n,h);return this.image_=new Ar(a,e,i,c,this.crossOrigin_,this.imageLoadFunction_),this.renderedRevision_=this.getRevision(),this.image_.addEventListener(S,this.handleImageChange.bind(this)),this.image_}getImageLoadFunction(){return this.imageLoadFunction_}getRequestUrl_(t,e,i,n,r){if(at(void 0!==this.url_,9),r[this.v13_?"CRS":"SRS"]=n.getCode(),"STYLES"in this.params_||(r.STYLES=""),1!=i)switch(this.serverType_){case"geoserver":const t=90*i+.5|0;"FORMAT_OPTIONS"in r?r.FORMAT_OPTIONS+=";dpi:"+t:r.FORMAT_OPTIONS="dpi:"+t;break;case"mapserver":r.MAP_RESOLUTION=90*i;break;case"carmentaserver":case"qgis":r.DPI=90*i;break;default:at(!1,8)}r.WIDTH=e[0],r.HEIGHT=e[1];const s=n.getAxisOrientation();let o;return o=this.v13_&&"ne"==s.substr(0,2)?[t[1],t[0],t[3],t[2]]:t,r.BBOX=o.join(","),vc(this.url_,r)}getUrl(){return this.url_}setImageLoadFunction(t){this.image_=null,this.imageLoadFunction_=t,this.changed()}setUrl(t){t!=this.url_&&(this.url_=t,this.image_=null,this.changed())}updateParams(t){Object.assign(this.params_,t),this.updateV13_(),this.image_=null,this.changed()}updateV13_(){const t=this.params_.VERSION||Sc;this.v13_=pi(t,"1.3")>=0}},_T.source.OGCMapTile=class extends uh{constructor(t){super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition});Rg({url:t.url,projection:this.getProjection(),mediaType:t.mediaType,context:t.context||null}).then(this.handleTileSetInfo_.bind(this)).catch(this.handleError_.bind(this))}handleTileSetInfo_(t){this.tileGrid=t.grid,this.setTileUrlFunction(t.urlFunction,t.urlTemplate),this.setState("ready")}handleError_(t){console.error(t),this.setState("error")}},_T.source.OGCVectorTile=class extends Qc{constructor(t){super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,format:t.format,overlaps:t.overlaps,projection:t.projection,tileClass:t.tileClass,transition:t.transition,wrapX:t.wrapX,zDirection:t.zDirection,state:"loading"});Rg({url:t.url,projection:this.getProjection(),mediaType:t.mediaType,supportedMediaTypes:t.format.supportedMediaTypes,context:t.context||null}).then(this.handleTileSetInfo_.bind(this)).catch(this.handleError_.bind(this))}handleTileSetInfo_(t){this.tileGrid=t.grid,this.setTileUrlFunction(t.urlFunction,t.urlTemplate),this.setState("ready")}handleError_(t){console.error(t),this.setState("error")}},_T.source.OSM=class extends fh{constructor(t){let e;e=void 0!==(t=t||{}).attributions?t.attributions:[Ec];const i=void 0!==t.crossOrigin?t.crossOrigin:"anonymous",n=void 0!==t.url?t.url:"https://tile.openstreetmap.org/{z}/{x}/{y}.png";super({attributions:e,attributionsCollapsible:!1,cacheSize:t.cacheSize,crossOrigin:i,interpolate:t.interpolate,maxZoom:void 0!==t.maxZoom?t.maxZoom:19,opaque:void 0===t.opaque||t.opaque,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,transition:t.transition,url:n,wrapX:t.wrapX,zDirection:t.zDirection})}},_T.source.OSM.ATTRIBUTION=Ec,_T.source.Raster=Wc,_T.source.Raster.Processor=Uc,_T.source.Raster.RasterSourceEvent=Vc,_T.source.Raster.newImageData=Gc,_T.source.Source=Zl,_T.source.Stamen=class extends fh{constructor(t){const e=t.layer.indexOf("-"),i=-1==e?t.layer:t.layer.slice(0,e),n=$c[i],r=Hc[t.layer],s=void 0!==t.url?t.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+t.layer+"/{z}/{x}/{y}."+r.extension;super({attributions:qc,cacheSize:t.cacheSize,crossOrigin:"anonymous",interpolate:t.interpolate,maxZoom:null!=t.maxZoom?t.maxZoom:n.maxZoom,minZoom:null!=t.minZoom?t.minZoom:n.minZoom,opaque:r.opaque,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,transition:t.transition,url:s,wrapX:t.wrapX,zDirection:t.zDirection})}},_T.source.Tile=nh,_T.source.Tile.TileSourceEvent=rh,_T.source.TileArcGISRest=class extends uh{constructor(t){super({attributions:(t=t||{}).attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.params_=t.params||{},this.hidpi_=void 0===t.hidpi||t.hidpi,this.tmpExtent_=[1/0,1/0,-1/0,-1/0],this.setKey(this.getKeyForParams_())}getKeyForParams_(){let t=0;const e=[];for(const i in this.params_)e[t++]=i+"-"+this.params_[i];return e.join("/")}getParams(){return this.params_}getRequestUrl_(t,e,i,n,r,s){const o=this.urls;if(!o)return;const a=r.getCode().split(/:(?=\d+$)/).pop();let l;if(s.SIZE=e[0]+","+e[1],s.BBOX=i.join(","),s.BBOXSR=a,s.IMAGESR=a,s.DPI=Math.round(s.DPI?s.DPI*n:90*n),1==o.length)l=o[0];else{l=o[li(ol(t),o.length)]}return vc(l.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),s)}getTilePixelRatio(t){return this.hidpi_?t:1}updateParams(t){Object.assign(this.params_,t),this.setKey(this.getKeyForParams_())}tileUrlFunction(t,e,i){let n=this.getTileGrid();if(n||(n=this.getTileGridForProjection(i)),n.getResolutions().length<=t[0])return;1==e||this.hidpi_||(e=1);const r=n.getTileCoordExtent(t,this.tmpExtent_);let s=Va(n.getTileSize(t[0]),this.tmpSize);1!=e&&(s=Xa(s,e,this.tmpSize));const o={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};return Object.assign(o,this.params_),this.getRequestUrl_(t,s,r,e,i,o)}},_T.source.TileDebug=class extends fh{constructor(t){super({opaque:!1,projection:(t=t||{}).projection,tileGrid:t.tileGrid,wrapX:void 0===t.wrapX||t.wrapX,zDirection:t.zDirection,url:t.template||"z:{z} x:{x} y:{y}",tileLoadFunction:(t,e)=>{const i=t.getTileCoord()[0],n=Va(this.tileGrid.getTileSize(i)),r=Dr(n[0],n[1]);r.strokeStyle="grey",r.strokeRect(.5,.5,n[0]+.5,n[1]+.5),r.fillStyle="grey",r.strokeStyle="white",r.textAlign="center",r.textBaseline="middle",r.font="24px sans-serif",r.lineWidth=4,r.strokeText(e,n[0]/2,n[1]/2,n[0]),r.fillText(e,n[0]/2,n[1]/2,n[0]),t.setImage(r.canvas)}})}},_T.source.TileImage=uh,_T.source.TileJSON=class extends uh{constructor(t){if(super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:Ui("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.tileJSON_=null,this.tileSize_=t.tileSize,t.url)if(t.jsonp)vl(t.url,this.handleTileJSONResponse.bind(this),this.handleTileJSONError.bind(this));else{const e=new XMLHttpRequest;e.addEventListener("load",this.onXHRLoad_.bind(this)),e.addEventListener("error",this.onXHRError_.bind(this)),e.open("GET",t.url),e.send()}else t.tileJSON?this.handleTileJSONResponse(t.tileJSON):at(!1,51)}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleTileJSONError()}this.handleTileJSONResponse(t)}else this.handleTileJSONError()}onXHRError_(t){this.handleTileJSONError()}getTileJSON(){return this.tileJSON_}handleTileJSONResponse(t){const e=Ui("EPSG:4326"),i=this.getProjection();let n;if(void 0!==t.bounds){const r=qi(e,i);n=Re(t.bounds,r)}const r=ih(i),s=t.minzoom||0,o=Ql({extent:r,maxZoom:t.maxzoom||22,minZoom:s,tileSize:this.tileSize_});if(this.tileGrid=o,this.tileUrlFunction=oh(t.tiles,o),t.attribution&&!this.getAttributions()){const e=void 0!==n?n:r;this.setAttributions((function(i){return we(e,i.extent)?[t.attribution]:null}))}this.tileJSON_=t,this.setState("ready")}handleTileJSONError(){this.setState("error")}},_T.source.TileWMS=class extends uh{constructor(t){t=t||{};const e=Object.assign({},t.params),i=!("TRANSPARENT"in e)||e.TRANSPARENT;super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,opaque:!i,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.gutter_=void 0!==t.gutter?t.gutter:0,this.params_=e,this.v13_=!0,this.serverType_=t.serverType,this.hidpi_=void 0===t.hidpi||t.hidpi,this.tmpExtent_=[1/0,1/0,-1/0,-1/0],this.updateV13_(),this.setKey(this.getKeyForParams_())}getFeatureInfoUrl(t,e,i,n){const r=Ui(i),s=this.getProjection();let o=this.getTileGrid();o||(o=this.getTileGridForProjection(r));const a=o.getZForResolution(e,this.zDirection),l=o.getTileCoordForCoordAndZ(t,a);if(o.getResolutions().length<=l[0])return;let h=o.getResolution(l[0]),c=o.getTileCoordExtent(l,this.tmpExtent_),u=Va(o.getTileSize(l[0]),this.tmpSize);const d=this.gutter_;0!==d&&(u=Ua(u,d,this.tmpSize),c=Xt(c,h*d,c)),s&&s!==r&&(h=Gl(s,r,t,h),c=Ji(c,r,s),t=$i(t,r,s));const g={SERVICE:"WMS",VERSION:Sc,REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.params_.LAYERS};Object.assign(g,this.params_,n);const f=Math.floor((t[0]-c[0])/h),p=Math.floor((c[3]-t[1])/h);return g[this.v13_?"I":"X"]=f,g[this.v13_?"J":"Y"]=p,this.getRequestUrl_(l,u,c,1,s||r,g)}getLegendUrl(t,e){if(void 0===this.urls[0])return;const i={SERVICE:"WMS",VERSION:Sc,REQUEST:"GetLegendGraphic",FORMAT:"image/png"};if(void 0===e||void 0===e.LAYER){const t=this.params_.LAYERS;if(!(!Array.isArray(t)||1===t.length))return;i.LAYER=t}if(void 0!==t){const e=this.getProjection()?this.getProjection().getMetersPerUnit():1,n=28e-5;i.SCALE=t*e/n}return Object.assign(i,e),vc(this.urls[0],i)}getGutter(){return this.gutter_}getParams(){return this.params_}getRequestUrl_(t,e,i,n,r,s){const o=this.urls;if(!o)return;if(s.WIDTH=e[0],s.HEIGHT=e[1],s[this.v13_?"CRS":"SRS"]=r.getCode(),"STYLES"in this.params_||(s.STYLES=""),1!=n)switch(this.serverType_){case"geoserver":const t=90*n+.5|0;"FORMAT_OPTIONS"in s?s.FORMAT_OPTIONS+=";dpi:"+t:s.FORMAT_OPTIONS="dpi:"+t;break;case"mapserver":s.MAP_RESOLUTION=90*n;break;case"carmentaserver":case"qgis":s.DPI=90*n;break;default:at(!1,52)}const a=r.getAxisOrientation(),l=i;if(this.v13_&&"ne"==a.substr(0,2)){let t;t=i[0],l[0]=i[1],l[1]=t,t=i[2],l[2]=i[3],l[3]=t}let h;if(s.BBOX=l.join(","),1==o.length)h=o[0];else{h=o[li(ol(t),o.length)]}return vc(h,s)}getTilePixelRatio(t){return this.hidpi_&&void 0!==this.serverType_?t:1}getKeyForParams_(){let t=0;const e=[];for(const i in this.params_)e[t++]=i+"-"+this.params_[i];return e.join("/")}updateParams(t){Object.assign(this.params_,t),this.updateV13_(),this.setKey(this.getKeyForParams_())}updateV13_(){const t=this.params_.VERSION||Sc;this.v13_=pi(t,"1.3")>=0}tileUrlFunction(t,e,i){let n=this.getTileGrid();if(n||(n=this.getTileGridForProjection(i)),n.getResolutions().length<=t[0])return;1==e||this.hidpi_&&void 0!==this.serverType_||(e=1);const r=n.getResolution(t[0]);let s=n.getTileCoordExtent(t,this.tmpExtent_),o=Va(n.getTileSize(t[0]),this.tmpSize);const a=this.gutter_;0!==a&&(o=Ua(o,a,this.tmpSize),s=Xt(s,r*a,s)),1!=e&&(o=Xa(o,e,this.tmpSize));const l={SERVICE:"WMS",VERSION:Sc,REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};return Object.assign(l,this.params_),this.getRequestUrl_(t,o,s,e,i,l)}},_T.source.UTFGrid=class extends nh{constructor(t){if(super({projection:Ui("EPSG:3857"),state:"loading",zDirection:t.zDirection}),this.preemptive_=void 0===t.preemptive||t.preemptive,this.tileUrlFunction_=lh,this.template_=void 0,this.jsonp_=t.jsonp||!1,t.url)if(this.jsonp_)vl(t.url,this.handleTileJSONResponse.bind(this),this.handleTileJSONError.bind(this));else{const e=new XMLHttpRequest;e.addEventListener("load",this.onXHRLoad_.bind(this)),e.addEventListener("error",this.onXHRError_.bind(this)),e.open("GET",t.url),e.send()}else t.tileJSON?this.handleTileJSONResponse(t.tileJSON):at(!1,51)}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleTileJSONError()}this.handleTileJSONResponse(t)}else this.handleTileJSONError()}onXHRError_(t){this.handleTileJSONError()}getTemplate(){return this.template_}forDataAtCoordinateAndResolution(t,e,i,n){if(this.tileGrid){const r=this.tileGrid.getZForResolution(e,this.zDirection),s=this.tileGrid.getTileCoordForCoordAndZ(t,r);this.getTile(s[0],s[1],s[2],1,this.getProjection()).forDataAtCoordinate(t,i,n)}else!0===n?setTimeout((function(){i(null)}),0):i(null)}handleTileJSONError(){this.setState("error")}handleTileJSONResponse(t){const e=Ui("EPSG:4326"),i=this.getProjection();let n;if(void 0!==t.bounds){const r=qi(e,i);n=Re(t.bounds,r)}const r=ih(i),s=t.minzoom||0,o=Ql({extent:r,maxZoom:t.maxzoom||22,minZoom:s});this.tileGrid=o,this.template_=t.template;const a=t.grids;if(a){if(this.tileUrlFunction_=oh(a,o),void 0!==t.attribution){const e=void 0!==n?n:r;this.setAttributions((function(i){return we(e,i.extent)?[t.attribution]:null}))}this.setState("ready")}else this.setState("error")}getTile(t,e,i,n,r){const s=il(t,e,i);if(this.tileCache.containsKey(s))return this.tileCache.get(s);{const o=[t,e,i],a=this.getTileCoordForTileUrlFunction(o,r),l=this.tileUrlFunction_(a,n,r),h=new Jc(o,void 0!==l?H:tt,void 0!==l?l:"",this.tileGrid.getTileCoordExtent(o),this.preemptive_,this.jsonp_);return this.tileCache.set(s,h),h}}useTile(t,e,i){const n=il(t,e,i);this.tileCache.containsKey(n)&&this.tileCache.get(n)}},_T.source.UTFGrid.CustomTile=Jc,_T.source.UrlTile=ch,_T.source.Vector=zh,_T.source.Vector.VectorSourceEvent=Uh,_T.source.VectorTile=Qc,_T.source.VectorTile.defaultLoadFunction=tu,_T.source.WMTS=class extends uh{constructor(t){const e=void 0!==t.requestEncoding?t.requestEncoding:"KVP",i=t.tileGrid;let n=t.urls;void 0===n&&void 0!==t.url&&(n=hh(t.url)),super({attributions:t.attributions,attributionsCollapsible:t.attributionsCollapsible,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:i,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,urls:n,wrapX:void 0!==t.wrapX&&t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.version_=void 0!==t.version?t.version:"1.0.0",this.format_=void 0!==t.format?t.format:"image/jpeg",this.dimensions_=void 0!==t.dimensions?t.dimensions:{},this.layer_=t.layer,this.matrixSet_=t.matrixSet,this.style_=t.style,this.requestEncoding_=e,this.setKey(this.getKeyForDimensions_()),n&&n.length>0&&(this.tileUrlFunction=ah(n.map(this.createFromWMTSTemplate.bind(this))))}setUrls(t){this.urls=t;const e=t.join("\n");this.setTileUrlFunction(ah(t.map(this.createFromWMTSTemplate.bind(this))),e)}getDimensions(){return this.dimensions_}getFormat(){return this.format_}getLayer(){return this.layer_}getMatrixSet(){return this.matrixSet_}getRequestEncoding(){return this.requestEncoding_}getStyle(){return this.style_}getVersion(){return this.version_}getKeyForDimensions_(){let t=0;const e=[];for(const i in this.dimensions_)e[t++]=i+"-"+this.dimensions_[i];return e.join("/")}updateDimensions(t){Object.assign(this.dimensions_,t),this.setKey(this.getKeyForDimensions_())}createFromWMTSTemplate(t){const e=this.requestEncoding_,i={layer:this.layer_,style:this.style_,tilematrixset:this.matrixSet_};"KVP"==e&&Object.assign(i,{Service:"WMTS",Request:"GetTile",Version:this.version_,Format:this.format_}),t="KVP"==e?vc(t,i):t.replace(/\{(\w+?)\}/g,(function(t,e){return e.toLowerCase()in i?i[e.toLowerCase()]:t}));const n=this.tileGrid,r=this.dimensions_;return function(i,s,o){if(i){const s={TileMatrix:n.getMatrixId(i[0]),TileCol:i[1],TileRow:i[2]};Object.assign(s,r);let o=t;return o="KVP"==e?vc(o,s):o.replace(/\{(\w+?)\}/g,(function(t,e){return s[e]})),o}}}},_T.source.WMTS.optionsFromCapabilities=function(t,e){const i=t.Contents.Layer.find((function(t){return t.Identifier==e.layer}));if(!i)return null;const n=t.Contents.TileMatrixSet;let r;r=i.TileMatrixSetLink.length>1?"projection"in e?i.TileMatrixSetLink.findIndex((function(t){const i=n.find((function(e){return e.Identifier==t.TileMatrixSet})).SupportedCRS,r=Ui(i),s=Ui(e.projection);return r&&s?Ki(r,s):i==e.projection})):i.TileMatrixSetLink.findIndex((function(t){return t.TileMatrixSet==e.matrixSet})):0,r<0&&(r=0);const s=i.TileMatrixSetLink[r].TileMatrixSet,o=i.TileMatrixSetLink[r].TileMatrixSetLimits;let a=i.Format[0];"format"in e&&(a=e.format),r=i.Style.findIndex((function(t){return"style"in e?t.Title==e.style:t.isDefault})),r<0&&(r=0);const l=i.Style[r].Identifier,h={};"Dimension"in i&&i.Dimension.forEach((function(t,e,i){const n=t.Identifier;let r=t.Default;void 0===r&&(r=t.Value[0]),h[n]=r}));const c=t.Contents.TileMatrixSet.find((function(t){return t.Identifier==s}));let u;const d=c.SupportedCRS;if(d&&(u=Ui(d)),"projection"in e){const t=Ui(e.projection);t&&(u&&!Ki(t,u)||(u=t))}let g=!1;const f="ne"==u.getAxisOrientation().substr(0,2);let p=c.TileMatrix[0],m={MinTileCol:0,MinTileRow:0,MaxTileCol:p.MatrixWidth-1,MaxTileRow:p.MatrixHeight-1};if(o){m=o[o.length-1];const t=c.TileMatrix.find((t=>t.Identifier===m.TileMatrix||c.Identifier+":"+t.Identifier===m.TileMatrix));t&&(p=t)}const _=28e-5*p.ScaleDenominator/u.getMetersPerUnit(),y=f?[p.TopLeftCorner[1],p.TopLeftCorner[0]]:p.TopLeftCorner,x=p.TileWidth*_,v=p.TileHeight*_;let S=c.BoundingBox;S&&f&&(S=[S[1],S[0],S[3],S[2]]);let w=[y[0]+x*m.MinTileCol,y[1]-v*(1+m.MaxTileRow),y[0]+x*(1+m.MaxTileCol),y[1]-v*m.MinTileRow];if(void 0!==S&&!Yt(S,w)){const t=i.WGS84BoundingBox,e=Ui("EPSG:4326").getExtent();if(w=S,t)g=t[0]===e[0]&&t[2]===e[2];else{const t=Ji(S,c.SupportedCRS,"EPSG:4326");g=t[0]-1e-10<=e[0]&&t[2]+1e-10>=e[2]}}const E=iu(c,w,o),T=[];let C=e.requestEncoding;if(C=void 0!==C?C:"","OperationsMetadata"in t&&"GetTile"in t.OperationsMetadata){const e=t.OperationsMetadata.GetTile.DCP.HTTP.Get;for(let t=0,i=e.length;tl||s>l;)o.push([Math.ceil(r/l),Math.ceil(s/l)]),l+=l;break;case"truncated":let t=r,e=s;for(;t>l||e>l;)o.push([Math.ceil(t/l),Math.ceil(e/l)]),t>>=1,e>>=1;break;default:at(!1,53)}o.push([1,1]),o.reverse();const h=[n],c=[0];for(let t=1,e=o.length;t{const n=t.toString();if(!i.containsKey(n)){const r=e(t);i.set(n,r)}a.push(i.get(n))})),a}},_T.source.wms={},_T.source.wms.DEFAULT_VERSION=Sc,_T.sphere={},_T.sphere.DEFAULT_RADIUS=Li,_T.sphere.getArea=function t(e,i){const n=(i=i||{}).radius||Li,r=i.projection||"EPSG:3857",s=e.getType();"GeometryCollection"!==s&&(e=e.clone().transform(r,"EPSG:4326"));let o,a,l,h,c,u,d=0;switch(s){case"Point":case"MultiPoint":case"LineString":case"MultiLineString":case"LinearRing":break;case"Polygon":for(o=e.getCoordinates(),d=Math.abs(Ai(o[0],n)),l=1,h=o.length;l...) try to find Qt 6. # If it is found, find_package will succeed, and the CMake variable # QT_VERSION_MAJOR will be set to 6. + if(QT6_VER AND QT6_PATH) find_package(QT NAMES Qt6 REQUIRED PATHS ${QT6_PATH} NO_DEFAULT_PATH) diff --git a/src/libclient/api/contactmodel.h b/src/libclient/api/contactmodel.h index 627d219e..b204aad1 100644 --- a/src/libclient/api/contactmodel.h +++ b/src/libclient/api/contactmodel.h @@ -108,7 +108,9 @@ public: * @param body * @return id from daemon */ - uint64_t sendDhtMessage(const QString& uri, const QString& body) const; + uint64_t sendDhtMessage(const QString& uri, + const QString& body, + const QString& mimeType = {}) const; /** * Get best id for contact * @param contactUri diff --git a/src/libclient/api/conversationmodel.h b/src/libclient/api/conversationmodel.h index 8106ba64..73e7530b 100644 --- a/src/libclient/api/conversationmodel.h +++ b/src/libclient/api/conversationmodel.h @@ -439,6 +439,15 @@ public: member::Role memberRole(const QString& conversationId, const QString& memberUri) const; Q_SIGNALS: + + /** + * Emitted when a conversation receives a new position + */ + void newPosition(const QString& peerId, + const QString& body, + const uint64_t& timestamp, + const QString& daemonId) const; + /** * Emitted when a conversation receives a new interaction * @param uid of conversation diff --git a/src/libclient/api/interaction.h b/src/libclient/api/interaction.h index 54b22fb6..4cebc79f 100644 --- a/src/libclient/api/interaction.h +++ b/src/libclient/api/interaction.h @@ -65,7 +65,7 @@ to_type(const QString& type) { if (type == "INITIAL" || type == "initial") return interaction::Type::INITIAL; - else if (type == "TEXT" || type == "text/plain") + else if (type == "TEXT" || type == TEXT_PLAIN) return interaction::Type::TEXT; else if (type == "CALL" || type == "application/call-history+json") return interaction::Type::CALL; diff --git a/src/libclient/callbackshandler.cpp b/src/libclient/callbackshandler.cpp index 76e07a54..b35e2173 100644 --- a/src/libclient/callbackshandler.cpp +++ b/src/libclient/callbackshandler.cpp @@ -569,8 +569,7 @@ CallbacksHandler::slotIncomingMessage(const QString& accountId, match.captured(2).toInt(), match.captured(3).toInt(), e.second); - } else if (e.first.contains( - "text/plain")) { // we consider it as an usual message interaction + } else if (e.first.contains(TEXT_PLAIN)) { // we consider it as an usual message interaction Q_EMIT incomingCallMessage(accountId, callId, from2, e.second); } } diff --git a/src/libclient/callmodel.cpp b/src/libclient/callmodel.cpp index 64e4471b..204ef2bf 100644 --- a/src/libclient/callmodel.cpp +++ b/src/libclient/callmodel.cpp @@ -1279,7 +1279,7 @@ void CallModel::sendSipMessage(const QString& callId, const QString& body) const { MapStringString payloads; - payloads["text/plain"] = body; + payloads[TEXT_PLAIN] = body; CallManager::instance().sendTextMessage(owner.id, callId, payloads, true /* not used */); } diff --git a/src/libclient/contactmodel.cpp b/src/libclient/contactmodel.cpp index 3755a03d..d378f0e7 100644 --- a/src/libclient/contactmodel.cpp +++ b/src/libclient/contactmodel.cpp @@ -517,11 +517,16 @@ ContactModelPimpl::searchSipContact(const URI& query) } uint64_t -ContactModel::sendDhtMessage(const QString& contactUri, const QString& body) const +ContactModel::sendDhtMessage(const QString& contactUri, + const QString& body, + const QString& mimeType) const { // Send interaction QMap payloads; - payloads["text/plain"] = body; + if (mimeType.isEmpty()) + payloads[TEXT_PLAIN] = body; + else + payloads[mimeType] = body; auto msgId = ConfigurationManager::instance().sendTextMessage(QString(owner.id), QString(contactUri), payloads); diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp index 8ae4fe13..dba206bd 100644 --- a/src/libclient/conversationmodel.cpp +++ b/src/libclient/conversationmodel.cpp @@ -2213,7 +2213,7 @@ ConversationModelPimpl::initConversations() timestamp = static_cast(message.received); } catch (...) { } - addIncomingMessage(message.from, message.payloads["text/plain"], timestamp); + addIncomingMessage(message.from, message.payloads[TEXT_PLAIN], timestamp); } } @@ -3563,8 +3563,12 @@ ConversationModelPimpl::slotNewAccountMessage(const QString& accountId, return; for (const auto& payload : payloads.keys()) { - if (payload.contains("text/plain")) { + if (payload.contains(TEXT_PLAIN)) { addIncomingMessage(peerId, payloads.value(payload), 0, msgId); + } else if (payload.contains(APPLICATION_GEO)) { + Q_EMIT linked.newPosition(peerId, payloads.value(payload), 0, msgId); + } else { + qWarning() << payload; } } } diff --git a/src/libclient/typedefs.h b/src/libclient/typedefs.h index 881ebc39..45fd32c8 100644 --- a/src/libclient/typedefs.h +++ b/src/libclient/typedefs.h @@ -29,6 +29,7 @@ // Typedefs (required to avoid '<' and '>' in the DBus XML) typedef QMap MapStringString; typedef QMap MapStringInt; +typedef QMap MapStringDouble; typedef QVector VectorInt; typedef QVector VectorUInt; typedef QVector VectorULongLong; @@ -42,6 +43,8 @@ typedef QVector VectorVectorByte; typedef uint64_t DataTransferId; constexpr static const char* TRUE_STR = "true"; +constexpr static const char* TEXT_PLAIN = "text/plain"; +constexpr static const char* APPLICATION_GEO = "application/geo"; constexpr static const char* FALSE_STR = "false"; // Adapted from libring libjami::DataTransferInfo