MySql常用地图函数
-- varchar->转 gemotry
SELECT st_geomfromgeojson('{"type":"Point","coordinates":[113.5525,34.732222]}')
-- gemotry->转 字符串
SELECT st_asgeojson(geom) FROM iwc_rsr_bsin
-- 查看表字段所用地图坐标系
select st_srid(geom) from settlements
-- 调换横纵坐标位置
select CONCAT('point(',st_y(geom),' ',st_x(geom),')') from settlements
-- 更新坐标系为4326
update settlements set geom=st_geomfromtext(CONCAT('point(',st_y(geom),' ',st_x(geom),')'), 4326)
-- 经纬度转geom
update settlements set geom = ST_GeomFromText(CONCAT( 'POINT(', lgtd, ' ', lttd, ')' ));
-- varchar-->geom存到另外一个字段
update quxian as qx set qx.geom = st_geomfromgeojson(qx.wkb_geometry)
-- 判断dam的geom是否在quxian的geom区域内
SELECT dam."id", dam.slnm,qx."区县",qx. from iwc_dam_bsin dam, quxian qx WHERE st_within(dam.geom, qx.wkb_geometry)
--根据安置点坐标在区域范围内来设置安置点所在的region
UPDATEjn_emergency.settlementsas se,jn_emergency.quxianas qx SET se.region= qx.region_codeWHERE st_within(se.geom, qx.geom)
st_within(se.geom, qx.geom) se是否在qx区域内
业务场景
mysql数据库中的点位没有行政区划编码(settlements)
pg库中有行政区划边界表(quxian)
1.先将pg库中的数据拷到mysql库中
涉及到格式问题所以将geom类型的数据先转换为json形式
select objectid,ogc_fid,区县,st_asgeojson(wkb_geometry) from quxian
可以得到varchar类型的边界数值
2.mysql创建quxian表 将上一步执行数据全部导入
上一步导入的wkb_geometry数据是varchar类型的 需要创建一个geom类型的字段就叫geom
将varchar ->geom
SELECT st_asgeojson(geom) FROM iwc_rsr_bsin
3.将安置点的经纬度转换为geom
update settlements set geom = ST_GeomFromText(CONCAT( 'POINT(', lgtd, ' ', lttd, ')' ));
4.统一坐标系
(一)查看坐标系
select st_srid(geom) from settlements
(二)修改坐标系
-- 查看表字段所用地图坐标系
select st_srid(geom) from settlements
-- 调换横纵坐标位置
select CONCAT('point(',st_y(geom),' ',st_x(geom),')') from settlements
-- 更新坐标系为4326
update settlements set geom=st_geomfromtext(CONCAT('point(',st_y(geom),' ',st_x(geom),')'), 4326)
–检索表的坐标系
select st_srid(geometry) from “T_S_DOORPLATE”;
–更新坐标系为4326
select UpdateGeometrySRID(‘T_S_DOORPLATE’, ‘geometry’, 4326);
5.根据安置点坐标在区域范围内来设置安置点所在的region
UPDATEjn_emergency.settlementsas se,jn_emergency.quxianas qx SET se.region= qx.region_codeWHERE st_within(se.geom, qx.geom)
PG库中判断 a(例如一个线段iwc_dam_bsin)区域是否和b区域相交(其中A可以是点 也可以是线段 可以是任意几何 B)pgsql中统一了两个区域的坐标系 之后进行对照:
' SELECT
a.id,
a.nm,
st_asgeojson (a.geom) AS geom,
b.id,
b.name,
b.region_code
FROM
(SELECT id,slnm,st_geomfromtext ( st_astext ( geom ), 4490 ) AS geom FROM a) AS a
LEFT JOIN b ON st_intersects ( a.geom, b.geom)