转换ArcGis地理坐标Lat Long wkid:4326到投影坐标wkid:102000/3857

AzI*_*z00 4 javascript esri arcgis heatmap arcgis-js-api

使用JS ArcGis API时,是否可以在lat中创建一个点,并且像这样长

var testPoint = new Point(-98, 38);
Run Code Online (Sandbox Code Playgroud)

或这个

var testPoint = new Point(-98, 38, new SpatialReference({ wkid: 4326 }));
Run Code Online (Sandbox Code Playgroud)

并将其转换为不同的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....}
];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

先谢谢,

Juf*_*ffy 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);
  ...
});
Run Code Online (Sandbox Code Playgroud)

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