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 再加载是最省心的三维接入方式。

相关新闻

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

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/10/15 9:15:53 阅读更多 →
小白吃透Transformer!零基础也能看懂的AI大模型核心原理

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

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

2026/10/13 0:05:08 阅读更多 →
如何选择最佳OCR引擎?Umi-OCR插件库7大免费解决方案完全指南

如何选择最佳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/10/6 16:48:03 阅读更多 →

最新新闻

从零基础到独立项目:Python完整学习路线与避坑指南

从零基础到独立项目:Python完整学习路线与避坑指南

Python学习这事儿,我这些年被问到的频率仅次于"现在学编程还有没有前途"。问的人多了,我发现大家真正想要的并不是一份课程清单,而是一条能走得通、走不偏的路线图:今天学什么、明天学什么、学到什么程度算会了、从哪个…

2026/10/15 9:17:11 阅读更多 →
Vue2集成富文本编辑器优化Word导入方案

Vue2集成富文本编辑器优化Word导入方案

1. 项目背景与核心痛点在Vue2项目中集成富文本编辑器时,Word文档导入功能一直是开发中的高频需求场景。以WangEditor为例,虽然其提供了基础的粘贴功能,但直接复制Word内容时经常出现格式错乱、样式丢失、图片无法显示等问题。根据实际项目统计…

2026/10/15 9:17:11 阅读更多 →
2026企业微信上门服务:适配零售、教育等多行业场景的落地指南

2026企业微信上门服务:适配零售、教育等多行业场景的落地指南

摘要:数字化工具在落地过程中,不少企业机构会遇到功能配置复杂、内部推行困难、行业场景难以复用等现实难题。企业微信上门服务依托产品内外协同的能力,由合作服务商提供线下或远程的落地指导,面向零售、教育、金融、政务等不同行业输出适配方案。本文结合产品能力与真实落地案…

2026/10/15 9:17:11 阅读更多 →
计算机顶会论文发表全流程指南:从创新点到实验设计

计算机顶会论文发表全流程指南:从创新点到实验设计

1. 论文发表的核心逻辑与时间规划2026年发表论文这件事,现在就该动手准备了。学术圈里真正的高手都清楚,顶级期刊的发表周期普遍在12-24个月,这还不包括前期研究、实验验证和反复修改的时间。我见过太多博士生临毕业前半年才着急投稿&#xf…

2026/10/15 9:17:11 阅读更多 →
国际版扫码点餐系统:多语言多币种支付集成架构实战

国际版扫码点餐系统:多语言多币种支付集成架构实战

扫码点餐这个赛道,国内早就卷成了红海,Java后端做一套本地版本并不难,难的是把它改造成一个真正意义上的国际版。我这次接手的系统,就是把一套原本只面向国内单一市场的扫码点餐系统,重构成支持多语言、多币种、多支付…

2026/10/15 9:17:11 阅读更多 →
PPT翻页背后:从ISA到中断的软硬件协作全链路解析

PPT翻页背后:从ISA到中断的软硬件协作全链路解析

你大概率被人问过这句话:请描述一下PPT完成翻页时,电脑软硬件是如何协作的。别小看它,它把一个通用计算机最关键的“输入—处理—输出”全链路都卷了进来。这一问之所以经典,一方面是因为它横跨操作系统、计算机体系结构、编译原理…

2026/10/15 9:16:11 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →