• ArcGIS API4.X + API文档 本地部署(Tomcat)


    前言:

            js.arcgis.com有时候不太稳定,导致项目或者自己测试代码需要等待远程资源请求,体验感及其不好,能自己掌控的资源最好就别去拿在线的,当然服务器稳定就另当别论。(所以本地部署有两种含义:本机localhost、自己稳定的服务器)

    API部署

    1.准备API资源包

            大部分人容易被第一步劝退,我也是其中之一,多亏朋友们的帮助,这里我把包4.14版本放网盘了,不搞些虚头巴脑的付费下载,大家自取。

    链接:https://pan.baidu.com/s/1KbHC0mZXqTGS_7gXrk8BRA
    提取码:6666
     

            需要别的版本得去官网下载

    2.Tomcat部署

            Tomcat环境大家自己解决。跟部署项目或者war包一样,相信大家已经轻车熟路了。将API包放在webapps文件夹下。部署其实不是啥高大上的操作,就是将资源放到直接解析的文件夹下,最后访问的时候也是按照文件层级一级一级找所需要的文件。

            这里关键的核心文件就是这俩:

    第一个是功能型脚本文件,关乎后面esri-loader所有的类的引入

    第二个是全局样式文件,涉及arcgis所有官方默认样式

    所以下载下来API包后(无论是官网还是上面那个包),最主要的是去找4.14(4.X)这个文件夹

    1. aricgis_api_4.14/library/4.14/init.js
    2. aricgis_api_4.14/library/4.14/esri/css/main.css

    更改两个地方的路径:

    • \arcgis_js_api\library\4.14\init.js

    将https:[HOSTNAME_AND_PATH_TO_JSAPI]dojo替换成http://localhost:8080/arcgis_js_api/library/4.14/dojo

    • \arcgis_js_api\library\4.14\dojo\dojo.js

    将https:[HOSTNAME_AND_PATH_TO_JSAPI]dojo替换成http://localhost:8080/arcgis_js_api/library/4.14/dojo

    3.使用本地部署包

            这里采用esm方式引入,使用dojo外的esri-loader按需引入功能函数类。

            在main.js中使用esri-loader底层功能函数loadCss, loadScript全局预加载(预连接)资源。

    1. import { loadCss, loadScript } from "esri-loader";
    2. loadCss(`http://localhost:8080/aricgis_api_4.14/library/4.14/esri/css/main.css`)
    3. loadScript({
    4. url: `http://localhost:8080/aricgis_api_4.14/library/4.14/init.js`
    5. });

            如果不进行这一步,直接按照官网例子,最终是走js.arcgis.com的资源,具体可以看esri-loader这一块的源码。

            上面main.js预加载后,所有的资源请求都会走那个地址,上代码测试:

    测试前需要启动本地Tomcat

    1. <template>
    2. <div id="viewDiv"></div>
    3. </template>
    4. <script>
    5. import { loadModules } from "esri-loader";
    6. export default {
    7. name: "popup_geojson",
    8. mounted() {
    9. loadModules([
    10. "esri/views/MapView",
    11. "esri/Map"
    12. ]).then(
    13. ([
    14. MapView,
    15. MapImageLayer,
    16. GraphicsLayer,
    17. GeoJSONLayer,
    18. Sketch,
    19. Basemap,
    20. Map
    21. ]) => {
    22. const map = new Map({
    23. basemap: "satellite"
    24. });
    25. const view = new MapView({
    26. container: "viewDiv",
    27. map: map,
    28. zoom: 6,
    29. center: [114, 29]
    30. });
    31. }
    32. );
    33. }
    34. };
    35. </script>
    36. <style>
    37. #viewDiv {
    38. width: 100%;
    39. height: 100%;
    40. }
    41. </style>

             可以看到所有的请求全走本地(如果出现上图,表示成功),如果不本地部署会是下面这种情况

    文档部署

            API部署成功了的话,文档部署就是小菜一碟,步骤和部署API很相似,直接把解压后的Javascript文件夹丢到webapps下即可(端口不能被占用、记得重启服务器)。
            直接访问:http://localhost:8080/javascript/4.22/,本地嘎嘎快。

     案例也一样可以打开


     

    补充跨域设置

    不加的话容易出现图片图标等资源跨域

    在tomcat/config/web.xml中加入下面这段配置,加在哪都可以,按组加,别加到别的xml标签组里面

    1. <!-- 提供跨域支持 -->
    2. <filter>
    3. <filter-name>CorsFilter</filter-name>
    4. <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    5. <init-param>
    6. <param-name>cors.allowed.origins</param-name>
    7. <param-value>*</param-value>
    8. </init-param>
    9. <init-param>
    10. <param-name>cors.allowed.methods</param-name>
    11. <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    12. </init-param>
    13. <init-param>
    14. <param-name>cors.allowed.headers</param-name>
    15. <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    16. </init-param>
    17. <init-param>
    18. <param-name>cors.exposed.headers</param-name>
    19. <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    20. </init-param>
    21. <init-param>
    22. <param-name>cors.support.credentials</param-name>
    23. <param-value>false</param-value>
    24. </init-param>
    25. <init-param>
    26. <param-name>cors.preflight.maxage</param-name>
    27. <param-value>10</param-value>
    28. </init-param>
    29. </filter>
    30. <filter-mapping>
    31. <filter-name>CorsFilter</filter-name>
    32. <url-pattern>/*</url-pattern>
    33. </filter-mapping>

  • 相关阅读:
    安装Android SDK点击SDK Manager.exe一闪而退完美解决方案
    华融湘江银行正式更名湖南银行,周晖将出任该行行长一职
    您的企业内容管理(ECM)系统对敏感信息的保护程度如何?
    你的NET程序需要保护吗?Agile.net 6.6.X 注入式Crack
    华为机试 - 工号不够用了怎么办?
    【毕业设计】深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别
    k8s中的容器
    [SSM框架]—SpringMVC
    【JavaScript】-- 工厂模式&构造函数模式&原型模式
    iOS适配Unity-2019
  • 原文地址:https://blog.csdn.net/qq_46160082/article/details/128128567