ArcGIS Javascript APIでのLat, LngとXYZとの相互変換

距離を考慮した計算が必要なときは、XY座標系に直してから計算しないと多分だめなので、 現在表示している地図上のXY座標系と、Lat, Lng(緯度経度)とを相互変換する方法を調べてみました。

緯度経度からXY座標へ

import * as webMercatorUtils from "@arcgis/core/geometry/support/webMercatorUtils";

webMercatorUtils.lngLatToXY(lng, lat)

自分の環境だとXY座標の単位はメートル?と勘違いしたが、メートルではなさそう。座標値あたりの距離は緯度によって距離は変わってきそう。 距離を指定して、次の点を求めることはできるのかな。。。

XY座標から緯度経度へ

import * as webMercatorUtils from "@arcgis/core/geometry/support/webMercatorUtils";

webMercatorUtils.xyToLngLat(x, y)

表示画面内の変換

function xyToLatLng(view: SceneView, x: number, y: number) {
  const pt = view.toMap({ x, y });
  const { longitude, latitude } = pt;
  return { longitude, latitude };
}

function latLngToXY(view: SceneView, latitude: number, longitude: number) {
  const { x, y } = view.toScreen(new Point({ latitude, longitude }));
  return {x, y};
}

ブラウザ内に表示している範囲においてのみ変換ができましたが、 画面範囲になると負の値になったり、nullが帰ってきたりでうまく機能しないことがあります。

References

https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-webMercatorUtils.htmldevelopers.arcgis.com https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.htmldevelopers.arcgis.com