0

我正在使用 ESRI JavaScript API v3.8。(我知道 3.11 已经发布 - 还不能升级。)

我要做的是从用户选择的任意线(或点)创建用户提供的大小的几何缓冲区。部分相关代码如下所示:

var params = new esri.tasks.BufferParameters();
params.distances = [values.distance]; //the input distance                  
params.geometries = [gr.geometry]; //the input geometry
params.unit = esri.tasks.GeometryService.UNIT_FOOT;
params.outSpatialReference = mapView.map.spatialReference; //always 3857
params.bufferSpatialReference = gr.geometry.spatialReference; //always 3857

esri.config.defaults.io.corsEnabledServers.push('mydomain.com');
esri.config.defaults.io.proxyUrl = 'https://serverdomain.com/proxy';

var gsvc = new esri.tasks.GeometryService('https://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer');                   

gsvc.simplify(params.geometries, function(geometries){
    params.geometries = geometries;                     
    gsvc.buffer(params, function(geometries){
        //add output geometry to the map and perform spatial query with it                                                  
    }, function(err){
        //handle error
    });                 

}, function(err){
    //handle error
});

问题是,如果我使用 500(英尺)的输入距离,然后使用 ESRI 的测量工具测量距输入几何体中心线的距离,则self._queryGeometry创建的多边形的实际宽度类似于 370 英尺中心线的一侧。

由于我的测试对象在伊利诺伊州,我已经设法使用伊利诺伊州平面空间参考更准确地工作,但逻辑需要在任何地方都有效。

当我尝试做测地线缓冲区的各种化身时,输入距离单位似乎被忽略了,使用输入距离值 500,我得到一个跨越整个世界的缓冲区!要么是这样,要么结果是完全一样的,这取决于事情是如何设置的。

我相信我需要做一个测地线缓冲区,但我完全不知道如何以几何服务真正关注我发送的单位的方式进行。

任何想法将不胜感激。让我知道我是否遗漏了什么。

4

1 回答 1

0

听起来某处可能存在空间参考问题。如果地图是这样,您可以尝试将几何图形重新投影到 3857 中,我会检查从缓冲区返回的几何图形并简化以确保它看起来像您期望的那样。我遇到了几何服务区域和长度返回稍微不正确的几何图形的问题,在我的情况下,它最终成为空间参考不正确的问题。另外,我知道你说你不能升级,但是 3.13 已经出来了,可以在本地做几何选项而不需要代理或任何网络请求,如果可能的话,值得一试。

于 2015-03-16T18:27:57.177 回答