shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
博客背景和目的
最近在用C++写一个底层的东西,需要读取和创建shp文件。虽然接触shp文件已经几年了,但是对于shp文件内到底包含什么东西一直是一知半解。以前使用shp文件都是利用软件(如ArcGIS)直接打开,保存;创建文件则需要专门利用ArcToolBox等创建图形。
网上有现成的有关shp文件的库,如GDAL等,可以结合这些库来读写shp文件。但是由于编程环境问题、库的版本、编译、引用等等问题,在现有情况下无法正常使用,加之使用现有的库不能让我从底层完全了解shp文件的组织方式,遂决心一点点地自己动手写读和写(创建)的方法。
在尝试解决这个问题的时候,我浏览了网上众多有关shp文件读写的博客和资料,发现大多博客对于shp文件的情况和读取过程有详细的记录,但是几乎没有写(创建)底层shp文件的代码示例。虽然“写”与“读”类似,但是其中还是有很多“陷阱”。为了记录自己的探索历程,同时给后面的人提供经验和参考,故写此博客,希望能给读者提供帮助。
shp文件基本情况
shp是shapefile的缩写,关于shapefile的历史和特点我不过多叙述,网上随便一搜都有详细内容,我着重叙述几点:
- 一个完整的shapefile文件至少包含shp文件、dbf文件和shx文件,它们都是同名的,文件的后缀格式是.shp、.dbf和.shx。也就是说,缺少其中任何一项,都无法直接用ArcGIS打开。
- shp文件主要包含图形坐标数据,由文件头和实体信息组成。
- dbf文件主要记录要素的属性信息,实际上是一个表,在ArcGIS中打开后实际上就是属性表。
- shx文件是索引文件,记录主文件(shp文件)中每条记录距离主文件开始位置的偏移量和每条记录的长度。
- shp的读写意味着shp、dbf和shx的读写,利用C++程序读的过程中如果只是需要图形和属性,shx不是必需的;但是写的时候为了使输出的shp能被广泛使用,必须要写(创建)shx文件。
- shp等三个文件都是二进制文件,变量有big和little区分,还涉及16进制和10进制的转换。
编程环境
C++ 、VS2010、MFC
其他工具
推荐一个检查shp、shx和dbf文件的神器——shapechk.exe,这个工具可以检查shp文件是否有问题、能检查和生成shx和dbf,资源见下方。
阅读资料
《shape白皮书.pdf》英文版shapefile说明的翻译版
《shp文件详细格式.doc》 详细解读shp格式,并且有读取文件的源码
链接:https://pan.baidu.com/s/1YLwqTFfqLYguQntk7PrpGw
提取码: cshy
虽然有以上参考资料,但是实际编程中仍会有许多问题,众多问题将在后面一一叙述。
shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言的更多相关文章
- python学习二十一天文件可读,可写,可执行的操作
文件无非是可读,可写,可执行的操作,分别对应的模式 r ,w,x,只读模式,只写模式,只执行模式,a模式为追加模式,实际也是写操作模式,r+,w+,a+ 可读写模式,下面详细说模式的用法 1,文件的模 ...
- shp系列(四)——利用C++进行Shx文件的读(打开)
1.shx文件的基本情况 shx文件又叫索引文件,主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的初始位置的偏移量.通过索引文件可以很方便地在坐标文件中定位到指定目标的坐 ...
- shp系列(三)——利用C++进行DBF文件的读(打开)
1.DBF文件要点 DBF文件又叫属性文件,也叫dBASE文件,文件后缀是.dbf,实际上ArcGIS打开后的属性表就是DBF的信息.DBF文件遵循以下几个条件: 每个要素在表中必须要包含一个与之相对 ...
- python常识系列07-->python利用xlwt写入excel文件
前言 读书之法,在循序而渐进,熟读而精思.--朱熹 抽空又来写一篇,毕竟知识在于分享! 一.xlwt模块是什么 python第三方工具包,用于往excel中写入数据:(ps:只能创建新表格,不能修改表 ...
- shp系列(七)——利用C++进行Shx文件的写(创建)
之前介绍了Shp文件和Dbf的写(创建),最后来介绍一下Shx文件的写(创建).Shx文件是三者之中最简单的一个,原因有两个:第一是Shx文件的头文件与Shp文件的头文件几乎一样(除了FileLeng ...
- shp系列(五)——利用C++进行shp文件的写(创建)
之前介绍了shp文件.dbf文件和shx文件的的读取,接下来将分别介绍它们的创建过程.一般来说,读和写的一一对应的,写出的文件就是为了保存数据供以后读取的.写的文件要符合shapefile的标准.之前 ...
- shp系列(六)——利用C++进行Dbf文件的写(创建)
上一篇介绍了shp文件的创建,接下来介绍dbf的创建. 推荐结合读取dbf的博客一起看! 推荐结合读取dbf的博客一起看! 推荐结合读取dbf的博客一起看! 1.Dbf头文件的创建 Dbf头文件的结构 ...
- shp系列(二)——利用C++进行shp文件的读(打开)
1.各数据类型及其字节数 BYTE 1; char 1; short 2; int 4; double 8; 2.位序big和little及其转换 对于位序是big的 ...
- python 利用 ogr 写入shp文件,数据格式
python 利用 ogr 写入 shp 文件, 定义shp文件中的属性字段(field)的数据格式为: OFTInteger # 整型 OFTIntegerList # 整型list OFTReal ...
随机推荐
- Kettle 版本及使用问题
kettle 简介 Kettle也叫PDI (Pentaho Data Intergration) Kettle 版本及下载 7.1及更早版本: https://sourceforge.net/pro ...
- NSLayoutConstraint的使用
*一切皆代码*- -- #继承关系框架|类|类:-:|:-:|:-:UIKit|NSLayoutConstraint|--|-|- #应用场景UI界面的搭建一般会占用项目开发相当一部分的时间.涉及到控 ...
- css浮动导致的高度塌陷问题及清楚浮动的方法
浮动很好用,但是用浮动后,当浮动元素的父级元素没有高度时,就会造成高度塌陷,从而影响布局.下面就从一开接触前端时,渐渐发现解决高度塌陷的问题的方式. 一.给浮动元素的父级元素添加固定的高度css[he ...
- 利用JavaScript的%读分秒
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 根据业务自己设计的.NET工厂模式架构
最近项目的架构需要做调整优化,根据业务需要写了一个简单的工厂模式架构 项目介绍:整个系统分为三大平台(这里用A,B,C来标示),每个平台又细分为多个APP客户端(每个APP都有appid来区分) 因为 ...
- swift可选值总结
1.枚举结构: 2.装包.解包概念:关联值. 3.可选值声明: 4.解包: 5.可选值作为参量生成的链. 6.可选值调用链. 最后做个总结 访问可选对象的属性或方法时,可以用 ? 号 访问可选对象的属 ...
- 图表库 - Highchart / Echart
当前主要使用HighChart和Echart图表库,都基于Jquery,需要先引用Jquery. 实际问题:引入Jquery需在图表库前,否则报错. HighChart官网:https://www.h ...
- React从安装到实战
建议:初学者看之前请先看一遍菜鸟教程 可以安装一个ATOM编辑器,本人觉得很好用 一.安装并启动项目:网址 搭建好的项目目录为: 二.开始写项目: 1.组件到界面流程: 定义一个组件app.js导出 ...
- jQuery中Ajax的几种写法
1. $.post(url,params,callback); 采用post方式提交,中文参数无需转码,在callback中如果要获取json字符串,还需转换一下. 2. $.getJSON(u ...
- Day 10 函数
函数 1.什么是函数? 函数就是具备某一功能的工具,事先将工具准备好就是函数的定义,遇到应用场景拿来就用就是函数的调用 2.为何用函数? 如果不使用函数,写程序会遇到这三个问题 1.程序冗长 2.程序 ...