shp系列(五)——利用C++进行shp文件的写(创建)

本文详细介绍了如何使用C++进行SHP文件的创建,包括位序转换、头文件生成、主体信息构造以及文件长度的计算。内容涵盖记录头、记录信息的编写,并强调FileLength和ContentLength的正确计算方法。最后提到了后续将讨论DBF文件的创建。
摘要由CSDN通过智能技术生成

之前介绍了shp文件、dbf文件和shx文件的的读取,接下来将分别介绍它们的创建过程。一般来说,读和写的一一对应的,写出的文件就是为了保存数据供以后读取的。写的文件要符合shapefile的标准。之前读取的时候使用的函数是fread,写的函数对应为fwrite,文件为二进制流文件。

建议本博客和之前shp读取的博客一起看!

建议本博客和之前shp读取的博客一起看!

建议本博客和之前shp读取的博客一起看!

 

1.位序little转为big

shp文件中部分参数是big类型,读取的时候读取的big要转化为little,写的时候little转化为big,代码如下:

// 将十进制转换成十六进制,并转成big
int OnChangeByteOrderTenToSixteen(int indata)
{
	int yushu;
	int i = 7;
	char ss[8];
	if (indata == 0) return 0;
	while (indata > 0) {
		yushu = indata % 16;
		char k;
		if (yushu > 9)
			k = 'a' + yushu - 10;
		else
			k = '0' + yushu;
		ss[i] = k;
		indata = indata / 16;
		i--;
	}

	//****进行倒序  
	for (int j = 0; j<i + 1; j++) {
		ss[j] = '0';
	}
	int t, temp;
	t = ss[0]; ss[0] = ss[6]; ss[6] = t;
	t = ss[1]; ss[1] = ss[7]; ss[7] = t;
	t = ss[2]; ss[2] = ss[4]; ss[4] = t;
	t = ss[3]; ss[3] = ss[5]; ss[5] = t;
	for (i = 0; i < 8; i++) {
		if (ss[i] != '0') {
			temp = i;
			break;
		}
	}
	int k;
	int num = 0;
	for (i = temp; i < 8; i++) {
		if (ss[i] >= 'a'&&ss[i] <= 'f')
			k = 10 + ss[i] - 'a';
		else
			k = ss[i] - '0';
		num = num * 16 + k;
	}
	return num;
}

2.Shp头文件的创建

Shp头文件参数之前已经介绍很清楚了,按照顺序创建对应类型的变量,赋值,FileCode和FileLength需要转化为big类型。其中FileLength由于刚开始写的时

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值