ArcGIS API - 无法居中或缩放

时间:2015-11-07 17:06:42

标签: javascript zoom center arcgis arcgis-js-api

所以,我正在使用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);
    });

有没有人知道如何让变焦和中心工作?或者某些地图根本不允许这样的操作?

3 个答案:

答案 0 :(得分:1)

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

如果您根本不想要任何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图层之后)。

  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 constructorcenterAndZoom methodWorking with events

答案 1 :(得分:0)

从相关的API documentation中心和Zoom方法中,将Point作为其第一个参数。您的缩放系数为零似乎可能会导致问题。

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

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

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

答案 2 :(得分:0)

也许这是esri api bug,对我来说,它有时(但并非总是)无法移动地图中心在lng,lat与缩放级别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);