# 地理网格编码概述 ## 1. 简介 地理网格编码是将连续的地理空间划分为规则的网格单元,并为每个网格赋予唯一编码的技术。通过将空间对象(点、线、面、三维模型等)转换为网格编码,可以在网格空间中高效地管理和查询空间数据。



CREATE INDEX idx_btree_grid
ON sample_grid_table USING BTREE (grid); |
| **GIN** | 网格编码数组(`GeoSOTGrid[]`、`GeoGridCode[]`) | `&&`(相交)、`@>`(包含)、`<@`(被包含) | 一个空间对象对应多个网格编码时,判断对象集合与目标网格是否存在交集 | CREATE INDEX idx_gin_grid
ON sample_grid_table USING GIN (grid); |
> **选用建议:** 若数据列存储的是单个网格编码值,使用 B-Tree 索引;若列存储的是网格编码数组(如 `ST_AsGeoGridCode` 的返回结果),使用 GIN 索引。
### 坐标系
GeoSOT 和北斗网格编码均基于 **China2000(EPSG:4490)** 坐标系。待编码的空间对象若处于其他坐标系,需先转换至 EPSG:4490 再执行编码。
### 坐标值区间
不同网格支持的坐标值区间可能存在差异,具体取决于编码体系的设计和实现。请根据实际使用的编码体系参考相关文档确认坐标值区间限制。
---
## 3. 快速入门
### 简介
快速入门文档帮助用户快速理解 Yukon 地理网格编码的基本用法,包括建表、插入数据、计算网格编码、创建索引、查询。
更多网格函数见 [接口参考](../modular_api/geosot_api.md)。
### 语法说明
- 创建具有网格编码的表
```sql
CREATE TABLE t_gridcode (
id integer,
geom geometry, -- 几何对象
grid geogridcode[] -- 通用网格编码数组
);
```
- 插入几何数据
```sql
-- 插入点数据
INSERT INTO t_gridcode (id, geom)
VALUES (1, ST_GeomFromText('POINT(116.31522216796875 39.910277777777778)', 4490)),
(2, ST_GeomFromText('POINT(116.31522217796875 39.910277776777778)', 4490));
-- 插入面数据
INSERT INTO t_gridcode (id, geom)
VALUES (3, 'SRID=4490;POLYGON((116.31 39.90, 116.32 39.90, 116.32 39.91, 116.31 39.91, 116.31 39.90))'::geometry);
```
- 计算网格编码
```sql
-- 生成指定层级的 GeoSOT 网格编码
UPDATE t_gridcode
SET grid = ST_AsGeoGridCode(geom, 15, 'geosot');
-- 生成指定层级的北斗网格编码
UPDATE t_gridcode
SET grid = ST_AsGeoGridCode(geom, 4, 'beidou');
```
- 对网格码创建索引
```sql
-- 对网格编码数组列创建 GIN 索引
CREATE INDEX idx_gridcode_gin
ON t_gridcode USING GIN (grid);
```
- 查询
```sql
-- 与某个网格相交
SELECT id
FROM t_gridcode
WHERE grid && ARRAY['geosot;G001310322-230230'::geogridcode];
-- 网格编码转换为 WKT 几何对象
SELECT ST_AsText(ST_GeomFromGeoGridCode(unnest(grid)))
FROM t_gridcode
WHERE id = 1;
```
---