4

使用 JS ArcGis API 时,是否可以像这样在 ArcGis 中从 lat 和 long 创建一个点

var testPoint = new Point(-98, 38);

或这个

var testPoint = new Point(-98, 38, new SpatialReference({ wkid: 4326 }));

并将其转换为不同的 SR,以便其 x 和 y 自动更改?例如到 wkid 102000/3857?

上下文:(也许您可以找到解决方法)

我正在使用 heatmap.js 在 ArcGis 地图上绘制 heatmapLayers。我发现了一些示例,并且此 API 摄取数据的方式是使用data以下格式的变量:

var data = [
  {
    attributes: {},
    geometry: {
      spatialReference: { wkid: ****},
      type: "point",
      x: -40,
      y: 50
    }
  },
  {another point....}
];

API 本身对data变量进行一些解析,然后使用此方法

screenGeometry = esri.geometry.toScreenGeometry(this._map.extent, this._map.width, this._map.height, parsedData.data[xParsed][yParsed].dataPoint);

parsedData.data[xParsed][yParsed].dataPoint在最终绘制热图之前转换解析点 ( )。

主要问题是无论我传递什么wkid(之前的代码中的****),它都会将其解释为wkid:102000,这就是为什么我想事先自己进行坐标转换。

我想实际进行转换应该是esri.geometry.toScreenGeometry任务,但是,正如我所说,它忽略了 wkid。

先谢谢了

4

1 回答 1

6

esri.geometry.toScreenGeometry不是您要寻找的 - 将提供的几何图形转换为屏幕坐标(即像素),如果您尝试在地图上进行自定义叠加,或者控制与地图本身重叠的 HTML 元素,您可能会使用它。

您想要的函数是esri.geometry.webMercatorUtils.geographicToWebMercator,它以 lat/long 接收几何图形,并专门以 102100(或 3857)返回它,以便可以将其添加到标准 ESRI JS 地图中。来自 docco:

require([
  "esri/geometry/webMercatorUtils", ... 
], function(webMercatorUtils, ... ) {
  var geom = webMercatorUtils.geographicToWebMercator(candidate.location);
  ...
});

(有趣的是,这与 SO 上的大多数坐标系问题相反,人们在输入纬度/经度坐标时会问“为什么我的观点没有出现在地图上”。感谢找出它为什么没有出现。 :) )

于 2014-08-18T04:54:08.423 回答