博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
阅读量:4683 次
发布时间:2019-06-09

本文共 1158 字,大约阅读时间需要 3 分钟。

博客背景和目的

最近在用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格式,并且有读取文件的源码

 

链接:

提取码: cshy

 

虽然有以上参考资料,但是实际编程中仍会有许多问题,众多问题将在后面一一叙述。

转载于:https://www.cnblogs.com/fan-0802-WHU/p/10139863.html

你可能感兴趣的文章
ADO.NET介绍
查看>>
贪吃蛇easyx版本
查看>>
百度地图 JS API开发Demo01
查看>>
采用javascript实现WebGIS页面元素动态布局
查看>>
约瑟夫环问题
查看>>
Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming.pdf
查看>>
WPF 获取指定文件的Icon
查看>>
mysql实践(四)
查看>>
在linux服务器上配置anaconda和Tensorflow,并运行
查看>>
[POJ2823][洛谷P1886]滑动窗口 Sliding Window
查看>>
Flex 4.x 下载进度不出现问题解决办法
查看>>
Vue之自定义组件的v-model
查看>>
Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错...
查看>>
解决Xcode在ipad/iphone 9.2 系统真机测试时出现could not find developer disk image问题
查看>>
基于asp.net的ajax分页
查看>>
分布式事务,两阶段提交协议,三阶段提交协议
查看>>
php/js获取客户端mac地址的实现代码
查看>>
float 在父元素为inline元素的情况
查看>>
git的基本使用
查看>>
MDK中编译程序后Program Size详解
查看>>