转换ArcGis地理坐标长wkid: 4326投影坐标wkid: 102000/3857

Convert ArcGis Geographic Coordinates Lat Long wkid: 4326 to Projected Coordinates wkid: 102000/3857

本文关键字:坐标 wkid 投影 102000 3857 4326 ArcGis 转换      更新时间:2023-09-26

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

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

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

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

CONTEXT:(也许你可以找到一个解决方法)

我使用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。

事先致谢

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

你想要的函数是esri.geometry.webMercatorUtils.geographicToWebMercator,它在lat/long中接受一个几何形状,并在102100(或3857)中返回它,这样它就可以被添加到一个标准的ESRI JS地图中。来自文档:

require([
  "esri/geometry/webMercatorUtils", ... 
], function(webMercatorUtils, ... ) {
  var geom = webMercatorUtils.geographicToWebMercator(candidate.location);
  ...
});
(有趣的是,这与SO上的大多数坐标系统问题相反,在那里人们问"为什么我的点没有出现在地图上",当他们输入晚/长坐标时。找出了它不出现的原因,值得称赞。:))