shp转txt获取其坐标点(可批量操作)

1 篇文章 0 订阅

shp转txt获取其坐标点

1.shp->json

这样做可以获取 shp 文件每个面的组成顶点的坐标。转换方式为登陆该网址在线批量转换。https://mapshaper.org/
Json 格式如下:
在这里插入图片描述
其中单独一个面的表示如下,前面有声明所绘制的属性为面,后面描述了该面的属性,是 shp 文件中的字段。中间则是表示组成该面的顶点坐标,用【】将坐标框起来。
在这里插入图片描述

2.json->txt

但是我们如果只需要坐标不需要这些属性的话,可以对字符串处理将其进行分割。处理后结果如下:
在这里插入图片描述
其中第一个顶点坐标与最后一个顶点坐标为同一个坐标。
以下代码的功能是将一个string分割为许多小的string,并去除分隔符。这里的分隔符pattern可以自行设置。

vector<string> split(string str, string pattern)
{
	string::size_type pos;
	vector<string> result;
	str += pattern;//扩展字符串以方便操作
	int size = str.size();

	for (int i = 0; i<size; i++)
	{
		pos = str.find(pattern, i);
		if (pos<size)
		{
			std::string s = str.substr(i, pos - i);
			result.push_back(s);
			i = pos + pattern.size() - 1;
		}
	}
	return result;
}

3.批量转换

对于批量处理,可以获取当前文件夹下所有格式为json的文件名,然后分别对每个文件执行转换操作,达到批量转换
获取当前文件夹下的所有格式为json的文件名:

  • 批量获取当前文件夹下固定格式文件名
    头文件:
    #include <windows.h>
    #include <io.h>
void GetAllFormatFiles(string path, vector<string>& files, string format)
{
	//文件句柄  
	long   hFile = 0;
	//文件信息  
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1)
	{
		do
		{
			if ((fileinfo.attrib &  _A_SUBDIR))
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
				{
					//files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
					GetAllFormatFiles(p.assign(path).append("\\").append(fileinfo.name), files, format);
				}
			}
			else
			{
				files.push_back(p.assign(fileinfo.name));
			}
		} while (_findnext(hFile, &fileinfo) == 0);

		_findclose(hFile);
	}
}

//获取该路径下所有json文件的绝对路径名
vector<string> readAllFiles(string filePath)
{
	vector<string> files;
	string format = ".json";
	GetAllFormatFiles(filePath, files, format);
	int size = files.size();
	//cout << size << endl;
	for (int i = 0; i<size; i++)
	{
		files[i] = filePath + "/" + files[i];//改为绝对路径
		cout << files[i] << endl;//输出到屏幕
	}
	return files;
}
  • 循环读取文件路径并执行转换操作。
    转换操作就是在split函数的基础上自己设置分隔符操作即可。

  • 程序
    如果不想写也可以用我用qt写的简单小程序(好吧我就是为了积分~)
    https://download.csdn.net/download/lemon_haha/11175744 选择文件夹后关闭即可。
    注意:本程序仅在windows平台下测试通过,且json由shp转换而来,其中shp没有任何其它属性,所以设置的固定的分割符,可以满足大部分无属性简单json转换,但不一定适用于所有json文件。
    不过也没事,若是不满足条件也可以基于以上程序自己设置分隔符即可。
    在这里插入图片描述
    在这里插入图片描述
    最后生成结果如下:
    在这里插入图片描述
    在这里插入图片描述

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值