ArcGIS JS 基础教程(25):GeoJSONLayer 与 KML 图层

发布时间:2026/9/22 23:17:36

ArcGIS JS 基础教程(25):GeoJSONLayer 与 KML 图层 ArcGIS JS 基础教程25GeoJSONLayer 与 KML 图层零、写在前面一、功能介绍二、功能实现2.1 GeoJSONLayer 在 3D 中加载推荐做法2.2 KMLLayer 的现状仅 2D三、功能应用四、核心代码五、在线示例六、关键 API 说明七、系列导航零、写在前面本系列教程完整目录ArcGIS JS 系列基础教程100个项目常用热门功能在线示例完整可运行的 HTML 示例无需任何环境配置可直接在浏览器中打开体验️专栏导航收藏 关注专栏文章第一时间送达❤️一键三连点赞 评论 收藏一、功能介绍GeoJSONLayer与KMLLayer都属于无需发布 ArcGIS 服务即可直接加载的外部矢量数据图层非常适合快速集成第三方开源数据。GeoJSONLayer解析符合 RFC 7946 规范的 GeoJSON 文件点/线/面支持远程 URL 或内存 Blob。在 3D 中通过elevationInfo控制要素高程完全支持 SceneView。KMLLayer解析 KML/KMZ 文件Google Earth 格式。⚠️关键限制务必注意根据官方文档KMLLayer当前不支持在SceneView三维中使用仅能在 2DMapView中加载。因此在「三维专项」教程中本课以GeoJSONLayer 的三维用法为重点并说明 KML 在三维场景中的现状与替代方案将 KML 转换为 GeoJSON 后再加载。参考GeoJSONLayer API | KMLLayer API二、功能实现2.1 GeoJSONLayer 在 3D 中加载推荐做法constGeoJSONLayerawait$arcgis.import(arcgis/core/layers/GeoJSONLayer.js);constgeojsonLayernewGeoJSONLayer({url:https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson,copyright:USGS Earthquakes,elevationInfo:{mode:on-the-ground},// 三维必备要素贴地renderer:{type:simple,symbol:{type:point-3d,symbolLayers:[{type:object,resource:{primitive:sphere},anchor:bottom,material:{color:[255,80,0,0.85]}}]},visualVariables:[{type:size,field:mag,axis:all,stops:[{value:1,size:6000},{value:3,size:20000},{value:6,size:45000}]}]},popupTemplate:{title:地震 M{mag},content:深度{depth} kmbr地点{place}}});map.add(geojsonLayer); 在 3D 中务必设置elevationInfo否则要素放置位置不确定effect/featureEffect在 3D 中不支持。2.2 KMLLayer 的现状仅 2D// ⚠️ 以下代码只能在 2D MapView 中运行SceneView 会报错/不显示constKMLLayerawait$arcgis.import(arcgis/core/layers/KMLLayer.js);constkmlLayernewKMLLayer({url:http://quickmap.dot.ca.gov/data/lcs.kml// 必须公网可访问});map.add(kmlLayer);三维替代方案将 KML/KMZ 转换为 GeoJSON如使用tokml/ogr2ogr/ 在线转换工具再用上面的GeoJSONLayer在 SceneView 中加载即可获得完整的三维能力。三、功能应用应用场景图层说明政府开放数据快速上图GeoJSON行政区边界/业务面状数据直接叠加到 3D 场景地震/气象实时点位GeoJSON远程 feed 3D 符号 按量级拉伸大小跨平台数据交换GeoJSON与开源生态无缝对接Google Earth 成果迁移KML→GeoJSON先转 GeoJSON 再进 3D 场景四、核心代码完整代码已保存至sample/lesson25_geojson_kml.html可直接在浏览器打开GeoJSON 三维示例。!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8metanameviewportcontentwidthdevice-width, initial-scale1.0title第25课GeoJSONLayer 与 KML 图层/titlelinkrelstylesheethrefhttps://js.arcgis.com/5.0/esri/themes/light/main.cssscripttypemodulesrchttps://js.arcgis.com/5.0//scriptstyle*{margin:0;padding:0;box-sizing:border-box;}body{font-family:Microsoft YaHei,sans-serif;}#mapContainer{width:100vw;height:100vh;}.page-title{position:absolute;top:20px;left:50%;transform:translateX(-50%);background:rgba(255,255,255,0.95);padding:10px 24px;border-radius:6px;font-size:18px;font-weight:bold;z-index:100;box-shadow:0 2px 8pxrgba(0,0,0,0.15);}.control-panel{position:absolute;top:80px;right:20px;background:rgba(255,255,255,0.95);padding:16px;border-radius:8px;box-shadow:0 2px 12pxrgba(0,0,0,0.15);z-index:100;min-width:300px;}.control-panel h3{margin:0 0 8px 0;font-size:14px;color:#333;}.section{margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid #eee;}.section:last-child{border-bottom:none;margin-bottom:0;}.btn-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px;}.btn-row button{flex:1;min-width:60px;padding:6px 0;border:1px solid #d9d9d9;border-radius:4px;background:white;cursor:pointer;font-size:12px;}.btn-row button:hover{border-color:#1890ff;color:#1890ff;}.btn-row button.on{background:#1890ff;color:white;border-color:#1890ff;}.info-card{margin-top:10px;padding:10px 12px;background:#f0f5ff;border-radius:6px;border-left:3px solid #1890ff;font-size:12px;line-height:1.6;}.info-card .val{font-weight:bold;color:#1890ff;}.status-text{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,0.7);color:white;padding:8px 20px;border-radius:20px;font-size:13px;z-index:100;pointer-events:none;white-space:nowrap;}/style/headbodyh1classpage-title第25课GeoJSONLayer 与 KML 图层/h1divclasscontrol-paneldivclasssectionh3 GeoJSONLayer3D 地震点位/h3divclassbtn-rowbuttonidbtnVisibleclasson️ 显示 / 隐藏/buttonbuttonidbtnFlyTo 飞到全球视角/button/div/divdivclasssectionh3⚠️ KML 说明/h3divclassinfo-carddivKMLLayerspanclassval不支持 SceneView/span/divdiv三维中请先将 KML 转为 GeoJSON/div/div/divdivclassinfo-carddiv图层状态spanclassvalidlayerStatus加载中.../span/divdiv点击球体查看地震信息 ↑/div/div/divdivclassstatus-textidstatusTextGeoJSONLayer | 3D 地震点位 · 按震级拉伸球体大小/divdividmapContainer/divscripttypemoduleconstMapawait$arcgis.import(arcgis/core/Map.js);constSceneViewawait$arcgis.import(arcgis/core/views/SceneView.js);constGeoJSONLayerawait$arcgis.import(arcgis/core/layers/GeoJSONLayer.js);constgetTiandituawait$arcgis.import(https://openlayers.vip/examples/resources/tianditu.js);constvecLayersgetTianditu.default({type:vec_w});constmapnewMap({basemap:{baseLayers:[vecLayers.base,vecLayers.anno]}});constviewnewSceneView({container:mapContainer,map:map,camera:{position:{longitude:120,latitude:30,z:12000000},heading:0,tilt:0}});window.viewview;// GeoJSONLayerUSGS 全球地震3D constgeojsonLayernewGeoJSONLayer({url:https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson,copyright:USGS Earthquakes,elevationInfo:{mode:on-the-ground},renderer:{type:simple,symbol:{type:point-3d,symbolLayers:[{type:object,resource:{primitive:sphere},anchor:bottom,material:{color:[255,80,0,0.85]}}]},visualVariables:[{type:size,field:mag,axis:all,stops:[{value:1,size:6000},{value:3,size:20000},{value:6,size:45000}]}]},popupTemplate:{title:地震 M{mag},content:深度{depth} kmbr地点{place}}});map.add(geojsonLayer);view.when((){geojsonLayer.when((){document.getElementById(layerStatus).textContent已加载;view.goTo(geojsonLayer.fullExtent);}).catch(err{document.getElementById(layerStatus).textContent加载失败;console.error(err);});});functionsetStatus(msg){document.getElementById(statusText).textContentmsg;}document.getElementById(btnVisible).addEventListener(click,function(){geojsonLayer.visible!geojsonLayer.visible;this.classList.toggle(on,geojsonLayer.visible);setStatus(图层(geojsonLayer.visible?显示:隐藏));});document.getElementById(btnFlyTo).addEventListener(click,(){view.goTo({position:{longitude:120,latitude:30,z:12000000},tilt:0});setStatus(已回到全球视角);});/script/body/html五、在线示例在线体验https://southjor.github.io/arcgis-examples/lessons/lesson25.html操作说明场景加载 USGS 全球地震 GeoJSON自动以 3D 球体符号渲染并按震级mag拉伸球体大小。点击任意球体弹出该地震的震级、深度与地点信息。点击「显示 / 隐藏」切换图层。KML 部分因官方不支持 SceneView本课演示其在 3D 中的限制与「转 GeoJSON」替代方案。六、关键 API 说明API说明new GeoJSONLayer({ url, elevationInfo, renderer })构造 GeoJSON 图层3D 支持elevationInfo: { mode }三维高程on-the-ground/absolute-height/relative-to-groundKMLLayer仅 2D MapViewSceneView 不支持GeoJSON 转 KML 思路用ogr2ogr/在线工具转 GeoJSON 后在 3D 加载参考链接GeoJSONLayer API | KMLLayer API七、系列导航⬅️上一篇ArcGIS JS 基础教程24VectorTileLayer 矢量切片图层➡️下一篇ArcGIS JS 基础教程26图层可见性与透明度控制小贴士三维里能用 GeoJSON 就尽量用 GeoJSON——它原生支持SceneView还能配合elevationInfo和 3D 符号做直观可视化。遇到 KML 数据先转 GeoJSON 再加载是最省心的三维接入方式。
延伸阅读

更多相关文章

2026/9/22 23:17:28

Windows和Office激活难题终极解决方案:KMS智能激活工具全解析

Windows和Office激活难题终极解决方案:KMS智能激活工具全解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统激活弹窗而烦恼吗?每次Office突然变成只读模式&a…

2026/9/21 4:59:45

小白吃透Transformer!零基础也能看懂的AI大模型核心原理

文章目录 前言 一、Transformer是什么?诞生背景是什么? 1. 通俗定义 2. 为什么要发明Transformer? 二、词嵌入(Embedding)向量 1. 什么是词嵌入? 2. 为什么不能用数字表示? 3. 数学表示 4. 实际作用 三、位置编码(Positional Encoding)向量 1. 核心公式 2. 通俗解释 3…

2026/9/19 13:31:12

如何选择最佳OCR引擎?Umi-OCR插件库7大免费解决方案完全指南

如何选择最佳OCR引擎?Umi-OCR插件库7大免费解决方案完全指南 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 你是否曾为寻找合适的OCR文字识别工具而烦恼?面对扫描文档、PDF文件…

2026/9/22 23:16:50

3个实战项目拆解握笔原理,转岗避坑指南

3个实战项目拆解握笔原理,转岗避坑指南 刚学完语法,对着空白的IDEA发呆,不知道第一步该敲什么代码?别慌,这是90%转岗新人的通病。很多教程只讲“怎么画”,却不讲“怎么想”,导致你看着代码像天书。 握笔…

2026/9/22 23:16:50

微信文件如何传到电脑性能优化

3招搞定微信文件传到电脑,顺带聊聊后端性能优化 你是不是也遇到过这种情况?明明在手机上看到了一段很棒的代码,或者收到同事发来的一个配置文档,想复制到电脑上运行,结果一跑就报错,满屏的红字让你头大。这种“复制来的代码跑不通不知道怎么调”的绝望…

2026/9/22 23:16:50

3个新手避坑指南,用Python搞定定场诗生成

3个新手避坑指南,用Python搞定定场诗生成 看了一堆教程还是不会写项目?别慌,这太正常了。很多新手在写代码时,总觉得逻辑通了就能跑,结果一动手就报错,或者功能实现得七零八落。今天咱们不讲虚的,直接上手一个看似简单实则暗藏玄机的实战项目:…

2026/9/22 23:16:50

IDE模式性能调优:解决API变更卡顿的3个完整示例

IDE模式性能调优:解决API变更卡顿的3个完整示例 版本升级后 API 全变了,IDE 模式下的代码补全和重构功能直接卡死,这种痛苦谁懂?别急着骂娘,问题往往不在 IDE 本身,而在底层索引机制与新版 API…

2026/9/22 23:11:48

搞懂汽车mp3性能优化,避开高频面试题里的3个坑

搞懂汽车mp3性能优化,避开高频面试题里的3个坑 报错一堆看不懂 StackTrace,是不是让你抓狂?尤其是当你的车载系统音频卡顿、MP3解码崩溃时,那些密密麻麻的红字简直像天书。别慌,这不仅是运维的噩梦,更是前端与后端联调时的…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码