当前位置: 首页 > news >正文

WebGIS 中常用空间数据格式

看过的知识不等于学会。唯有用心总结、系统记录,并通过温故知新反复实践,才能真正掌握一二
作为一名摸爬滚打三年的前端开发,开源社区给了我饭碗,我也将所学的知识体系回馈给大家,助你少走弯路!
OpenLayers、Leaflet 快速入门 ,每周保持更新 2 个案例
Cesium 快速入门,每周保持更新 4 个案例

地理空间数据格式介绍

在地理空间信息领域,数据格式是存储、交换和表示地理空间信息的基础。了解这些格式的特点、用途和结构对于进行地理空间分析和开发至关重要

GeoJSON

GeoJSON 基于 JSON 的开放标准,用于地理空间数据交换,是 WebGIS 领域最流行和广泛支持的格式之一。

  • 官网:geojson.org,数据示例

  • 工具:在线编辑  geojson.io

  • 数据格式

    • GeoJSON 对象可以是 Geometry(几何)、Feature(特征)或 FeatureCollection(特征集合)。
  • 几何类型 (Geometry)

    • Point (点): [经度, 纬度]
    • LineString (线): [[经度1, 纬度1], [经度2, 纬度2], ...]
    • Polygon (多边形): [[[经度1, 纬度1], ...], [[内环经度1, 内环纬度1], ...]] (第一个环是外环,后续是内环/洞)
    • MultiPoint (多点)
    • MultiLineString (多线)
    • MultiPolygon (多多边形)
    • GeometryCollection (几何集合)
  • 特征 (Feature):包含一个 geometry 对象和一个 properties 对象(用于存储非地理属性)。

{"type": "Feature","geometry": {"type": "Point","coordinates": [102.0, 0.5]},"properties": {"name": "Dinagat Islands"}
}
  • 特征集合 (FeatureCollection):包含一个 features 数组,每个元素都是一个 Feature 对象。
{"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Point","coordinates": [102.0, 0.5]},"properties": {"name": "Dinagat Islands"}},{"type": "Feature","geometry": {"type": "LineString","coordinates": [[102.0, 0.0],[103.0, 1.0],[104.0, 0.0],[105.0, 1.0]]},"properties": {"name": "Line"}}]
}

WKT (Well-Known Text)

  • 数据格式:文本格式描述几何对象(点、线、面)和坐标系

  • 几何类型

    • POINT (x y): POINT (10 20)
    • LINESTRING (x1 y1, x2 y2, ...): LINESTRING (10 20, 30 40, 50 60)
    • POLYGON ((x1 y1, x2 y2, ..., x1 y1), (hole_x1 hole_y1, ...))
      POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))
    • MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION
  • 可以包含 Z (高程) 和 M (测量值) 维度,例如 POINT Z (10 20 30)

几何类型WKT 格式GeoJSON 格式
PointPOINT (30 10){ "type": "Point", "coordinates": [30, 10] }
LineStringLINESTRING (30 10, 10 30, 40 40){ "type": "LineString", "coordinates": [[30, 10], [10, 30], [40, 40]] }
PolygonPOLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)){ "type": "Polygon", "coordinates": [[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]] }
PolygonPOLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30)){ "type": "Polygon", "coordinates": [[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]]] }
MultiPointMULTIPOINT ((10 40), (40 30), (20 20), (30 10)){ "type": "MultiPoint", "coordinates": [[10, 40], [40, 30], [20, 20], [30, 10]] }
MultiPointMULTIPOINT (10 40, 40 30, 20 20, 30 10){ "type": "MultiPoint", "coordinates": [[10, 40], [40, 30], [20, 20], [30, 10]] }
MultiLineStringMULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10)){ "type": "MultiLineString", "coordinates": [[[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]]] }
MultiPolygonMULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5))){ "type": "MultiPolygon", "coordinates": [[[[30, 20], [45, 40], [10, 40], [30, 20]]], [[[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]] }
MultiPolygonMULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20))){ "type": "MultiPolygon", "coordinates": [[[[40, 40], [20, 45], [45, 30], [40, 40]]], [[[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]]] }

WKB (Well-Known Binary)

WKB 是二进制编码的几何数据,与 WKT 等价但更高效。

  • 数据格式

    • 二进制字节流,不可直接人类阅读。
    • 包含字节序(大端/小端)、几何类型代码、坐标数据等。
    • 例如,一个点 POINT (10 20) 的 WKB 可能会是 010100000000000000000024400000000000003440 (十六进制表示)。

TopoJSON

TopoJSON 是 GeoJSON 的一个扩展,它在编码地理空间数据时包含了拓扑信息。这意味着共享的边界(例如,相邻国家之间的边界)只存储一次,从而显著减小文件大小,并支持拓扑操作(如合并、简化)。

  • 官网:topojson.org

  • 工具:通常与 D3.js 等可视化库结合使用,例如 d3-geo-topojson

  • 数据格式

    • TopoJSON 对象是一个 Topology,包含 objects(地理特征)、arcs(共享的几何路径)和 transform(坐标转换信息)。
    • arcs: 存储所有几何图形的原始坐标路径。共享的边界会作为单个弧线存储。
    • objects: 引用 arcs 中的索引来构建几何图形。每个对象可以是一个 PointLineStringPolygon 或它们的集合,但其坐标不再直接存储,而是通过 arcs 的索引和方向来表示。
    • transform: 包含 scaletranslate 值,用于将量化后的整数坐标转换回原始的浮点坐标,进一步减小文件大小。
{"type": "Topology","transform": {"scale": [0.0005, 0.0005],"translate": [100, 0]},"objects": {"example_polygons": {"type": "GeometryCollection","geometries": [{"type": "Polygon","arcs": [[0]],"properties": { "name": "Polygon A" }},{"type": "Polygon","arcs": [[1, 2]],"properties": { "name": "Polygon B" }}]}},"arcs": [[[0, 0],[100, 0],[100, 100],[0, 100],[0, 0]],[[100, 0],[200, 0],[200, 100],[100, 100]],[[100, 100],[0, 100]]]
}
  • 文件大小更小:通过消除冗余的边界数据,文件大小通常比 GeoJSON 小 80% 左右。

KML (Keyhole Markup Language)

KML 是一种基于 XML 的文件格式,用于在地球浏览器(如 Google Earth)中显示地理空间数据。它不仅可以表示几何图形,还可以包含样式、描述、时间信息和相机视角等丰富的可视化属性。

  • 数据格式

    • XML 结构,包含 <Placemark>(地标)、<Point><LineString><Polygon> 等标签。
    • 可以定义样式 (<Style>)、描述 (<description>)、名称 (<name>)、图标 (<Icon>) 等。
    • 支持文件夹 (<Folder>) 组织数据。
<?xml version="1.0" encoding="UTF-8"?><kmlxmlns="http://www.opengis.net/kml/2.2"xmlns:ns2="http://www.google.com/kml/ext/2.2"xmlns:ns3="http://www.w3.org/2005/Atom"xmlns:ns4="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
><Document><LookAt><longitude>-74.01020256421765</longitude><latitude>40.70974625546435</latitude><altitude>694.1959814771428</altitude><heading>0.0</heading><tilt>0.0</tilt><range>560.9467647722848</range><altitudeMode>clampToGround</altitudeMode></LookAt><NetworkLink><name>Manhattan (NY) points of interest</name><visibility>1</visibility><open>1</open><description>Points of interest in New York, New York (on Manhattan). One of theattributes contains the name of a file with a picture of the point ofinterest.</description><LookAt><longitude>-74.00668161555254</longitude><latitude>40.71371615223534</latitude><altitude>2173.081355567034</altitude><heading>0.0</heading><tilt>0.0</tilt><range>1755.96371704499</range><altitudeMode>clampToGround</altitudeMode></LookAt><Url><href>http://localhost:8520/geoserver/tiger/wms?service=wms&amp;request=GetMap&amp;version=1.1.1&amp;format=application/vnd.google-earth.kml+xml&amp;layers=poi&amp;styles=poi&amp;height=2048&amp;width=2048&amp;transparent=false&amp;srs=EPSG:4326&amp;format_options=AUTOFIT:true;KMATTR:true;KMPLACEMARK:false;KMSCORE:40;MODE:refresh;SUPEROVERLAY:false</href><refreshInterval>0.0</refreshInterval><viewRefreshMode>onStop</viewRefreshMode><viewRefreshTime>1.0</viewRefreshTime><viewBoundScale>1.0</viewBoundScale></Url></NetworkLink></Document>
</kml>
  • 易于分享:单个 .kml.kmz (压缩包) 文件即可包含所有数据和样式。
  • 官网/规范:OGC KML
  • 在线查看器/编辑器:Google Earth Pro (桌面版), KML Viewer

Shapefile

Shapefile 广泛应用于桌面 GIS 软件中。它实际上不是一个单一文件,而是一组相关文件的集合,共同构成一个完整的地理数据集。

  • 数据格式

  • 一个完整的 Shapefile 至少包含以下三个文件:

    • .shp:存储几何图形数据(点、线、面)。
    • .shx:存储几何图形的索引,用于快速查找。
    • .dbf:存储属性数据,以 dBase 格式组织。
  • 常见可选文件:

    • .prj:存储投影信息(WKT 格式)。
    • .cpg:存储字符编码信息。
    • .sbn, .sbx:空间索引。

GIS 数据转换器

geosaas.com

  • 支持 DWG、SHP、MDB、Kml、Kmz、Gpx、GeoJson、EXCEL、TXT、CSV、SQL Server、MySQL、PostgreSQL、JPG、PDF、GeoTiff、Image(img)、Bitmap(bmp)、Png 格式之间的批量转换;

  • 支持国家 2000、西安 80、北京 54、WGS84、火星坐标、百度坐标、墨卡托坐标等坐标系任意转换;支持批量转换、图层合并和地图数据浏览;

http://www.lryc.cn/news/597144.html

相关文章:

  • 2025暑期—06神经网络-常见网络3
  • 2025暑期—06神经网络-常见网络2
  • 2026 拼多多秋招内推码(提前批)
  • 为什么设置 git commit签名是公钥而不是私钥?
  • yo easy-ui5生成项目,ui5版本降级处理
  • Tang Prime 20K板I2S输入输出例程
  • Hexo - 免费搭建个人博客01 - 安装软件工具
  • Java应用程序内存占用分析
  • 大致自定义文件I/O库函数的实现详解(了解即可)
  • 软件开发、项目开发基本步骤
  • Java从入门到精通!第十二天(泛型)
  • 搭建 Android 开发环境JAVA+AS
  • 阿里云ODPS十五周年重磅升级发布:为AI而生的数据平台
  • HTTP性能优化终极指南:从协议原理到企业级实践
  • k8s pvc是否可绑定在多个pod上
  • 【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置
  • 优化 Elasticsearch JVM 参数配置指南
  • 每日一算:华为-批萨分配问题
  • 谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】
  • 常用的正则表达式
  • 代码随想录算法训练营第五十二天|图论part3
  • 图论的题目整合(Dijkstra)
  • 【图论,拓扑排序】P1347 排序
  • 算法竞赛备赛——【图论】最小生成树
  • Modbus协议详解与c#应用
  • 算法竞赛备赛——【图论】拓扑排序
  • CI/CD与DevOps集成方法
  • python在windows电脑找回WiFi密码
  • 【按下电源键后,电脑里发生了什么?——BIOS:启动世界的“第一把钥匙”】
  • C++编程学习(第14天)