【问题标题】:Get coodinate from each point of the polygon on ArcGIS?从 ArcGIS 上多边形的每个点获取坐标?
【发布时间】:2021-12-05 08:02:41
【问题描述】:

我正在使用 ArcGIS API for JavaScript。我想知道在我使用 ArcGiS API 中的 Sketch 工具绘制之后,我可以使用什么功能来获取每个顶点的坐标?

更新

我尝试使用 webmercator 方法,但它一直出现这个错误给我 "webMercatorUtils.webMercatorToGeographic 不是函数"

这是我为解析它而编写的代码。

 sketch.on("create", (e: __esri.SketchCreateEvent) => {

    if (e.state === "complete") {
      // this.rings = e.graphic.geometry.toJSON().rings.webMercatorUtils.webMercatorToGeographic();

      this.rings = webMercatorUtils.webMercatorToGeographic(e.graphic.geometry);
    }
  });

错误

【问题讨论】:

    标签: gis arcgis arcgis-js-api


    【解决方案1】:

    Sketch 小部件有一系列事件,您可以绑定这些事件来获取您要查找的信息。

    在你的情况下,使用create 事件。

    ArcGIS API - Sketch

    看看我给你的这个简单的例子。

    <html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
      <title>Sketch</title>
      <style>
        html, body, #viewDiv {
          padding: 0;
          margin: 0;
          height: 100%;
          width: 100%;
        }
      </style>
    
      <link rel="stylesheet" href="https://js.arcgis.com/4.21/esri/css/main.css">
      <script src="https://js.arcgis.com/4.21/"></script>
    
      <script>
        require([
            "esri/widgets/Sketch",
            "esri/Map",
            "esri/layers/GraphicsLayer",
            "esri/views/MapView"
          ], (Sketch, Map, GraphicsLayer, MapView) => {
            const graphicsLayer = new GraphicsLayer();
    
            const map = new Map({
              basemap: "topo-vector",
              layers: [graphicsLayer]
            });
    
            const view = new MapView({
              container: "viewDiv",
              map: map,
              zoom: 5,
              center: [90, 45]
            });
    
            view.when(() => {
              const sketch = new Sketch({
                layer: graphicsLayer,
                view: view
              });
              sketch.on("create", function(event) {
                if (event.state === "complete") {
                  console.log(event.graphic.geometry.toJSON());
                }
              });
              view.ui.add(sketch, "top-right");
            });
          });
      </script>
    </head>
    <body>
      <div id="viewDiv"></div>
    </body>
    </html>

    更新

    这里是相同的代码,除了将几何从 WebMercator(wkid 102100 或 3857)转换为地理(wkid 4326)

    <html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
      <title>Sketch</title>
      <style>
        html, body, #viewDiv {
          padding: 0;
          margin: 0;
          height: 100%;
          width: 100%;
        }
      </style>
    
      <link rel="stylesheet" href="https://js.arcgis.com/4.21/esri/css/main.css">
      <script src="https://js.arcgis.com/4.21/"></script>
    
      <script>
        require([
            "esri/widgets/Sketch",
            "esri/Map",
            "esri/layers/GraphicsLayer",
            "esri/views/MapView",
            "esri/geometry/support/webMercatorUtils"
          ], (Sketch, Map, GraphicsLayer, MapView, webMercatorUtils) => {
            const graphicsLayer = new GraphicsLayer();
    
            const map = new Map({
              basemap: "topo-vector",
              layers: [graphicsLayer]
            });
    
            const view = new MapView({
              container: "viewDiv",
              map: map,
              zoom: 5,
              center: [90, 45]
            });
    
            view.when(() => {
              const sketch = new Sketch({
                layer: graphicsLayer,
                view: view
              });
              sketch.on("create", function(event) {
                if (event.state === "complete") {
                  console.log(event.graphic.geometry.toJSON());
                  console.log(webMercatorUtils.webMercatorToGeographic(event.graphic.geometry).toJSON());
                }
              });
              view.ui.add(sketch, "top-right");
            });
          });
      </script>
    </head>
    <body>
      <div id="viewDiv"></div>
    </body>
    </html>

    【讨论】:

    • 非常感谢,还有一个问题。您知道如何在所选区域中实现弹出模板吗?
    • 顺便说一句,控制台中显示的值是什么值?它是地理坐标还是其他类型或值?因为我得到的值是(11326141.897662453、348220.3335735654),我在谷歌地图中找不到位置
    • 嗨,这些坐标是网络墨卡托,网络地图的“事实上”投影.. 如果您需要地理坐标(纬度、经度),则需要转换几何,例如使用 webMercatorToGeographic 方法
    • 使用open方法打开视图弹出窗口
    • 我已经发现了问题。似乎是 esri-loader 库问题的问题。如果使用 esri-loader,它无法加载 webMercatorUtils 库。在我删除加载器并使用 ESM 模块导入所有库后问题解决了
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2019-12-27
    • 2015-08-08
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多