Einschränken der Basiskarte auf einen bestimmten Umfang in der ArcGIS-API für JavaScript 3?

8

Derzeit verwende ich ArcGIS JS API Version 3.3 / 3.5 in meiner Anwendung.

Ich möchte die Grundkarte nur für die USA einschränken. Beispielsweise können Standardnavigationsfunktionen wie Vergrößern und Verkleinern nur für das US-Land verwendet werden.

Versuche folgende Dinge:

  1. Ich habe den US-Extent-Code in meiner Anwendung festgelegt, aber wenn ich verkleinere, kann ich die gesamte Weltkarte sehen, die ich nur bis zu einem gewissen Grad einschränken möchte

  2. Gehen Sie diese Frage durch: Beschränken Sie das Schwenken und Zoomen in der ArcGIS Javascript-API?

  3. Einschränken der Straßengrundkarte mithilfe dieser Frage, jedoch ohne Einschränkung der Karte: Verwenden einer eigenen Grundkarte mit der ArcGIS-API für Javascript?

  4. Ich verwende diese Beispielkarte in meiner Anwendung.

Sunil
quelle

Antworten:

4

Hier ist ein Beispiel für eine Möglichkeit, dies zu tun: http://jsfiddle.net/gh/gist/library/pure/6050806/

CLJ
quelle
4

Hier ist ein Beispiel für den Code, den ich dazu verwendet habe. Dies funktioniert für Ihren Fall, wenn Sie den anfänglichen Umfang der Karte so einstellen, dass die USA angezeigt werden:

//This function limits the extent of the map to prevent users from scrolling 
//far away from the initial extent.
function limitMapExtent(map) {
    var initialExtent = map.extent;
    map.on('extent-change', function(event) {
        //If the map has moved to the point where it's center is 
        //outside the initial boundaries, then move it back to the 
        //edge where it moved out
        var currentCenter = map.extent.getCenter();
        if (!initialExtent.contains(currentCenter) && 
            event.delta.x !== 0 && event.delta.y !== 0) {

            var newCenter = map.extent.getCenter();

            //check each side of the initial extent and if the 
            //current center is outside that extent, 
            //set the new center to be on the edge that it went out on
            if (currentCenter.x < initialExtent.xmin) {
                newCenter.x = initialExtent.xmin;
            }
            if (currentCenter.x > initialExtent.xmax) {
                newCenter.x = initialExtent.xmax;
            }
            if (currentCenter.y < initialExtent.ymin) {
                newCenter.y = initialExtent.ymin;
            }
            if (currentCenter.y > initialExtent.ymax) {
                newCenter.y = initialExtent.ymax;
            }
            map.centerAt(newCenter);
        }
    });
}

Hier ist ein funktionierendes jsFiddle-Beispiel: http://jsfiddle.net/sirhcybe/aL1p24xy/

Chris
quelle