ArcGIS API - 无法居中或缩放

ArcGIS API - Cannot center or zoom

所以,我正在使用 ARCGIS api 来显示一些旧地图,这些地图应该从中心开始并放大到某个城市。在最终弄清楚如何使用我想要的特定地图作为底图之后,我花了几个小时试图在正确的位置进行缩放和居中。我可以使用默认底图(例如 "streets")放大到这个地方,但不能使用我的自定义底图。 map.centerAndZoom 和 map.centerAt 我都试过了,但似乎都不起作用。相关代码:

var map;
    require(["esri/map", "esri/layers/ArcGISTiledMapServiceLayer", "dojo/on", "dojo/_base/json", "dojo/dom-style", "esri/request", "esri/geometry/Point", "esri/dijit/Search", "esri/dijit/LocateButton", "esri/tasks/GeometryService", "esri/tasks/locator", "esri/tasks/ProjectParameters", "esri/symbols/PictureMarkerSymbol", "dojo/domReady!"],
    function(Map, ArcGISTiledMapServiceLayer) {
        map = new Map("venster_Midden_2_Map");
        var customBasemap = new ArcGISTiledMapServiceLayer(
        "http://tiles.arcgis.com/tiles/nSZVuSZjHpEZZbRo/arcgis/rest/services/Historische_tijdreis_1815/MapServer");
        map.addLayer(customBasemap);
        map.centerAndZoom(51.1, 4.3, 0);
    });

有人知道如何使缩放和居中工作吗?还是某些地图根本不允许此类操作?

根据相关的 API documentation,centreAndZoom 方法将 Point 作为其第一个参数。此外,您的零缩放系数看起来可能会导致问题。

使用 Point 和非零缩放比例可能会更幸运,如下所示:

map.centerAndZoom(new Point(51.1, 4.3), 0.5);

该方法具有 Deferred return 类型,因此您可以提供回调以在方法调用完成时作出反应。

centerAndZoom 更适用于事件,例如当用户从列表中选择了某个城市并希望地图自动缩放到该城市时。 ,它也需要一个点,缩放级别为零将不起作用。

如果您根本不需要任何 Esri 底图,只需在最初创建地图时将其忽略即可。稍微修改 this Tiled Map Service sample:

  require(["esri/map", "esri/layers/ArcGISTiledMapServiceLayer", "dojo/domReady!"],
    function(Map, Tiled) {
      map = new Map("map", {zoom: 3});

      var tiled = new Tiled("http://tiles.arcgis.com/tiles/nSZVuSZjHpEZZbRo/arcgis/rest/services/Historische_tijdreis_1815/MapServer");
      map.addLayer(tiled);
    }
  );

然后,您将能够包含 centerAndZoom 作为对事件的响应(例如,在 Tiled 图层从其 Web 源完全加载之后)。

  require(["esri/map",
           "esri/layers/ArcGISTiledMapServiceLayer",
           "esri/geometry/Point",
           "esri/SpatialReference",
           "dojo/domReady!"],
    function(Map, Tiled, Point, SpatRef) {
      map = new Map("map", {zoom: 3});

      var tiled = new Tiled("http://tiles.arcgis.com/tiles/nSZVuSZjHpEZZbRo/arcgis/rest/services/Historische_tijdreis_1815/MapServer");
      map.addLayer(tiled);

      var cityCenter = new Point(121000, 495000, new SpatRef({ wkid: 28992 }));
      tiled.on("load",function(evt) {
        map.centerAndZoom(cityCenter, 6);
      });
    });

参考。 Point constructor, centerAndZoom method, and Working with events.

也许是 esri api 错误,对我来说,它有时(但不总是)无法在缩放级别 18 的经纬度移动地图中心

以下是我的解决方法:

推荐:

map.centerAndZoom(new Point(lng, lat), 18);

备选方案:(有时,并非总是如此,它无法移动地图,也许 ESRI 需要修复 Javascript api v3.24 的错误)

map.centerAt(new Point(lng, lat));
//or
// map.centerAt(new Point(lng, lat, new SpatialReference({wkid: 4326})));
map.setZoom(18);