所以,我正在使用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);
});
有没有人知道如何让变焦和中心工作?或者某些地图根本不允许这样的操作?
答案 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
constructor,centerAndZoom
method和Working 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);