地理数据表达方式学习——KML与SHP

本文探讨了KeyholeMarkupLanguage(KML)和ESRIShapefile(SHP)这两种在GIS中的重要格式,介绍了它们的应用场景、结构特点和文件组成。同时,通过ArcGIS和GeoPandas的实例,分析了三维线矢量数据的结构和生成方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、KML-Keyhole Markup Language

        Keyhole Markup Language (KML)是一种XML符号,用于浏览器中二维地图和三维地球的地理注释和地理可视化(地理数据包括点、线、面、多边形、多面体以及模型等)。KML是伴随着Google Earth的使用而开发的,Google Earth是第一个能够查看和图形化编辑KML文件的程序。KML于2008年成为开放地理空间联盟的国际标准,其逐渐成为很多GIS相关企业进行地理数据交换的格式[1]。

图一 KML格式样例展示

二、SHP-Shapefile

        ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所(ESRI)开发的空间数据开放格式,是能够在ESRI与其他公司的产品之间进行数据互操作的交换格式。目前,该文件格式已经成为了地理信息软件界的开放标准。Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性,但没法存储地理数据的拓扑信息[2]。

        Shapefile文件指的是一种文件存储的方法,实际上该种文件格式是由多个文件组成的。其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"文件(表示同一数据的一组文件其文件名前缀应该相同)。除了这三个必须的文件以外,还有八个可选的文件,使用它们可以增强空间数据的表达能力。值得注意的是,Shapefile的所有文件都必须位于同一个目录之中[2]。

图二 Shapefile的文件组成(图源wikipedia)

        Shapefile图形格式(.shp)是Shapefile的主文件,其包含了地理参照数据。该文件由一个定长的文件头和一个或若干个变长的记录数据组成。每一条变长数据记录包含一个记录头和一些记录内容。主文件头包含17个字段,共100个字节,其中包含九个4字节(32位有符号整数,int32)整数字段,紧接着是八个8字节(双精度浮点数)有符号浮点数字段[2]。

图三 .shp文件的组成结构(图源wikipedia)
图四 .shp文件的图形类型编号表(图源wikipedia)

二、三维线矢量数据结构分析

        本实验基于ArcGIS软件(ArcScene)对三维线矢量数据结构进行了查看并尝试基于GeoPandas库进行三维线矢量的模拟生成且利用CloudCompare开源软件进行模拟三维线矢量数据可视化,其旨在探索三维线矢量生成方法并针对三维线矢量进行结构分析。

(一)获取三维曲线矢量数据并可视化

图五 三维曲线矢量数据ArcScene可视化图

(二)查询三维曲线矢量数据的数据结构表达

        由图六及图四图形类型表可知,该三维曲线矢量数据的几何图形类型为LINESTRING Z,其存储序列为位于计算曲线上的多个XYZ三维点坐标。熟悉GIS矢量数据结构的学者都应该知道,线是由点构成的,其在数据结构上表现的就是一连串有序排列的点[4]。

图六 三维曲线矢量数据的数据结构查阅

(三)基于GeoPandas生成模拟曲线数据的矢量化文件

        详细代码详见参考资料[4],此处仅作为简单实验以验证操作可行性。

import geopandas
import numpy as np
from shapely.geometry import LineString

# 制造模拟直线数据
LineDataX = np.array([i*3 for i in range(10)])
LineDataY = np.array([i*3 for i in range(10)])
LineDataZ = np.array([i*3 for i in range(10)])
LineDataXYZ = np.vstack((np.vstack((LineDataX,LineDataY)),LineDataZ)).T
# 创建并保存三维直线矢量数据
# 无论矢量线条的数量为多少,均需要将每一条LINESTRING Z存于一个列表之中
line = [LineString(LineDataXYZ)]
geoDataFrame = geopandas.GeoDataFrame(geometry = line)
geoDataFrame.to_file("test.shp")

(四)实验结果展示

图七 shpfile文件生成结果
图八 模拟数据直线矢量化结果可视化

参考资料:

[1] https://en.wikipedia.org/wiki/Keyhole_Markup_Language

[2] https://en.wikipedia.org/wiki/Shapefile

[3] CloudCompare - home

[4] 强大的GeoPandas,几行代码实现点转线功能_geopandas存储为geojson-CSDN博客

[5] 三维空间点的直线方程拟合(最小二乘法)_三维空间拟合直线方程ppt-CSDN博客

参考工具库:

/*1*/ User guide — GeoPandas 0+untagged.50.g5558c35.dirty documentation

/*2*/ pyshp · PyPI

/*3*/ shapely · PyPI

/*4*/ API — GDAL documentation

/*5*/ The Computational Geometry Algorithms Library(The Computational Geometry Algorithms Library,C++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doll ~CJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值