如何获取 ESRI 地图 - Angular 的屏幕截图

2024-02-23

如何在 UI 上获取 Esri 地图当前状态的屏幕截图并将其从 Angular 下载为 Pdf? 以下代码是我当前的 .ts 代码,如果需要添加其他部分,请告诉我。

esri-map.component.html

<!-- Map Div -->
<div #mapViewNode></div>
 

esri-map.component.ts

// Initialize MapView and return an instance of MapView
    initializeMap(esriToken) {
    const container = this.mapViewEl.nativeElement;
    config.apiKey = esriToken;
    const horizonData: any[] = this.esiriData || [];

//load the webMap
const webmap = new WebMap({
      portalItem: {
        id: this.webMapId
      }
    });

// load the ParcelAtlas feature layer
const layer = new FeatureLayer({
    url: this.featureLayerUrl,
    });
  webmap.add(layer);

const view = new MapView({
  container,
  map: webmap,
  zoom: 4,
  center: [-97.63, 38.34],
});

//legend Icon
const legend = new Legend ({
  view: view
});
const legendExpand = new Expand(
  {
  view,
  content: legend,
  expanded: false,
})
view.ui.add(legendExpand, "top-left");

  const renderer = new SimpleRenderer({
    symbol: new TextSymbol({
      color: "red",
      text: "\ue61d",
      font: {
        size: 30,
        family: "CalciteWebCoreIcons"
    }
    })
  });

  const dataFeedLayer = new FeatureLayer({
  source: horizonData.map((d,i)=>(
  {
      geometry: new Point({
        longitude: d.longitude,
        latitude: d.latitude
      }),
      attributes: {
        ObjectID: i,
        ...d
      }
  }
)),
  objectIdField: 'ObjectID',
  geometryType: "point",
  renderer: renderer,
});

  webmap.add(dataFeedLayer);

  let options = {
    width: 2048,
    height: 2048
  };

  view.takeScreenshot(options).then(function(screenshot) {
    let imageElement = document.getElementById("screenshotImage");
    imageElement.src = screenshot.dataUrl;
  });
  this.view = view;

  return this.view.when();

  }

错误: 类型“HTMLElement”上不存在属性“src”。ts(2339)


您遇到的问题是因为您没有图像的节点,screenshotImage组件上没有。

我不确定你想如何显示图像,所以我将使用我为你制作的这个例子。

<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Screenshot Example</title>
    <style>
        html,
        body,
        #viewDiv {
            padding: 0;
            margin: 0;
            height: 100%;
            width: 100%;
        }
        #screenshotDiv {
            position: absolute;
            top: 0;
            right: 0;
            background-color: transparent;
            z-index: 1;
            display: flex;
            flex-direction: column;
        }
        .action-button {
            width: 200px;
            padding: 0.6em;
            border: 1px solid #0079c1;
            text-align: center;
            background-color: white;
            cursor: pointer;
        }
        .action-button:hover,
        .action-button:focus {
            background: #0079c1;
            color: white;
        }
    </style>

    <link rel="stylesheet" href="https://js.arcgis.com/4.18/esri/css/main.css">
    <script src="https://js.arcgis.com/4.18/"></script>

    <script>
        require([
            "esri/Map",
            "esri/views/MapView"
        ], function (Map, MapView) {

            const map = new Map({
                basemap: "streets-navigation-vector"
            });

            const view = new MapView({
                container: "viewDiv",
                map: map,
                zoom: 12,
                center: {
                    latitude: 32.7353,
                    longitude: -117.1490
                }
            });

            const btn = document.getElementById("screenshotBtn");
            const img = document.getElementById("screenshotImg");

            view.when(function() {
                btn.addEventListener("click", function() {
                    view.takeScreenshot({
                            width: 200,
                            height: 200
                        }).then(function(screenshot) {
                        img.src = screenshot.dataUrl;
                    });
                });
            });

        });
    </script>
</head>

<body>
    <div id="viewDiv" class="esri-widget">
        <div id="screenshotDiv">
            <button id="screenshotBtn" class="action-button esri-widget">
                Take Screenshot
            </button>
            <img id="screenshotImg"/>
        </div>
    </div>
</body>

</html>

我认为对 Angular 的翻译应该可行,

esri-map.component.html

<div #mapViewNode>
    <div class="screenshotDiv">
        <button class="action-button esri-widget" (click)="takeScreenshot()">
            Take Screenshot
        </button>
        <img [src]="screenshotImgSrc"/>
    </div>
</div>

esri-map.component.ts

takeScreenshot() {
    const self = this;
    this.view.takeScreenshot({
        width: 200,
        height: 200
    }).then(function(screenshot) {
        self.screenshotImgSrc = screenshot.dataUrl;
    });
}

takeScreenshot, view, and screenshotImgSrc需要是组件的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 ESRI 地图 - Angular 的屏幕截图 的相关文章

随机推荐

  • 如何在Meteor服务器中获取用户IP地址?

    我想在我的流星应用程序中的服务器端获取用户IP地址 以便我可以用一堆东西记录IP地址 例如 订阅邮件列表的非注册用户 或者只是做任何事情 重要的 我知道 当涉及反向代理时 服务器 看到 的 IP 地址可能与真实源地址不同 在这种情况下 X
  • MYSQL 中的规范化

    MySQL 中的规范化是什么 在什么情况下以及如何使用它 我尝试在这里用外行术语来解释标准化 首先 它适用于关系数据库 Oracle Access MySQL 因此它不仅仅适用于 MySQL 规范化是为了确保每个表具有唯一的最小字段并消除依
  • uint32_t 与 int 作为日常编程的约定

    什么时候应该使用 stdint h 中的数据类型 总是使用它们作为惯例是正确的吗 像 int 和 Short 这样的非特定大小类型的设计目的是什么 什么时候应该使用 stdint h 中的数据类型 当编程任务指定整数宽度时 特别是为了适应某
  • 在 Facebook 等 iOS 应用程序中预览嵌入链接

    我正在尝试以与 Facebook 相同的方式在 iOS 应用程序中嵌入链接预览 我正在尝试找到一种方法来获取最合适的图像 并返回其 url 页面标题 甚至可能是元描述并将其传递回应用程序 但我不确定最好的方法 有一些 API 可以做到这一点
  • 在 Tkinter 中拖放?

    在 tkinter 中完成拖放的正确 官方 正确 推荐的方法是什么 我的文档第 24 1 1 节包括 Tkdnd 对 Tkinter 的拖放支持 这是实验性的并且 当它被 Tk DND 取代时 它应该被弃用 但我找不到其他的official
  • 正则表达式仅允许数字或空字符串

    有人可以帮我创建这个正则表达式吗 我需要它来检查字符串是否完全是空白 空 或者是否只包含正整数 如果还有其他事情 那就失败了 这是我到目前为止所拥有的 s 0 9 0 9 您正在寻找 s d 如果您想要一个不带前导零的正数 请使用 1 9
  • 如何使用 Expo EAS 为 React Native 中的 组件启用动画 webp?

    使用 Expo EAS 构建时 动画 gif 在 Android 中可以工作 但动画 webp awebp 则不能 Why 如何让 awebp 工作 为什么 gif 动画可以用 但它却不起作用 React Native 有动画图像支持多种格
  • IntelliJ IDEA 和 Gradle:为什么每个子模块有 3 个模块?

    我对 IntelliJ IDEA 的 gradle 集成以及 gradle 子项目到 IDEA 模块的映射感到相当困惑 为什么每个 gradle 子项目都有 3 个模块 client client main 和 client test 有没
  • 停止异步 ISearchJob 的正确方法

    我要使用WUA API https msdn microsoft com en us library windows desktop aa387099 v vs 85 aspx并以这种方式开始执行异步搜索更新 CComPtr
  • python中比较两个列表的最佳算法

    我在 python 中有两个列表 list1 和 list2 其中填充了自己的数据类型 我想将它们与列表进行比较 并将这些列表的所有元素提供给标准输出 或其他地方 但以特定的顺序 不以任何方式对列表进行排序 List1 和 List2 可以
  • 通过 go-mssqldb 进行 golang SQL Server 查询

    我正在尝试查询SQL Server 2008 R2使用去 https github com denisenkom go mssqldb https github com denisenkom go mssqldb SQL Server 20
  • 不存在的目录/文件 Web API(非控制器)的自定义错误页面

    我知道我可以为不存在的控制器或错误的路由设置自定义错误页面 但是如果用户尝试下载某个目录中不存在的文件 如何显示自定义错误页面 我根本无法让它发挥作用 它仍然显示默认错误页面 这篇博文将引导您处理 ASP Net Web API 中的 40
  • 在浏览器中显示 Xquery (.xq) 文件

    我对编程很陌生 对 xml xquery 也很陌生 我有一个 xq 文件 带有 html 和 xquery 代码 和 xml 文件 用于存储数据 在测试时 我可以使用 stylus studio 查看 xq 页面的显示方式 但我无法使用网络
  • MPlayer 如何识别 MJPEG 流?

    由于 MJPEG over http 基本上包括传输由定义的分隔符分隔的一系列 JPEG 图像 MPlayer 如何识别它是 MJPEG 流 谢谢 看一下 MplayerMjpegStreamViewing http www lavrsen
  • web.config 反斜杠出现两次 Visual Studio 2010

    我有一个在 Visual Studio 2008 中制作的 asp net Web 应用程序 一切都工作得很好 直到我切换到 VS 2010 当发生这种情况时 我开始看到数据库连接字符串出现一些奇怪的行为 该字符串 已编辑 但格式相同 如下
  • x86-64 中 movq 和 movabsq 的区别

    我说的是 x86 64 Intel 架构中的数据移动指令 我读过 常规的movq指令只能具有可表示为 32 位二进制补码数的立即源操作数 而movabsq指令可以将任意 64 位立即数作为其源操作数 并且只能将寄存器作为目标 您能详细说明一
  • Docker-compose:如何使用相同的网络地址从容器和主机访问 Localstack 资源

    我使用 docker compose 在 2 个独立的容器中运行 python API 和 Localstack 实例 以进行本地开发 该 API 有一个端点 可生成预签名的 AWS S3 URL 并重定向用户 以便直接从 S3 加载图像
  • 如何从私有模块中的公共函数引用私有类型?

    我想将类似的函数分组在一个文件中 这些函数需要返回一个非公开的类型 struct MyStruct mod my mod use super MyStruct There are other similar functions that a
  • 通过 INavigationProvider 将菜单项添加到主菜单但不显示?

    使用 Orchard cms 1 5 1 我创建了一个模块 其中包含从 Web 服务获取列表的控制器 我想在启用此模块时在主菜单中添加一个菜单项 为此我创建了 主菜单如下 public class MainMenu INavigationP
  • 如何获取 ESRI 地图 - Angular 的屏幕截图

    如何在 UI 上获取 Esri 地图当前状态的屏幕截图并将其从 Angular 下载为 Pdf 以下代码是我当前的 ts 代码 如果需要添加其他部分 请告诉我 esri map component html div div esri map