矢量数据格式
矢量数据目前是最常用的地理空间格式,因为它是存储空间信息最有效的一种方式。而且大体上来说,计算机存储和处理所需的资源少于栅格数据。
矢量数据只存储几何图元,包括点、线和多边形。
Shapefile
使用最普遍的地理空间格式是Esri的Shapefile文件。1998年,地理信息软件公司Esri将Shapefile文件格式标准作为一种开放规范。
项目Shapefile文件支持的文件扩展名 | 用途 | 备注 |
.shp | 用于存储要素几何的主文件其中包括几何图形 | 必要文件。某些软件只需要读取.shp文件中的几何元素,而不需要.shx和.dbf文件 |
.shx | 形状索引文件,适当尺寸的几何元素索引信息可以加快访问 | 必要文件。这个文件必须和.shp文件配合使用,否则就会失去意义 |
.dbf | 数据库文件,其中包括几何元素的属性信息 | 必要文件。基于非常古老的FoxPro和Dbase格式设计。目前在开放规范中称其为Xbase。.dbf文件可以被大部分电子表格软件打开 |
.sbn | 空间bin文件,Shapefile文件的索引文件 | 包含一个特征的边框,映射了一个256×256的整数网格。很常见 |
.sbx | .sbn文件的索引记录文件 | 常用空间索引的有序记录索引。很常见 |
.prj | 以WKT格式存储的地图投影信息 | 很常见的文件并且常用于GIS软件中地图实时投影。相同的格式文件对栅格数据也适用 |
.fbn | 只读特征元素的空间索引 | 非常少见 |
.fbx | .fbn文件空间索引的记录索引 | 非常少见 |
.ixs | 地理编码索引 | 地理编码应用中很常见,其中包括车辆导航类应用 |
.mxs | 另外一种地理编码索引 | 比.ixs格式少见一些 |
.aih | 属性索引 | 非常传统的格式,现代软件已经很少使用 |
.aih | 属性索引 | 和.ain文件搭配使用 |
.qix | 四叉树索引 | 开源社区发明的一种空间索引格式,因为Esri直到最近才提供了.sbn和.sbx文件的说明文档 |
.atx | 属性索引 | Esri发布的软件中采用的一种特殊的属性索引,可以加快属性查询速度 |
.shp.xml | 元数据 | 地理空间元数据.xml的容器,可以是任何遵循XML标准的信息,其中的标准包括FGDC和ISO |
.cpg | .dbf的代码文件 | 为.dbf文件提供国际化支持 |
geojson
GeoJOSN是基于JavaScript对象表示(JavaScript Object Notation,JSON)格式的一种新的、智能化的文本格式,其中JSON用作数据交换格式已经很多年了。除了历史较短,GeoJSON已被主流的地理空间软件和大部分网站发布数据所采用,因为JavaScript是动态网页支持的语言,GeoJSON能够和JavaScript无缝集成。下面是一个点的示例文件:
Shapefile转geojson
方法一:ogr2ogr命令转换文件格式
下载这个软件。根据电脑是win32还是x64的进行选择。
如果是,windows,大家要下载zip版本
下载后解压,运行SDKShell.bat:
然后以命令行式进行输入:
#Shapefile转geojson
ogr2ogr -f GeoJSON D:\\xxx\\result.geosion D:\\xxx\\mangrove.shp
#当然也可以GeoJson转shp
ogr2ogr -f "ESRI Shapefile" D:\\xxx\\result.shp D:\\xxx\\test.geojson
方法二:Python
1、需要安装geopandas
可以使用pip进行安装,也可以使用conda 安装,但需要把其他的一些依赖库事先安装好(numpy, pandas, shapely, fiona, pyproj等)。最省事的就是利用Anaconda安装。
2、代码
两个参数,input_file(输入的文件,xxx.shp),output_file(输出的文件,xxx.json)。主要代码只有两行:读数据(read_file),写数据(to_file);写数据时指定 driver=“GeoJSON” 即可;为防止中文乱码,指定 encoding=‘utf-8’。
import geopandas as gpd
def Shptogeoj(input_file, output_file):
data = gpd.read_file(input_file)
# 指定utf-8编码,防止中文乱码
data.to_file(output_file, driver="GeoJSON", encoding='utf-8')
print('Success: File '+input_file.split('\\') [-1] + ' conversion completed')
if __name__ == '__main__':
input_file = r"MSCities_Geo_Pts\MSCities_Geo_Pts.shp"
output_file = "MSCities_Geo_Pts_toGeojson.txt"
Shptogeoj(input_file,output_file)
总结
学习笔记,仅供学习,如有侵权请联系删除。