代码之家  ›  专栏  ›  技术社区  ›  Mostafa Barmshory

目前支持GeoPHP异常转换仅mydql WKB NDR(little endian)SKB格式

  •  0
  • Mostafa Barmshory  · 技术社区  · 7 年前

    $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 回复  |  直到 7 年前
        1
  •  1
  •   Mostafa Barmshory    7 年前

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

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

    See MySQL documents 了解更多信息。

    所以,前4个字节是SRID,必须从数据中删除。您可以按如下方式转换任何地理数据(来自my 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://stackoverflow.com/a/45089036/635891