postgis 建表插入数据sql

本文介绍了如何使用SQL语句创建包含几何字段的空间数据表,并通过具体示例演示了如何插入带有坐标信息的多边形数据。
CREATE TABLE lgdtemp(
   ID  SERIAL PRIMARY KEY,
   state  INT  NOT NULL,
   geom geometry(Polygon,4326)
); 


INSERT INTO lgdtemp
VALUES (0,st_geomfromText('POLYGON((122.10243474277 37.586913554557,122.10397969516 37.587385623344,122.10500966342 37.587385623344,122.10496674808 37.587771861442,122.10470925601 37.58785769213,122.10552464755 37.588329760917,122.10827122959 37.588286845573,122.1081853989 37.588544337638,122.1088720444 37.588715999015,122.10947285922 37.588587252982,122.10938702854 37.587213961967,122.11144696506 37.587128131278,122.11123238834 37.588887660392,122.11106072696 37.589188067802,122.11161862644 37.589445559867,122.11161862644 37.590132205375,122.11123238834 37.590518443473,122.11157571109 37.59069010485,122.11127530368 37.591162173637,122.11157571109 37.591376750358,122.11629639896 37.591376750358,122.11659680637 37.591033427604,122.11638222965 37.590561358817,122.11676846774 37.590475528129,122.11629639896 37.589230983146,122.11676846774 37.58927389849,122.1163393143 37.587128131278,122.1163393143 37.58704230059,122.11891423496 37.58704230059,122.11869965824 37.588544337638,122.11951504978 37.588587252982,122.11985837253 37.588329760917,122.11985837253 37.588201014884,122.12260495456 37.588201014884,122.12320576938 37.587900607474,122.123034108 37.58704230059,122.12427865299 37.587171046622,122.12573777469 37.586613147147,122.12582360538 37.586527316459,122.12522279056 37.584553210624,122.12487946781 37.584553210624,122.11586724552 37.584767787345,122.11616765293 37.583651988395,122.11123238834 37.583823649772,122.11170445712 37.584767787345,122.10625420841 37.584896533378,122.10569630893 37.584681956657,122.10307847293      37.584639041312,122.10303555759 37.584681956657,122.10243474277 37.586913554557))', 4326));

INSERT INTO lgdtemp(state , geom)
VALUES(2,st_geomfromText('POLYGON((122.10243474277 37.586913554557,122.10397969516 37.587385623344,
122.10500966342 37.587385623344,122.10496674808 37.587771861442,122.10470925601 37.58785769213,
122.10552464755 37.588329760917,122.10827122959 37.588286845573,
122.1081853989 37.588544337638,122.1088720444 37.588715999015,
122.10947285922 37.588587252982,122.10938702854 37.587213961967,
122.11144696506 37.587128131278,122.11123238834 37.588887660392,
122.11106072696 37.589188067802,122.11161862644 37.589445559867,
122.11161862644 37.590132205375,122.11123238834 37.590518443473,122.11157571109 37.59069010485,
122.11127530368 37.591162173637,122.11157571109 37.591376750358,122.11629639896 37.591376750358,
122.11659680637 37.591033427604,122.11638222965 37.590561358817,122.11676846774 37.590475528129,
122.11629639896 37.589230983146,122.11676846774 37.58927389849,122.1163393143 37.587128131278,
122.1163393143 37.58704230059,122.11891423496 37.58704230059,122.11869965824 37.588544337638,
122.11951504978 37.588587252982,122.11985837253 37.588329760917,122.11985837253 37.588201014884,
122.12260495456 37.588201014884,122.12320576938 37.587900607474,122.123034108 37.58704230059,
122.12427865299 37.587171046622,122.12573777469 37.586613147147,122.12582360538 37.586527316459,
122.12522279056 37.584553210624,122.12487946781 37.584553210624,122.11586724552 37.584767787345,
122.11616765293 37.583651988395,122.11123238834 37.583823649772,122.11170445712 37.584767787345,
122.10625420841 37.584896533378,122.10569630893 37.584681956657,122.10307847293 37.584639041312,
122.10303555759 37.584681956657,122.10243474277 37.586913554557))', 4326)),
(0,st_geomfromText('POLYGON((122.10243474277 37.586913554557,122.10397969516 37.587385623344,
122.10500966342 37.587385623344,122.10496674808 37.587771861442,122.10470925601 37.58785769213,
122.10552464755 37.588329760917,122.10827122959 37.588286845573,122.1081853989 37.588544337638,
122.1088720444 37.588715999015,122.10947285922 37.588587252982,122.10938702854 37.587213961967,
122.11144696506 37.587128131278,122.11123238834 37.588887660392,122.11106072696 37.589188067802,
122.11161862644 37.589445559867,122.11161862644 37.590132205375,122.11123238834 37.590518443473,
122.11157571109 37.59069010485,122.11127530368 37.591162173637,122.11157571109 37.591376750358,
122.11629639896 37.591376750358,122.11659680637 37.591033427604,122.11638222965 37.590561358817,
122.11676846774 37.590475528129,122.11629639896 37.589230983146,122.11676846774 37.58927389849,
122.1163393143 37.587128131278,122.1163393143 37.58704230059,122.11891423496 37.58704230059,
122.11869965824 37.588544337638,122.11951504978 37.588587252982,122.11985837253 37.588329760917,
122.11985837253 37.588201014884,122.12260495456 37.588201014884,122.12320576938 37.587900607474,
122.123034108 37.58704230059,122.12427865299 37.587171046622,122.12573777469 37.586613147147,
122.12582360538 37.586527316459,122.12522279056 37.584553210624,122.12487946781 37.584553210624,
122.11586724552 37.584767787345,122.11616765293 37.583651988395,122.11123238834 37.583823649772,
122.11170445712 37.584767787345,122.10625420841 37.584896533378,122.10569630893 37.584681956657,
122.10307847293 37.584639041312,122.10303555759 37.584681956657,122.10243474277 37.586913554557))', 4326));

<think>好的,用户想了解PostGIS中的数据类型支持与用法,我需要结合之前的回答和提供的引用内容来整理一个清晰的回答。首先,用户之前的问题是关于ST_开头的函数与其他函数的对比,现在转向数据类型,我需要确保覆盖主要的数据类型,比如geometry和geography,还有栅格数据。 根据引用1,geometry类型的信息存储在geometry_columns中,遵循OGC规范,用户在创时会自动维护这个。应该提到这一点,说明如何查看和管理geometry类型。 引用2提到了在MyBatis中使用TypeHandler处理PostGIS数据类型,特别是如何转换WKT格式。这可能和用户的实际应用相关,但用户现在的问题更偏向理论,所以可能需要简要提到如何与应用程序交互,比如通过WKT或WKB。 引用3讨论了geography类型转换为geometry来使用ST_X函数,这说明两种类型的区别和使用场景,比如地理坐标系和平面坐标系的差异,以及何时需要转换。 引用4提到了栅格数据,虽然引用不完整,但需要补充PostGIS的栅格支持,比如raster类型和相关函数。 接下来,我需要组织数据类型部分,可能分为几何、地理、栅格,以及复合类型如GeometryCollection。还要对比geometry和geography的不同,比如计算距离时的不同方法,以及空间函数的支持情况。 另外,用户可能想知道如何创这些类型的字段,比如语句,以及如何插入数据,比如使用ST_GeomFromText等函数。引用1中的geometry_columns需要解释,确保用户知道如何查询现有空间的信息。 还要注意常见问题,比如选择geometry还是geography,可能的应用场景,比如地理分析使用geography,而平面地图使用geometry。同时,栅格数据的应用场景,如遥感或高程数据存储。 需要确保回答结构清晰,分点说明,并给出示例SQL语句,帮助用户理解如何实际操作。比如创插入数据、查询等步骤,以及如何转换类型。 最后,相关问题部分要引导用户深入,比如性能优化、类型转换的影响,以及空间索引的应用。这些问题可以帮助用户进一步学习,解决实际中可能遇到的问题。</think>### PostGIS数据类型详解及使用指南 --- #### 一、核心数据类型分类 PostGIS支持**几何(Geometry)**、**地理(Geography)**和**栅格(Raster)**三大类空间数据类型,满足不同的空间计算需求。 1. **几何类型(Geometry)** - **定义**:基于平面坐标系(如Web墨卡托),用于二维平面空间计算 - **适用场景**:地图可视化、工程测量、平面分析(如$ST\_Area$计算平面面积) - **子类型**: - 点(`POINT`)、线(`LINESTRING`)、面(`POLYGON`) - 集合类型(`MULTIPOINT`, `GEOMETRYCOLLECTION`等) - **元数据管理**:通过`geometry_columns`自动记录所有几何字段的坐标系(SRID)、几何类型等信息[^1] ```sql -- 查看所有几何字段定义 SELECT * FROM geometry_columns; ``` 2. **地理类型(Geography)** - **定义**:基于地理坐标系(如WGS84),支持球面距离计算(如$ST\_Distance$返回米制单位) - **适用场景**:地球面距离/面积计算(如计算两个城市间的实际距离) - **限制**:部分几何函数需先转换为Geometry类型[^3] ```sql -- 地理类型转几何后提取坐标 SELECT ST_X(geog::geometry) AS longitude FROM city; ``` 3. **栅格类型(Raster)** - **定义**:存储像元矩阵数据(如卫星影像、高程模型) - **功能支持**:波段运算、栅格代数、与矢量数据叠加分析[^4] - **典型函数**:`ST_Intersects`(栅矢叠加分析)、`ST_Clip`(按几何裁剪栅格) --- #### 二、数据类型选择对比 | 特征 | Geometry | Geography | Raster | |---------------|----------------------|----------------------|---------------------| | **坐标系** | 平面坐标系(SRID) | 地理坐标系(SRID=4326) | 任意坐标系 | | **计算方式** | 平面几何计算 | 球面地理计算 | 像元矩阵运算 | | **性能** | 高(适合局部地图) | 低(需球面计算) | 中等(依赖数据量) | | **典型函数** | `ST_Area`, `ST_Length` | `ST_Distance` | `ST_Union`, `ST_Reclass` | --- #### 三、数据类型操作实践 1. **创空间** ```sql -- 创包含几何字段的 CREATE TABLE roads ( id SERIAL PRIMARY KEY, name VARCHAR(64), geom GEOMETRY(LINESTRING, 3857) -- 指定类型和坐标系 ); ``` 2. **数据插入方法** - **WKT格式**(人类可读): ```sql INSERT INTO roads (geom) VALUES (ST_GeomFromText('LINESTRING(0 0, 10 10)', 3857)); ``` - **WKB格式**(二进制高效): ```sql INSERT INTO roads (geom) VALUES (ST_GeomFromEWKB(E'\\x0010...')); ``` 3. **类型转换** - **隐式转换**:部分函数自动处理类型转换 ```sql SELECT ST_Distance(geom::geography, target_geog) FROM points; ``` - **显式转换**:使用`::`操作符或转换函数 ```sql SELECT ST_AsText(geom) FROM (SELECT geog::geometry AS geom FROM cities) t; ``` --- #### 四、应用开发集成 1. **Java类型映射** - **实体类设计**:使用`org.postgis.Geometry`类型或自定义类型处理器[^2] ```java public class Road { private PGgeometry geom; // PostGIS几何对象 // WKT格式转换方法 public String getGeomAsWKT() { return geom.getGeometry().toWKT(); } } ``` 2. **空间索引** - 使用`CREATE INDEX`加速空间查询: ```sql CREATE INDEX roads_geom_gist ON roads USING GIST (geom); ``` --- #### 五、常见问题解答 **Q1: 何时选择Geometry/Geography?** - 需要球面距离计算(如GPS轨迹分析)→ Geography - 平面地图可视化或局部区域分析→ Geometry **Q2: 如何解决函数不兼容问题?** - 使用显式类型转换:`geog::geometry` - 检查函数文档(如`ST_Distance`支持两种类型但计算结果不同) --- ### 流程图:数据类型选择决策 ```mermaid graph TD A[是否需要处理地球面距离/面积?] -->|是| B[使用Geography类型] A -->|否| C{是否涉及栅格分析?} C -->|是| D[使用Raster类型] C -->|否| E[使用Geometry类型] ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

筱芙淘趣坊

为嗷嗷待哺的我助力

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

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

打赏作者

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

抵扣说明:

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

余额充值