【问题标题】:Esri Map Zoom to Certain PointEsri 地图缩放到某个点
【发布时间】:2015-03-09 09:46:46
【问题描述】:

我在尝试将地图设置为缩放到某个点时遇到了一些问题。以下是我使用 Esri 基本地图和 OneMap 地图叠加层设置地图的方法:

function setMap() {
function init() {
    require(
        [
            "esri/map",
            "dojo/dom-construct",
            "esri/geometry/Point", 
            "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol",
            "esri/graphic", "esri/Color","esri/tasks/ProjectParameters",
            "dojo/domReady!"
        ],
        function 
        (
            Map, domConstruct, Point,
            SimpleMarkerSymbol, SimpleLineSymbol,
            Graphic, Color,ProjectParameters
        ) {
            map = Map("map-canvas",
            {
            });
            map.setZoom(0);
            coreFunctions();
        });
    // Get current location
    map.on("load", getCurrentLoc);
}
dojo.ready(init);
gsvc = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
}

我添加了一个叠加层:

function addLayersToData() {
    var layer = new esri.layers.ArcGISTiledMapServiceLayer("https://www.onemap.sg/ArcGIS/rest/services/BASEMAP/MapServer");
    mapLayers.push(layer);
}

以及我将地图设置为缩放到某个点的方法:

function zoomPostal(postalCode) {
 $.getJSON("http://www.onemap.sg/API/services.svc/basicSearch?token=qo/s2TnSUmfLz+32CvLC4RMVkzEFYjxqyti1KhByvEacEdMWBpCuSSQ+IFRT84QjGPBCuz/cBom8PfSm3GjEsGc8PkdEEOEr&searchVal="
                        + postalCode
                        + "&otptFlds=SEARCHVAL,CATEGORY&returnGeom=0&rset=1", function (data) {

    esriConfig.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
    var loc = new esri.geometry.Point({ "x": data.SearchResults[1].X, "y": data.SearchResults[1].Y, "spatialReference": { "wkid": 3414 } });           

    var params = new esri.tasks.ProjectParameters();
    params.geometries = [loc.geometry];
    params.outSR = map.spatialReference;
    esri.config.defaults.geometryService.project(params, function (loc) {
        map.centerAndZoom(loc[0],12);
    });

    });
}

到目前为止,我知道使用 setZoom 将地图缩放到某个级别,但我不知道如何将其缩放到某个点。有任何想法吗?

提前致谢。

【问题讨论】:

  • @KonradKrakowiak 有什么想法吗?
  • 对不起,没有。我是安卓开发者。我刚刚读了你的问题。但是我把你的问题分享给我的朋友,也许他会给你一些帮助。
  • @KonradKrakowiak 好的,你的朋友知道怎么做吗?
  • 他在下面回答了你。 Sebastian Mękal 是我的朋友。
  • @KonradKrakowiak 您好,但是您朋友的回答导致了一些错误消息。你能帮我让他解释一下他提供的答案吗?

标签: javascript maps arcgis esri arcgis-js-api


【解决方案1】:

正确的方法是按照 Sebastian 的建议使用 centerAndZoom(mapPoint, levelOrFactor)。您得到的错误是关于几何的空间参考与地图的空间参考不同的事实。所以只需调用一个几何服务来首先隐藏几何。

https://developers.arcgis.com/javascript/jsapi/geometryservice-amd.html#project

                  require([
                        "esri/tasks/ProjectParameters"
                    ], function (ProjectParameters) {
                        var params = new ProjectParameters();
                        params.geometries = [loc.geometry];
                        params.outSR = map.spatialReference;

                       // params.transformation = transformation;

                            esri.config.defaults.geometryService.project(params, function (projectedPoints) {

                                map.centerAndZoom(projectedPoints[0],levelofyourchoice);

                            });
                    });

如果您没有基准转换,则不需要转换。

在这里查看:https://developers.arcgis.com/javascript/jsapi/projectparameters-amd.html#transformation

添加这个来实例化你的几何服务:

require(["esri/tasks/GeometryService"], function(GeometryService) {   esriConfig.defaults.geometryService = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");});

【讨论】:

  • 图形变量有什么作用?另外,我应该如何将您提供的解决方案实施到我的 zoomToPostal() 函数中?因为我只根据用户输入进行缩放,而不是在地图首次加载时进行缩放:(
  • 当我尝试实施您的解决方案时,我得到了提示,并且选择未定义错误消息
  • 我删除了 var 图。是的,您可以在 zoomPostal () 函数中实现它。只需将其全部复制并用数字替换“levelofyourchoice”。记得创建geometryService。查看链接和 esri 帮助了解详细信息。
  • @dilmos 但是重点和选择是什么?这两个变量的任何声明?因为当我尝试跑步时,我得到了未定义的点和选择
  • @dilmos 我的意思是point.geometry 和choice.transformation。它们是干什么用的?
【解决方案2】:

也许答案为时已晚,但我找到了合适的方法:

var point = yourPoint;
var offset = 5; // choose your offset for displaying your point
map.setExtent(new esri.geometry.Extent(point.x - offset, point.y - offset, point.x + offset, point.y + offset, new esri.SpatialReference(map.spatialReference));
map.centerAt(point) // it's kind of useless

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2013-07-27
    • 2014-12-21
    • 1970-01-01
    • 2015-07-09
    相关资源
    最近更新 更多