最近在研究 ArcGIS 导出地图功能,折腾了许久,终于完成了。

ArcGIS 自带的打印功能

ArcGIS Server 自带了一个打印地图服务。

ArcGIS Server 自带打印地图服务

ArcGIS API for JS 3.31 附带了 3 个示例。

ArcGIS API for JS 自带打印示例

这三个示例都是调用 ArcGIS Server 自带的打印地图服务实现导出地图的。这三个示例使用的主要 API 是:

// 打印组件

使用ArcGIS自带的打印组件会受到一些限制:

(1)打印操作过程不是我想要的;

(2)打印组件界面样式不是我想要的。

(3)只能打印网页显示范围的底图。

(4)打印尺寸受限。

即使自己发布一个地图打印服务,也只能调整模板。其他的改变不了。

Arcgis API for JS地图打印服务​blog.csdn.net

仔细思考解决办法:

打印服务是一个GP服务。有四个参数。自己发布的打印服务也有这 4 个参数。

打印服务中对于参数的介绍
ArcGIS 帮助文档对于导出Web地图工具的参数介绍

通过浏览器开发者工具查看官方示例请求打印时传递的参数可以发现 4 个参数中的 3 个。

官方打印示例请求参数

请求返回结果中带了一个 4 个参数中的 1 个。打印得到文件路径在请求结果中。

官方打印示例请求结果

是不是可以自己调用GP服务来实现?

尝试自己创建一个 GP 请求,参数和管网刚才的请求参数完全一样,看看效果。

// 构造 GP 请求的代码
require(["esri/map","esri/layers/FeatureLayer","esri/tasks/Geoprocessor","esri/config","dojo/_base/array","dojo/dom","dojo/parser","dijit/layout/BorderContainer","dijit/layout/ContentPane","dojo/domReady!"
], function (Map,FeatureLayer,Geoprocessor,esriConfig,arrayUtils,dom,parser
) {parser.parse();var map = new esri.Map("map", {basemap: "topo",center: [-117.447, 33.906],zoom: 17,slider: false});var webJSON = {"mapOptions": {//..},"operationalLayers": [//..],"exportOptions": {// ..},"layoutOptions": {//..}};window.ExportWebMap = function () {var params = {"f": "json","Web_Map_as_JSON": JSON.stringify(webJSON),"Format": "jpg","Layout_Template": "A3 Landscape"};console.log("params", params);var exportMapUrl = "http://localhost:6080/arcgis/rest/services/GP/ExportWebMap3/GPServer/%E5%AF%BC%E5%87%BA%20Web%20%E5%9C%B0%E5%9B%BE";var gp = new Geoprocessor(exportMapUrl);console.log("开始调用GP...");gp.submitJob(params).then(function (data) {console.log("data", data);gp.getResultData(data.jobId, "Output_File", function (outputpath) {console.log("outputfile", outputpath);});},function (error) {console.log("error", error);},function (status) {console.log("status", status);});}
});

打印结果和管网示例一样。

所以,可以自己构造 GP 请求,自己控制打印的执行过程。

接下来,要解决 GP 请求参数如何生成的问题。

示例程序中的参数生成过程完全看不到。只能仔细观察这些参数看看有什么特征。

Format 、Layout_Template、f 这三个很简单,看看文档仔细了解一下即可。关键是 Web_Map_as_JSON 这个参数。

这个参数包含 4 个部分。

"mapOptions": {//..
},
"operationalLayers": [//..
],
"exportOptions": {// ..
},
"layoutOptions": {//..
}

mapOptions 就是导出的范围,空间参考,比例尺。

mapOptions

exportOptions 就是输出的文件的图像的尺寸、dpi。

exportOptions

layoutOptions 包含图像标题、版权、图例、比例尺等布局的参数。

layoutOptions

查看示例代码打印的过程,确实是发送了带服务指定参数的请求。只是请求参数组织过程封装了。我们可以尝试自己组织请求参数,使用GeoProcessor发送一个GP请求。

operationalLayers 包含了图层相关的数据。

Web_Map_as_JSON 中最难的应该就是 operationalLayers 参数的生成。

底图的参数比较好生成,就是 url 、id、maxScale 之类的。

FeatureLayer 的 renderer 参数比较难,研究了很久发现可以通过

FeatureLayer.toJson().layerDefinition.drawingInfo.renderer

得到。

所以,研究到这里,可以实现自己组织参数、自己控制打印过程了。本文开头提到的问题中的前 3 个已经解决。

接下来解决打印尺寸受限问题。

经过前面的分析知道 exportOptions 和 Layout_Template 是控制打印的尺寸的。所以我们研究这个参数即可。

经过测试发现当 outputSize 为 [null, null], Layout_Template为空字符时,可以不限制尺寸打印。

到此,问题全部解决了。

arcgis server发布服务地图不显示_ArcGIS API for JS 导出地图,不限制尺寸相关推荐

  1. ArcGIS Server发布服务失败解决办法及ArcGIS Server for Javascript影像图层加载透明度设置(2021.2.12)

    Windows更新或者安装应用导致的ArcGIS Server发布服务失败解决方案及WCS影像图层加载到网页地图后的透明度设置 1.前提环境 2.ArcGIS中发布服务到ArcGIS Server失败 ...

  2. Arcgis Server 发布服务报错Failed to start the server machine ‘XXX‘. Error while starting AppServer. Requir

    Arcgis Server 发布服务报错 Failed to start the server machine 'XXX'. Error while starting AppServer. Requi ...

  3. Arcgis Server发布服务

    提到Arcgis Server 服务的发布,做起来貌似很简单,就算电脑再卡,只要鼠标还能点,一个小时肯定能搞定,但是当你遇到问题的时候,就头大了,也许搞上个一两天都摸不着头脑,最后你采取的措施可能是一 ...

  4. 一、ArcGIS Server篇:利用ArcGIS Server发布动态地图服务

    写在前面的话:本篇博客参考 在WebGIS开发过程中,我们所需要的数据不仅仅来自于ArcGIS online,有时候我们需要发布自己的数据服务,在本篇博客中主要说明一下如何利用ArcGIS Serve ...

  5. 使用ArcGIS Server发布我们的数据

    原文:使用ArcGIS Server发布我们的数据 引言 上一篇我们已经安装好了ArcGIS体系的服务软件,这一篇将介绍如何把我们自己的数据通过ArcGIS Server发布出去,并且能够通过Web页 ...

  6. Arcgis Javascript那些事儿(一)--Arcgis server发布feature access服务

    1.什么是要素服务? 要素服务可用来通过 Internet 提供要素,并提供显示要素时所要使用的符号系统.之后,客户端可执行查询操作以获取要素,并执行相应的编辑操作.要素服务提供了可用于提高客户端编辑 ...

  7. arcgis server发布shp服务实现数据库更新后服务也相应更新数据

    arcgis server发布shp服务实现数据库与服务同步更新数据 1 前言 2 shp文件条件准备>使用arc Map 打开shp文件 3 托管关联数据库 4 发布服务 1 前言 现在有一个 ...

  8. ArcGIS Server GP服务操作步骤

    ArcGIS Server GP服务操作步骤 实例1:通过光缆名称,查询光缆经过的管段.人井.站点. 实例2:基站密度,基站分布情况用不同的颜色表示 操作步骤如下: 1 模型的构建 1.1 新建工具箱 ...

  9. 高德地图Web端JavaScript API开发(二)---在地图上绘制(点标注)

    使用高德地图在很多时候需要在地图上标记位置,并且很多时候需要用到自定义的图标去完成这种位置的标记. 当然,这些功能高德地图都为我们准备了,比如常用的地图覆盖物Marker和信息窗体等.这里就先说一下点 ...

最新文章

  1. 电脑蓝屏问题检查、解决、
  2. 基于二代和三代测序技术的柚子基因组混合拼装
  3. 例说DNS递归/迭代名称解析原理
  4. extern “C”的作用详解
  5. shell kill
  6. redis基础之订阅发布、主从复制和事务(四)
  7. arima 预测模型_预测未来:学习使用Arima模型进行预测
  8. 【网络流24题】【LOJ6224】深海机器人问题(最大费用最大流)
  9. 【leetcode】423. Reconstruct Original Digits from English
  10. 为什么要使用Elasticsearch?
  11. esp8266等待上电同步_[网络篇]ESP8266-NonOS学习笔记(三)之TCP通信Serverlt;-gt;Client
  12. java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
  13. Linux 设备驱动的固件加载-转载
  14. word图片居中, 实际没效果解决、行间距无效果
  15. SpaceX星链技术取代不了5G,但会让打仗变成打游戏
  16. 英语四级考试在即,这几个超有用的App赶紧用起来,顺利考过四级
  17. MISC之常用编码总结
  18. Chrome保存的知乎网页,本地打开后闪频刷新问题处理
  19. (六)Python查询12306余票:升级版-----图形化界面代码
  20. 《数据时代 2025》报告-2017年版

热门文章

  1. 【干货】完美日记增长策略深度研究报告.pdf(附下载链接)
  2. 【推荐算法】知识驱动的智能化推荐算法(附交流视频和PPT下载链接)
  3. 推荐系统用户行为分析
  4. 使用方法_山西硅肥使用方法
  5. TikTok 已经成为影响力营销的新战场
  6. 数学建模7 多元线性回归分析
  7. SpringBoot指南(七)——SpringBoot整合Mybatis
  8. 吴恩达机器学习(十一)K-means(无监督学习、聚类算法)
  9. Linux学习总结(四十四)lnmp之php-fpm相关配置
  10. SpringBoot实战教程(1)| 整合Swagger3.0.0