MIF格式详解,javascript加载导出 MIF文件示例

MIF 格式详解
MIF(MapInfo Interchange Format)是由Pitney Bowes Software开发的一种文本格式,用于存储地理空间数据。它通常与地图可视化和地理信息系统(GIS)相关联。MIF文件通常成对出现,一个.mif文件用于存储几何数据,另一个.mid文件用于存储属性数据。以下是MIF格式的一些关键点:
MIF 文件结构
-
头部信息:
VERSION:指定MIF文件的版本。Charset:指定字符编码,默认为"WindowsLatin1"。Delimiter:指定分隔符,默认为空格。CoordSys:定义坐标系统,可以是地理坐标系(如WGS84)或投影坐标系。
-
列定义:
Columns:列出每个字段的名称和类型,例如"ID Integer"、"NAME Char(25)"等。
-
数据部分:
Data:表示数据部分的开始。- 几何对象(Point, Line, Region, etc.):每个几何对象以关键字开头,后面跟着具体的坐标数据。
Point:单个点,格式为x y。Line:线段,由一系列点组成,格式为N x1 y1 x2 y2 ... xn yn,其中N是点的数量。Region:多边形,格式与Line类似,但首尾相连形成封闭区域。Text:文本注释,包括位置、字体、大小、旋转角度和文本内容。
-
属性数据:
.mid文件包含与.mif文件中几何对象对应的属性数据,每行对应一个几何对象,字段之间用分隔符(默认为空格)分隔。
特点
- 简单易读:MIF文件是纯文本格式,易于阅读和编辑。
- 灵活性:支持多种几何类型,并且可以通过自定义字段来存储丰富的属性信息。
- 兼容性:广泛应用于GIS软件中,如MapInfo Professional、QGIS等。
在JavaScript中加载和导出MIF文件
由于MIF文件主要用于GIS应用,three.js本身并不直接支持MIF格式的加载和导出。但是,你可以使用其他库或者编写自己的解析器来处理MIF文件。下面是一个简单的示例,展示如何在JavaScript中解析和生成MIF文件的内容。请注意,这只是一个基础示例,实际应用中可能需要根据具体需求进行扩展和优化。
加载MIF文件
为了加载MIF文件,你需要解析文件内容并将其转换为可以在three.js中使用的几何体。以下是一个简化的示例,展示如何从MIF文件创建three.js中的几何体:
// 假设你有一个MIF文件的内容作为字符串
const mifContent = `
VERSION 300
Charset "WindowsLatin1"
Delimiter ","
CoordSys Earth Projection 1, 104
Columns 2ID IntegerNAME Char(25)
Data
Point10.0 20.0
`;// 解析MIF内容
function parseMIF(content) {const lines = content.split('\n').map(line => line.trim()).filter(line => line.length > 0);let i = 0;let vertices = [];let attributes = [];while (i < lines.length) {if (lines[i].startsWith('Point')) {i++;const coords = lines[i].split(' ').map(Number);vertices.push(new THREE.Vector3(coords[0], coords[1], 0));}// 处理其他几何类型(Line, Region, Text)...i++;}return { vertices, attributes };
}// 创建three.js几何体
function createGeometryFromMIF(mifData) {const geometry = new THREE.BufferGeometry();const positions = [];mifData.vertices.forEach(vertex => {positions.push(vertex.x, vertex.y, vertex.z);});geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));return geometry;
}// 使用示例
const mifData = parseMIF(mifContent);
const geometry = createGeometryFromMIF(mifData);const material = new THREE.PointsMaterial({ color: 0xff0000 });
const points = new THREE.Points(geometry, material);scene.add(points);
导出MIF文件
为了导出MIF文件,你需要将three.js中的几何体和属性信息转换为MIF格式的字符串。以下是一个简化的示例,展示如何将three.js中的点集合导出为MIF文件的内容:
// 假设你有一个three.js的几何体和属性数据
const geometry = new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(10, 20, 0),new THREE.Vector3(30, 40, 0),// 添加更多点...
]);const attributes = [{ ID: 1, NAME: 'Point1' },{ ID: 2, NAME: 'Point2' },// 添加更多属性...
];// 生成MIF内容
function generateMIFContent(vertices, attributes) {let mifContent = `VERSION 300\n`;mifContent += `Charset "WindowsLatin1"\n`;mifContent += `Delimiter ","\n`;mifContent += `CoordSys Earth Projection 1, 104\n`;mifContent += `Columns 2\n`;mifContent += ` ID Integer\n`;mifContent += ` NAME Char(25)\n`;mifContent += `Data\n`;vertices.forEach((vertex, index) => {mifContent += `Point\n`;mifContent += `${vertex.x} ${vertex.y}\n`;});// 生成MID内容let midContent = '';attributes.forEach(attr => {midContent += `${attr.ID},${attr.NAME}\n`;});return { mifContent, midContent };
}// 使用示例
const { mifContent, midContent } = generateMIFContent(Array.from(geometry.attributes.position.array).reduce((points, value, index, array) => {if (index % 3 === 0) points.push(new THREE.Vector3(array[index], array[index + 1], array[index + 2]));return points;}, []),attributes
);// 创建下载链接
function downloadFile(filename, content) {const blob = new Blob([content], { type: 'text/plain' });const link = document.createElement('a');link.href = URL.createObjectURL(blob);link.download = filename;link.click();
}// 导出MIF和MID文件
downloadFile('exported_model.mif', mifContent);
downloadFile('exported_model.mid', midContent);
总结
- MIF 是一种用于存储地理空间数据的文本格式,广泛应用于GIS领域。
- 加载MIF文件 需要解析文件内容并将其转换为three.js中的几何体。你可以使用现有的GIS库(如Turf.js、GeoJSON等)来帮助处理复杂的几何类型。
- 导出MIF文件 可以通过将three.js中的几何体和属性信息转换为MIF格式的字符串来实现。
- 注意事项:MIF格式主要用于GIS应用,因此在three.js中处理MIF文件时,可能需要额外的工具或库来简化几何类型的解析和生成。如果你需要更高级的功能,考虑使用专门的GIS库或工具,如Leaflet、OpenLayers、或QGIS的API。
相关文章:
MIF格式详解,javascript加载导出 MIF文件示例
MIF 格式详解 MIF(MapInfo Interchange Format)是由Pitney Bowes Software开发的一种文本格式,用于存储地理空间数据。它通常与地图可视化和地理信息系统(GIS)相关联。MIF文件通常成对出现,一个.mif文件用…...
若依实现图片上传时自动添加水印
文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用,并有效保护图片版权,若依项目需要实现一个功能:上传图片时,自动在图片上添加水印。这不仅可以有效防止盗用ÿ…...
用于日语词汇学习的微信小程序+ssm
日语词汇学习小程序是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式,所以有必要开发日语词汇…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(融媒体发布系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 正文1、规划范围管理2、收集需求3、定义范围4、创建WBS5、确认范围6、控制范围正文 我市xx社区作为智慧社区建设的试点社区,将通过各种创新技术手段,促进小区公共服务智能管理应用,实现社区中的基础设施、环…...
Kaggler日志--Day5
进度24/12/15 昨日复盘 Intermediate Mechine Learning之类型变量 读两篇讲解如何提问的文章,在提问区里发起一次提问 实战:自己从头到尾首先Housing Prices Competition for Kaggle Learn Users并成功提交 Intermediate Mechine Learning之管道&#…...
VScode MAC按任意键关闭终端 想要访问桌面文件
说明 最近配置MAC上CPP的运行环境,在安装必要的CPP插件后,配置launch和task等json文件后,点击运行三角形,每次都会跳出main想要访问桌面上的文件。并且输出也是在调试控制台,非常逆天。 尝试 尝试1:尽管我尝试将ta…...
小粑记故乡的记忆
小粑,是我的故乡一安徽池州一带盛行的小吃。约成人掌心大小,厚度只三、四厘米,故谓之“小”。 小粑,主打取材随性,方便常做常吃。这也许就是它抓住人的味蕾,渐次流行开来,成为当地名小吃的主要原…...
git使用小记
环境(centos为例): yum -y install gitmkdir git_dir && cd git_dirgit clone *** 修改代码: git checkout master 切到主分支git pull 拉取最新代码git branch dev 创建开发分支git checkout dev 切换到开发分支修…...
Python实现办公自动化——自动编写word文档
Python实现办公自动化——自动编写word文档 前言安装python-docxpython-docx使用创建word文档设置纸张方向、大小和页边距统一设置格式插入文本插入表格插入图片 结语 前言 工作中有大量的报告编写需求,在不停地复制粘贴之后,突然想到,这种高…...
番外篇 | BGF-YOLO:引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8检测性能
前言:Hello大家好,我是小哥谈。本文提出了一种名为BGF-YOLO的新模型,通过引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8在脑肿瘤检测中的性能,采用多层特征融合与动态稀疏注意机制以减少特征冗余。 🌈 目录 🚀1.基础概念 🚀2.网络结构 �…...
Python运维自动化之字典Dict
字典Dict(哈希表) Dict即Dictionary,也称为mapping。 Python中,字典由任意个元素构成的集合,每一个元素称为Item,也称为Entry。这个Item是由(key, value)组成的二元组。 字典是可变的、无序的、key不重复的key-value键值对集合。…...
axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示
接之前的博客设计从0开始边做边学,用vue和python做一个博客,非规范化项目,怎么简单怎么弄,跑的起来有啥毛病解决啥毛病(三),目前已经完成了基本的功能demo,但是请求接口不可能每个页…...
9.Python 条件语句和循环语句
文章目录 Python 条件语句和循环语句1. **条件语句 (Conditional Statements)**1.1 if 语句1.2 if-else 语句1.3 if-elif-else 语句 2. **循环语句 (Loop Statements)**2.1 while 循环2.2 for 循环2.3 循环嵌套 (Nested Loops) 3. **控制循环的语句**3.1 break 语句3.2 continu…...
智能家居控制系统设计
设计智能家居控制系统是一个复杂但有趣的项目,它涉及硬件与软件的集成、网络通信、用户界面设计等多个方面。以下是一个智能家居控制系统的基本设计思路: 1. 需求分析- 功能需求:明确系统需要实现的功能,如灯光控制、空调温度调节…...
Windows系统word插入公式自动编号并交叉引用
一、定义新的多级列表 鼠标单击页面空白处 二、插入域 鼠标单击要插入公式编号的地方 三、交叉引用 鼠标单击要引用公式编号的地方 四、更新编号(域) CtrlA:全选全文 鼠标右键:更新域...
0.基础语法
文章目录 1. 第一个 Python 程序2. Python2.x 和 Python3.x 的差异3. 标识符和保留字符4. 行和缩进5. 多行语句6. 引号7. 注释8. 空行9. 用户输入10. Print 输出11. 代码组12. 命令行参数 Python 基础语法涵盖了从安装和运行 Python 程序到理解语言核心概念的各个方面。以下是基…...
mysql命令行界面(黑框)的登录
文章目录 开启关闭服务报错登录mysql退出mysql数据据database在电脑中的存放位置删除数据库语句 drop注意 cmd用管理员打开 开启关闭服务 报错 我有这个报错,但是使用没什么影响 登录mysql root替换成自己的用户名 退出mysql exit 数据据database在电脑中的…...
【机器学习】解构概率,重构世界:贝叶斯定理与智能世界的暗语
文章目录 条件概率与贝叶斯定理:深入理解机器学习中的概率关系前言一、条件概率与贝叶斯定理1.1 条件概率的定义与公式1.1.1 条件概率的定义1.1.2 条件概率的实例讲解 1.2 条件概率的性质与法则1.2.1 链式法则1.2.2 全概率公式1.2.3 贝叶斯定理的推导 1.3 贝叶斯定理…...
threejs——无人机概念切割效果
主要技术采用着色器的切割渲染,和之前写的风车可视化的文章不同,这次的切割效果是在着色器的基础上实现的,并新增了很多可调节的变量,兄弟们,走曲儿~ 线上演示地址,点击体验 源码下载地址,点击下载 正文 从图中大概可以看出以下信息,一个由线组成的无人机模型,一个由…...
electron学习笔记(一)
1.创建项目 mkdir myelectron npm init npm install --save-dev electron //安装通过以上命令, 我们就有了一个 electron 的项目 之后, 设置主文件入口 , 添加热启动 nodemon 2. nodemon 的使用和配置 要根目录下添加 nodemon.json 文件,配…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
