WKT
WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定
WKT对象格式
POINT(0 0)
——点LINESTRING(0 0,1 1,1 2)
——线POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
——面MULTIPOINT(0 0,1 2)
——多点MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))
——多线MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
——多面GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4)))
——几何集合
WKT相关函数
st_astext(geometry) Geometry转为WKT字符串
保存在数据库中的空间信息相关字段是Geometry类型,如果直接查看的话,会是
0106000020E61000000100000001030000000100000005000000AC071B8ADAE85A409847702325DD41406414E638D5E85A4028CAE37824DD4140C83AFA04D5E85A409806BE6F2ADD41406CED5B52DAE85A40B021BD1D2BDD4140AC071B8ADAE85A409847702325DD4140
这样的字符串。
若这个字段叫geom
,则使用select st_astext(geom) from table_name;
将Geometry转为WKT字符串进行查询
st_geomfromtext(string,int) WKT字符串转为Geometry
第二个参数是可选的,代表SRID。
如
insert into table_name(geom) values(st_geomfromtext('POLYGON((107.354261 35.563713,107.354261 35.873718,107.914218 35.873718,107.914218 35.563713,107.354261 35.563713))', 4326))
在空间数据库的上下文中,用来描述几何的定义空间被称为空间参照系(Spatial Reference System,简称 SRS)。空间参照系至少定义以下内容:
- 基础坐标系的测量单位(度、米等)
- 最大坐标值和最小坐标值(也称为边界)
- 缺省线性测量单位
- 数据是平面数据还是椭球体数据
- 用于将数据转换为其它 SRS 的投影信息
每个空间参照系均有一个标识符,称为空间参照标识符(Spatial Reference Identifier,简称 SRID)。当 执行操作时(如确定一个几何是否与另一个几何相接触),将使用 SRID 查找空间参照系定义,以确保正确执行对空间参照系的计算。
因此个人感觉可以简单理解为坐标系。
SRID 空间参照系 0 缺省值,代表二维坐标系 4326 WGS84 提供的地球球体坐标系 1000004326 WGS84 提供的平面坐标系
st_contains(geomtry, geomtry) 判断包含关系
如果后面的图形在前面的图形内部,返回1,否则返回0
如
select id, name from table_name where st_contains(st_geomfromtext('POLYGON((107.354261 35.563713,107.354261 35.873718,107.914218 35.873718,107.914218 35.563713,107.354261 35.563713))', 4326),geom)
st_x(geometry)、st_y(geometry) 仅返回Geometry的x/y坐标
如select st_x(geom) from table_name
st_point(double,double) 构建一个点
如st_point(1,1)
其他函数
- 获取线/面对象四至 st_xmin(geom)、st_ymin(geom)、st_xmax(geom)、st_ymax(geom)
- 计算两点之间距离 st_distance(geom,geom) / st_distance(wkt,wkt)
- 计算线的长度 st_length(geom) / st_length(wkt)
- 计算面积 st_area(geom) / st_area(wkt)
- 缓冲区计算 st_buffer(geom,distance) / st_buffer(wkt,distance)