先看普通写法,没有任何问题
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 ![]() |
![]() | 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 |