Deaktivieren der Kartennavigation in der ArcGIS Server JavaScript API v4.x.

Nov 16 2020

In der älteren Version 3.x der ArcGIS Server-JavaScript-API war es möglich, die Kartennavigation zu deaktivieren , disableMapNavigation()wie unter Deaktivieren der Karte in der ArcGIS-API für Javascript erläutert

Was entspricht dem Deaktivieren der Kartennavigation in Version 4.x der ArcGIS Server-JavaScript-API? Der Anwendungsfall besteht darin, die Kartennavigation vorübergehend zu verhindern, während eine externe Abfrage ausgeführt wird.

Die mapView verfügt über eine Navigationseigenschaft , mit der bestimmte Navigationstypen deaktiviert werden können, wie im Beispiel unterhttps://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-disable-navigationDies scheint jedoch nicht zuzulassen, dass die gesamte Navigation deaktiviert wird.

ZB auch bei Verwendung von:

navigation: {
  gamepad: {enabled: false},
  browserTouchPanEnabled: false,
  momentumEnabled: false,
  mouseWheelZoomEnabled: false
}

Der Benutzer kann die Karte mit der Maus schwenken, durch Doppelklicken zoomen, die Karte mit der rechten Maustaste drehen usw.

Antworten

4 DrorBogin Nov 16 2020 at 12:55

Es scheint die Kartennavigation vollständig zu deaktivieren (unter einer Bedingung, wie Sie gefragt haben), die Sie benötigen würden, um die Ereignisausbreitung von bestimmten Ereignissen zu stoppen.

view.on(["click", "drag", "double-click", "mouse-wheel", "hold", ], function(event) {
  if(thinking){
    event.stopPropagation();
  }
});

Dadurch werden alle diese Ereignisse stoppen, wenn Sie einen Klick oder Drag - Ereignis von nur der rechten Maustaste (falls Sie möchten , deaktivieren Sie einfach Drehung zum Beispiel) deaktivieren möchten, dann ist das click, dragund double-clickEreignisse haben auch eine Schaltfläche Eigenschaft , die Sie können verwenden:

Wert Beschreibung
0 Linksklick (oder Berührung)
1 Mittelklick
2 Rechtsklick

* Aus der Ansicht Ereignisdokumentation entnommen

BEARBEITEN

Nachdem ich nach dem Deaktivieren des Shift+Left-click+DragZooms gefragt hatte , ging ich zurück zu den Dokumenten und fand dieses Beispiel

Anscheinend können Sie dem Ereignis die Definition einer gedrückten Tastaturtaste hinzufügen, um das Sprudeln des Ereignisses zu verhindern.

view.on("drag", ["Shift"], function(event) {
  event.stopPropagation();
});

view.on("drag", ["Shift", "Control"], function(event) {
  event.stopPropagation();
});
1 StephenLead Nov 16 2020 at 16:14

Zusätzlich zu Drors hervorragender Antwort können Sie ein Zoom-Widget erstellen, das bei Bedarf entfernt werden kann, um zu verhindern, dass der Benutzer die Schaltflächen zum Vergrößern / Verkleinern verwendet.

Entfernen Sie den Standard-Zoom, wenn Sie die Ansicht mit dem Schlüsselwort ui instanziieren , und schließen Sie das Zoom-Steuerelement nicht ein:

const view = new MapView({
  container: "viewDiv",
  map: map,
  ui: { components: ["attribution"] }
});

Fügen Sie dann nach Bedarf eine Zoomsteuerung hinzu oder entfernen Sie sie:

let zoomControl = new Zoom({
  view: view
});

// Enable zoom
view.ui.add(zoomControl, {
  position: "top-left"
});

// Disable zoom
view.ui.remove(zoomControl);