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:违反唯一约束条件,求大侠指点
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