postgres的空间扩展中geom奇怪的相等问题

postgres有非常好的支持空间数据的扩展。其geom空间列支持点,线等。
其中要注意点,线的相等规则。

点相等
我们用ASTEXT(geom)将二进制转换为经纬度,以下是示例
SELECT ASTEXT('0101000020E61000002C1BDB16879F5D404210501395AA3F40');
SELECT ASTEXT('0101000020E6100000DB9EC208879F5D404210501395AA3F40');

"POINT(118.492620195361 31.6663372106998)"
"POINT(118.492616834697 31.6663372106998)"

尽管ASTEXT以后这两个点好像不同,但是他们的经纬度差在小数点后6位上,postgres认为它们相等。这点用以下语句可以证明:
SELECT (GeomFromText((SELECT ASTEXT('0101000020E61000002C1BDB16879F5D404210501395AA3F40')), 4326)) = (GEOMFROMTEXT((SELECT ASTEXT('0101000020E6100000DB9EC208879F5D404210501395AA3F40')), 4326))
返回true。

线相等
线相等更不能用ASTEXT后相等来证明,因为最简单的线有两点,两点的没有先后。

你可能感兴趣的:(postgres)