GeoPHP Exception to convert mydql WKB 目前仅支持 NDR (little endian) SKB 格式

Posted

技术标签:

【中文标题】GeoPHP Exception to convert mydql WKB 目前仅支持 NDR (little endian) SKB 格式【英文标题】:GeoPHP Exception to convert mydql WKB Only NDR (little endian) SKB format is supported at the moment 【发布时间】:2017-07-13 09:33:03 【问题描述】:

我想读取 mysql POINT 列并将其转换为 WKT。如您所知,MySQL 中 GEOMETRY 的数据格式是 WKB,因此要使用 Geophp 进行转换,您应该:

$wkb_reader = new WKB();
$geometry = $wkb_reader->read($val,FALSE);
$wkt_writer = new WKT();
$wkt = $wkt_writer->write(oGeometry);

其中 $val 是一个 BLOB(字节数组)。

它面临错误(在读取数据时):

Exception: Only NDR (little endian) SKB format is supported at the moment

编辑:

Here 是同样的问题,但 $val 可能是一个点

【问题讨论】:

【参考方案1】:

如您所知,MySQl(和 MariDB)存储几何数据如下:

MySQL 使用 4 个字节来存储几何值,以指示 SRID,后跟该值的 WKB 表示。有关 WKB 格式的说明,请参阅众所周知的二进制 (WKB) 格式。

See MySQL documents 了解更多信息。

所以,前 4 个字节是 SRID,必须从数据中删除。您可以按如下方式转换任何地理数据(来自我的 MySQL):

$data = unpack("lsrid/H*wkb", $val);
$wkb_reader = new WKB();
$geometry = $wkb_reader->read($data['wkb'], TRUE);
$wkt_writer = new WKT();
$wkt = $wkt_writer->write($geometry);
return $wkt;

更多信息:https://***.com/a/45089036/635891

【讨论】:

以上是关于GeoPHP Exception to convert mydql WKB 目前仅支持 NDR (little endian) SKB 格式的主要内容,如果未能解决你的问题,请参考以下文章

org.hibernate.exception.ConstraintViolationException:违反唯一约束条件,求大侠指点

hibernate问题

ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array w

error: no matching function for call to 'std::exception:exception(const char[16])'

php错误:Uncaught exception com_exception with message Failed to create COM object

No DRP key due to exception:java.lang.ClassNotFoundException