先看普通写法,没有任何问题
select ST_GeomFromText('POINT(1 2)'); -- POINT(1 2) 正常
select ST_IsEmpty(ST_GeomFromText('POINT(1 2)')); -- 0 正常
-- mysql 文档里面翻到的,找到的唯一一个能用 EMPTY 来写的
select ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')); -- 1 正常
再看 EMPTY 的写法,被摁倒地上摩擦
select ST_GeomFromText('POINT EMPTY'); -- 报错 Invalid GIS data provided to function st_geomfromtext.
-- 用 null 代替 GIS EMPTY ?
select ST_GeomFromText(null); -- 就是 null
select ST_IsEmpty(null); -- 返回的什么卵几把玩意?使用 null 完全不可用!
换成 POLYGON 也是如此。
没辙了,请问 mysql 里 geometry POINT 、POLYGON EMPTY 到底要如何表示?
翻了个遍文档,终于看到一小行字,定了结论:
MySQL supports geometry types of Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection. Other geometry types are not supported.
Only GeometryCollection can be empty. Such a value is stored with 0 elements.
意思就是支持的所有类型中,只有GeometryCollection允许为EMPTY,mysql官方文档也稀烂,相关类型的文档里面压根就不提如何设置EMPTY格式。。。
POINT EMPTY、POLYGON EMPTY 统一用GeometryCollection EMPTY,完事。但别扭,丢失了类型。
1
qW7bo2FbzbC0 2020-05-26 17:11:16 +08:00 via Android
用 mongo 不行吗?
|
2
Xusually 2020-05-26 18:37:55 +08:00 1
|
3
laball 2020-05-26 18:55:41 +08:00
ES 吧
|
4
sadfQED2 2020-05-26 19:55:18 +08:00 via Android
Es pg mongo 对地理数据支持都很好,然而你却选择了 mysql
|
5
xiangyuecn OP @Xusually #2 特意折腾了注册了个账号,回了一下这个帖子,哈哈。。。
他里面提到的用北极坐标当 EMPTY 使用,但这个并非 EMPTY,要自己逻辑里面特殊判断,就像 null 一样( null 是磨人的小妖精),需要额外的处理。 ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')) 正常是空的 ST_IsEmpty(ST_GeomFromText('POINT(0 90)')) 不正常,不是空的 |
6
xiangyuecn OP |