make point in postgres

本文提供了两个具体的坐标转换SQL语句示例,展示了如何使用PostGIS中的函数将经纬度坐标从WGS84(EPSG:4326)转换到Web Mercator(EPSG:900913)。这对于地理信息系统(GIS)应用中地图数据的投影变换非常有用。
select astext(transform(setsrid(st_makepoint(118.08,39.57),4326),900913));

select astext(transform(setsrid(st_makepoint(118.28,39.73),4326),900913));
<think>我们有一个表t_shirei,其中包含一个geometry类型的列shutsudo_place_ido_keido。我们要向该列插入一个点数据,例如:POINT(139.767125 35.681244)。 在PostgreSQL中,如果我们使用了PostGIS扩展(这是处理几何数据的常用扩展),那么我们可以使用PostGIS提供的函数来插入几何数据。 根据引用[3]中给出的示例,他们使用了POLYGON的表示方法,但是我们需要插入的是POINT。 插入几何数据通常有两种方式: 1. 使用EWKT(Extended Well-Known Text)格式的字符串,然后通过ST_GeomFromEWKT函数转换。 2. 使用PostGIS提供的构造函数,例如ST_MakePoint。 由于引用[3]中使用了WKT(Well-Known Text)格式,我们可以推测类似地,POINT也可以使用WKT格式。但是,直接插入字符串是不行的,我们需要将其转换为geometry类型。 因此,我们可以这样插入: 方法一:使用ST_GeomFromText函数 ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_GeomFromText('POINT(139.767125 35.681244)')); ``` 方法二:使用ST_MakePoint函数 ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_MakePoint(139.767125, 35.681244)); ``` 注意:这里我们假设坐标的顺序是经度(longitude)在前,纬度(latitude)在后。在WKT中,坐标顺序是X(经度)然后Y(纬度)。 另外,使用这些函数需要安装PostGIS扩展。如果还没有安装,需要先安装并创建扩展: ```sql CREATE EXTENSION postgis; ``` 因此,完整的步骤应该是: 1. 确保已经安装了PostGIS扩展(如果没有,请先安装)。 2. 使用上述两种方法之一插入数据。 根据引用[3]的示例,他们使用的是多边形,但插入的方法类似,都是通过文本表示然后转换,或者使用构造函数。 所以,针对用户的问题,我们可以给出两种插入方法的示例。 注意:在插入之前,请确保该列的数据类型确实是geometry(通常是Point、Polygon等)。如果该列是特定的几何类型(比如Point),那么我们必须插入相同类型的数据。 另外,如果该表还有其他列,需要为它们提供值或设置为允许NULL,否则插入会失败。 因此,我们给出两种方法的示例代码。 方法一(使用ST_GeomFromText): ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_GeomFromText('POINT(139.767125 35.681244)')); ``` 方法二(使用ST_MakePoint): ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_MakePoint(139.767125, 35.681244)); ``` 这两种方法都可以,但要注意坐标的顺序。在ST_MakePoint中,第一个参数是经度,第二个是纬度。 另外,为了确保坐标系正确,如果数据需要指定SRID(空间参考标识符),则可以在函数中加入SRID参数。例如,如果是WGS84坐标系(SRID=4326): ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_SetSRID(ST_MakePoint(139.767125, 35.681244), 4326)); ``` 或者 ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_GeomFromText('POINT(139.767125 35.681244)', 4326)); ``` 根据引用[3]中的示例,他们没有指定SRID,所以如果不需要指定坐标系,可以省略。 总结回答: 在PostgreSQL中插入geometry类型的数据(Point),需要使用PostGIS函数。我们提供了两种方法,并给出了示例代码。 注意:使用前确保已安装并启用了PostGIS扩展。 </think>### PostgreSQL中向geometry类型列插入数据的方法 根据您的要求,以下是向`t_shirei`表的`shutsudo_place_ido_keido`列(geometry类型)插入点数据的完整方法: #### 1. **确认PostGIS扩展已启用** 必须确保数据库已安装并启用PostGIS扩展: ```sql CREATE EXTENSION IF NOT EXISTS postgis; ``` 验证安装:`SELECT PostGIS_Version();`[^1][^3] #### 2. **插入POINT数据的两种标准方法** **方法一:使用EWKT格式(带SRID)** ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_GeomFromEWKT('SRID=4326;POINT(139.767125 35.681244)')); ``` - `SRID=4326`:指定WGS84坐标系(GPS标准) - 这是最推荐的规范写法[^3] **方法二:使用坐标构造函数** ```sql INSERT INTO t_shirei (shutsudo_place_ido_keido) VALUES (ST_SetSRID(ST_MakePoint(139.767125, 35.681244), 4326)); ``` #### 3. **验证插入结果** ```sql SELECT ST_AsText(shutsudo_place_ido_keido) AS wkt_format, ST_X(shutsudo_place_ido_keido) AS longitude, ST_Y(shutsudo_place_ido_keido) AS latitude FROM t_shirei; ``` 预期返回: ``` wkt_format | longitude | latitude ---------------------------+------------+---------- POINT(139.767125 35.681244)| 139.767125 | 35.681244 ``` #### 📌 关键注意事项 1. **坐标系必须明确**: - 未指定SRID时数据可能无法被GIS工具识别 - 日本区域通用SRID:`4326`(WGS84)或`6677`(JGD2011)[^3] 2. **几何验证**: ```sql INSERT ... VALUES (ST_MakeValid(ST_GeomFromText(...))) ``` 避免插入非法几何图形[^1] 3. **性能建议**: - 为geometry列创建空间索引: ```sql CREATE INDEX idx_gist_geom ON t_shirei USING GIST (shutsudo_place_ido_keido); ``` - 批量插入时使用`COPY`命令代替逐行`INSERT`[^5] #### 操作图解 ```mermaid graph LR A[准备POINT数据] --> B{选择插入方式} B -->|推荐| C[EWKT格式] B -->|编程友好| D[ST_MakePoint] C --> E[指定SRID=4326] D --> F[ST_SetSRID封装] E --> G[执行INSERT] F --> G G --> H[验证空间函数] ``` 💡 **实用提示**: - 坐标顺序必须是`经度 纬度`(X,Y) - 使用`ST_Transform`可转换坐标系,例如: ```sql ST_Transform(ST_GeomFromEWKT('SRID=4612;POINT(...)'), 4326) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值