一个快速加载面和多面数据的html测试页面(可以导出geojson数据文件)
背景可以快速的加载出面和多面的地理数据信息在测试的时候有时候需要知道数据具体在那一块然后进行一些相关内容的判断时候可以用具体如下效果如下代码具体如下!DOCTYPE html html langzh head meta charsetUTF-8 title GIS 调试平台 /title link relstylesheet hrefhttps://unpkg.com/leaflet1.9.4/dist/leaflet.css / link relstylesheet hrefhttps://unpkg.com/leaflet-draw1.0.4/dist/leaflet.draw.css / style html,body{ margin:0; padding:0; } #map{ width:100%; height:100vh; } .panel{ position:absolute; top:10px; left:10px; width:460px; z-index:9999; background:white; padding:12px; border-radius:8px; box-shadow: 0 2px 10px rgba(0,0,0,.3); } textarea{ width:100%; height:140px; font-size:12px; } button{ margin:4px; } .title{ font-size:18px; font-weight:bold; } .small{ color:#666; font-size:12px; } /style /head body div idmap/div div classpanel div classtitle GIS 调试平台 /div div classsmall 支持 Point / LineString / Polygon / MultiPolygon /div textarea idinput MULTIPOLYGON ( ( (127.8463 46.3968, 127.8459 46.3874, 127.8445 46.3781, 127.8463 46.3968) ), ( (127.83 46.39, 127.82 46.38, 127.81 46.39, 127.83 46.39) ) ) /textarea br button onclickloadData() 加载WKT /button button onclickclearAll() 清空 /button button onclickexportGeoJSON() 导出GeoJSON /button textarea idoutput/textarea /div script srchttps://unpkg.com/leaflet1.9.4/dist/leaflet.js/script script srchttps://unpkg.com/leaflet-draw1.0.4/dist/leaflet.draw.js/script script /** * 初始化地图 */ const map L.map(map) .setView( [30,120], 5 ); /** * ArcGIS影像 */ L.tileLayer( https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}, { maxZoom:19 } ).addTo(map); /** * 数据图层 */ const drawnItems new L.FeatureGroup(); map.addLayer(drawnItems); /** * 绘制工具 */ const drawControl new L.Control.Draw({ edit:{ featureGroup:drawnItems }, draw:{ polygon:true, polyline:true, marker:true, rectangle:true, circle:false, circlemarker:false } }); map.addControl(drawControl); /** * 绘制完成 */ map.on( L.Draw.Event.CREATED, function(e){ drawnItems.addLayer(e.layer); syncOutput(); }); map.on( draw:edited, syncOutput ); map.on( draw:deleted, syncOutput ); /** * 坐标解析 */ function parseLine(str){ return str .trim() .split(,) .map(item{ let arr item .trim() .split(/\s/) .map(Number); return [ arr[1], arr[0] ]; }); } /** * POINT */ function loadPoint(wkt){ let body wkt .replace(/^POINT\s*/i,) .replace(/[()]/g,); let arr body .trim() .split(/\s/) .map(Number); let marker L.marker( [ arr[1], arr[0] ] ); drawnItems.addLayer(marker); map.setView( [ arr[1], arr[0] ], 14 ); } /** * LINESTRING */ function loadLine(wkt){ let body wkt .replace(/^LINESTRING\s*/i,) .replace(/[()]/g,); let line L.polyline( parseLine(body), { color:red, weight:3 } ); drawnItems.addLayer(line); map.fitBounds( line.getBounds() ); } /** * POLYGON */ function loadPolygon(wkt){ let body wkt .replace(/^POLYGON\s*/i,) .replace(/\(\(/,) .replace(/\)\)/,); let polygon L.polygon( parseLine(body), { color:blue, fillOpacity:.3 } ); drawnItems.addLayer(polygon); map.fitBounds( polygon.getBounds() ); } /** * MULTIPOLYGON解析 */ function extractMultiPolygons(str){ let result[]; let depth0; let current; let polys[]; for(let c of str){ if(c(){ depth; if(depth3) continue; } if(c)){ depth--; if(depth2){ polys.push(current); current; continue; } } if(depth3){ currentc; } } return polys.map(p{ return [ p.replace(/\(|\)/g,) ]; }); } function loadMultiPolygon(wkt){ let body wkt .replace(/^MULTIPOLYGON\s*/i,) .trim(); let polygons extractMultiPolygons(body); let layers[]; polygons.forEach(p{ let polygon L.polygon( parseLine(p[0]), { color:green, fillOpacity:.3 } ); drawnItems.addLayer(polygon); layers.push(polygon); }); if(layers.length){ map.fitBounds( L.featureGroup(layers) .getBounds() ); } } /** * 主加载入口 */ function loadData(){ let wkt document .getElementById(input) .value .trim(); drawnItems.clearLayers(); let type wkt .split(/\s|\(/)[0] .toUpperCase(); try{ switch(type){ case POINT: loadPoint(wkt); break; case LINESTRING: loadLine(wkt); break; case POLYGON: loadPolygon(wkt); break; case MULTIPOLYGON: loadMultiPolygon(wkt); break; default: alert( 暂不支持:type ); } syncOutput(); }catch(e){ console.error(e); alert( 解析失败:e.message ); } } /** * 输出GeoJSON */ function syncOutput(){ let json drawnItems.toGeoJSON(); document .getElementById(output) .value JSON.stringify( json, null, 2 ); } /** * 导出文件 */ function exportGeoJSON(){ let data JSON.stringify( drawnItems.toGeoJSON(), null, 2 ); let blob new Blob( [data], { type:application/json } ); let url URL.createObjectURL(blob); let a document.createElement(a); a.hrefurl; a.download gis-data.geojson; a.click(); URL.revokeObjectURL(url); } function clearAll(){ drawnItems.clearLayers(); syncOutput(); } /script /body /html导出手绘GEOJSON数据文件测试页面代码如下!DOCTYPE html html langzh head meta charsetUTF-8 / titleGIS 编辑器 v3/title link relstylesheet hrefhttps://unpkg.com/leaflet1.9.4/dist/leaflet.css/ link relstylesheet hrefhttps://unpkg.com/leaflet-draw1.0.4/dist/leaflet.draw.css/ style body { margin:0; font-family: Arial; } #map { height: 100vh; } .panel { position: absolute; top: 10px; left: 10px; width: 420px; z-index: 9999; background: #fff; padding: 10px; border-radius: 6px; box-shadow: 0 2px 10px rgba(0,0,0,.2); } button { margin: 4px 4px 4px 0; } textarea { width: 100%; height: 120px; font-size: 12px; } /style /head body div idmap/div div classpanel bGIS 编辑器 点、线、面/b div button onclickexportGeoJSON() 导出GeoJSON/button button onclickclearAll() 清空/button /div div stylemargin-top:8px; bGeoJSON 输出/b textarea idoutput/textarea /div /div script srchttps://unpkg.com/leaflet1.9.4/dist/leaflet.js/script script srchttps://unpkg.com/leaflet-draw1.0.4/dist/leaflet.draw.js/script script /* 1. 初始化地图 */ const map L.map(map).setView([30, 120], 5); L.tileLayer( https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}, { maxZoom: 19 } ).addTo(map); /* 2. 图层管理 */ const drawnItems new L.FeatureGroup(); map.addLayer(drawnItems); /* 3. 绘制工具核心 */ const drawControl new L.Control.Draw({ position: topright, edit: { featureGroup: drawnItems, remove: true }, draw: { polygon: { allowIntersection: false, showArea: true }, polyline: true, rectangle: true, marker: true, circle: false, circlemarker: false } }); map.addControl(drawControl); /* 4. 绘制完成事件 */ map.on(L.Draw.Event.CREATED, function (event) { const layer event.layer; drawnItems.addLayer(layer); syncOutput(); }); map.on(draw:edited, syncOutput); map.on(draw:deleted, syncOutput); /* 5. GeoJSON 输出同步 */ function syncOutput(){ const geojson drawnItems.toGeoJSON(); document.getElementById(output).value JSON.stringify(geojson, null, 2); } /* 6. 导出 GeoJSON 文件 */ function exportGeoJSON(){ const data drawnItems.toGeoJSON(); const blob new Blob( [JSON.stringify(data, null, 2)], { type: application/json } ); const url URL.createObjectURL(blob); const a document.createElement(a); a.href url; a.download gis-draw.geojson; a.click(); URL.revokeObjectURL(url); } /* 7. 清空 */ function clearAll(){ drawnItems.clearLayers(); syncOutput(); } /* 8. 初始化输出 */ syncOutput(); /script /body /html好了至此就可以实现快速加载点线面数据和导出数据文件了加载GEOJSON文件数据内容!DOCTYPE html html langzh head meta charsetUTF-8 titleWebGIS Editor 加载GeoJSON文件/title link relstylesheet hrefhttps://unpkg.com/leaflet1.9.4/dist/leaflet.css link relstylesheet hrefhttps://unpkg.com/leaflet-draw1.0.4/dist/leaflet.draw.css style html,body{ margin:0; height:100%; } #map{ width:100%; height:100%; } .panel{ position:absolute; top:10px; left:10px; width:380px; background:white; padding:12px; z-index:9999; border-radius:8px; box-shadow: 0 2px 10px rgba(0,0,0,.25); } button{ margin:4px; } textarea{ width:100%; height:120px; } /style /head body div idmap/div div classpanel h3 WebGIS 编辑器 v4 /h3 input typefile idfileInput accept.geojson,.json / br button onclickloadFile() 加载GeoJSON /button button onclickexportGeoJSON() 导出GeoJSON /button button onclickclearLayer() 清空 /button hr b 当前GeoJSON /b textarea idoutput/textarea /div script srchttps://unpkg.com/leaflet1.9.4/dist/leaflet.js/script script srchttps://unpkg.com/leaflet-draw1.0.4/dist/leaflet.draw.js/script script /*********************************** * 1. 初始化地图 ***********************************/ const map L.map(map) .setView( [30,120], 5 ); L.tileLayer( https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}, { maxZoom:19 }) .addTo(map); /*********************************** * 2. 图层管理 ***********************************/ const drawnItems new L.FeatureGroup(); map.addLayer( drawnItems ); /*********************************** * 3. 绘制工具 ***********************************/ const drawControl new L.Control.Draw({ edit:{ featureGroup:drawnItems }, draw:{ marker:true, polyline:true, polygon:{ allowIntersection:false, showArea:true }, rectangle:true, circle:false, circlemarker:false } }); map.addControl(drawControl); /*********************************** * 4. 手绘完成 ***********************************/ map.on( L.Draw.Event.CREATED, function(e){ let layere.layer; drawnItems.addLayer(layer); syncGeoJSON(); } ); map.on( draw:edited, syncGeoJSON ); map.on( draw:deleted, syncGeoJSON ); /*********************************** * 5. 加载GeoJSON文件 ***********************************/ function loadFile(){ const file document .getElementById(fileInput) .files[0]; if(!file){ alert( 请选择geojson文件 ); return; } const reader new FileReader(); reader.onloadfunction(e){ try{ let json JSON.parse( e.target.result ); let layer L.geoJSON( json, { style:function(){ return { color:#3388ff, weight:2, fillOpacity:0.3 } }, pointToLayer:function( feature, latlng ){ return L.marker(latlng); }, onEachFeature:function( feature, layer ){ // 保存属性 layer.feature feature; } } ); layer.eachLayer( function(l){ drawnItems.addLayer(l); } ); map.fitBounds( layer.getBounds() ); syncGeoJSON(); } catch(err){ alert( GeoJSON解析失败 ); console.error(err); } }; reader.readAsText(file); } /*********************************** * 6. 输出GeoJSON ***********************************/ function syncGeoJSON(){ let json drawnItems.toGeoJSON(); document .getElementById(output) .value JSON.stringify( json, null, 2 ); } /*********************************** * 7. 导出GeoJSON ***********************************/ function exportGeoJSON(){ let data drawnItems.toGeoJSON(); let blob new Blob( [ JSON.stringify( data, null, 2 ) ], { type: application/json } ); let url URL.createObjectURL(blob); let a document.createElement(a); a.hrefurl; a.download export.geojson; a.click(); URL.revokeObjectURL(url); } /*********************************** * 8. 清空 ***********************************/ function clearLayer(){ drawnItems.clearLayers(); syncGeoJSON(); } syncGeoJSON(); /script /body /html

相关新闻

Git 日常开发常用命令全攻略:从入门到实战

Git 日常开发常用命令全攻略:从入门到实战

一份覆盖日常开发 90% 场景的 Git 命令速查手册前言对于每一位开发者来说,Git 是必备的生存技能。无论是个人项目的版本管理,还是团队多人协同开发,Git 都是行业统一的标准工具。很多新手只会简单的 add、commit、push,遇到代码冲…

2026/7/28 15:13:06 阅读更多 →
嵌入式多核通信实战:硬件Mailbox原理、中断与轮询模式详解

嵌入式多核通信实战:硬件Mailbox原理、中断与轮询模式详解

1. 从硬件邮箱到高效IPC:嵌入式多核通信的实战基石在嵌入式多核处理器的世界里,不同处理器核心(比如Cortex-A系列的应用处理器和Cortex-M系列的实时协处理器)或者同一个核心上运行的不同任务之间,如何安全、高效地“对…

2026/7/28 8:21:25 阅读更多 →
C++日期类实现:运算符重载与面向对象编程实践

C++日期类实现:运算符重载与面向对象编程实践

1. 项目概述&#xff1a;为什么我们需要一个“日期类”&#xff1f;在C的日常开发中&#xff0c;处理日期和时间是绕不开的坎。无论是记录日志、计算任务周期&#xff0c;还是处理用户输入的生辰八字&#xff0c;你总得和年月日打交道。系统自带的<ctime>库用起来总感觉隔…

2026/7/27 14:25:41 阅读更多 →

最新新闻

英国基尔大学教授提炼的写Discussion核心技法!结合Claude 3.7+专业AI提示词,轻松写出大牛级讨论部分

英国基尔大学教授提炼的写Discussion核心技法!结合Claude 3.7+专业AI提示词,轻松写出大牛级讨论部分

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 有的同仁认为Discussion部分不难写,实际上是回答“这些发现意味着…

2026/7/28 21:40:47 阅读更多 →
瑞德克斯平台:投教内容的要点盘点

瑞德克斯平台:投教内容的要点盘点

外汇市场信息更新频繁&#xff0c;平台口碑的形成更依赖长期一致性&#xff1a;入口是否好找、说明是否前后一致、提示是否稳定出现。围绕瑞德克斯平台&#xff0c;下面从稳定体验与信息呈现等角度做一次正面观察。外汇相关平台的价值&#xff0c;体现在长期一致性与信息呈现的…

2026/7/28 21:40:47 阅读更多 →
LangChain实战:大模型RAG与Agent智能体的长期会话记忆实现

LangChain实战:大模型RAG与Agent智能体的长期会话记忆实现

1. 项目概述&#xff1a;大模型RAG与Agent智能体实战中的长期会话记忆在构建基于大模型的智能对话系统时&#xff0c;长期会话记忆是实现自然交互的核心能力。想象一下&#xff0c;当你与人类客服交流时&#xff0c;对方能记住你之前提过的需求和个人信息&#xff0c;这种连续性…

2026/7/28 21:40:47 阅读更多 →
hot100 最长公共子序列(1143)

hot100 最长公共子序列(1143)

本题采用二维动态规划 (2D Dynamic Programming) 算法解决双字符串最长公共子序列 (LCS, Longest Common Subsequence) 的求解问题。其核心本质是将两个序列的全局拓扑匹配问题&#xff0c;拆解为二维状态空间阵列中的自底向上一维步进收敛模型。通过构建大小为 (m 1) * (n 1…

2026/7/28 21:40:47 阅读更多 →
瑞德克斯平台:流程清晰度的路径梳理

瑞德克斯平台:流程清晰度的路径梳理

在外汇相关服务里&#xff0c;瑞德克斯平台是否值得长期关注&#xff0c;往往取决于几个清晰的体验点&#xff1a;说明是否好理解、提示是否到位、流程是否连贯、支持是否稳定。下面从这些维度对瑞德克斯平台做一次正向梳理与要点归纳。外汇相关信息更新频繁&#xff0c;平台将…

2026/7/28 21:40:47 阅读更多 →
量化研究变成了自动化工厂:AI提假设、AI写代码、AI自己做回测

量化研究变成了自动化工厂:AI提假设、AI写代码、AI自己做回测

RD-Agenthttps://github.com/microsoft/RD-Agent RD-Agent是微软亚洲研究院开源的自动化研发框架——14K星&#xff0c;NeurIPS2025收录。跟前十五篇写的TradingAgents、Qlib、FinRL这些项目完全不同&#xff1a;那些帮你分析数据、训练模型、执行交易——但因子从哪来、策略怎…

2026/7/28 21:39:46 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿&#xff01;3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑&#xff1a;把几百页的财报、法规、技术手册扔给向量库&#xff0c;问一个具体问题&#xff0c;搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了&#xff0c;要么藏在几十条结果的最下面。语义相似≠真正相关&#xff0c;这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营&#xff0c;从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候&#xff0c;每天刷半小时抖音&#xff0c;手动把爆款视频的口播敲进备忘录&#xff0c;一条2分钟的视频得花十来分钟&#xff0c;碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻