将MYSQL Polygon转换为PHP中的文本

时间:2017-04-24 06:46:03

标签: php mysql

Convert MySQL's POINT to text in PHP

我发现了这个问题&回答它解决了我的问题。 但我还没有找到多边形的解决方案。

有人有解决方案将blob / polygon转换为类似于点示例的文本吗?

2 个答案:

答案 0 :(得分:1)

如果你使用ST_NumGeometries(来自https://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html#function_st-numgeometries)它应该给你点数,然后你可以使用循环和ST_GeometryN来获取每个单独的点。这仍然需要像现有的那样进行解码。

您可以将多边形转换回文本(AsText),然后在那里解析数据。

答案 1 :(得分:0)

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

  

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

See MySQL documents了解更多信息。

通过使用GeoPHP,您可以转换任何Geo数据(来自我的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;

其中$ val是MySQL表中的列值。

第一行将数据解压缩为两部分:

1- SRID:前4个字节 2- WKB:其他为hex strig

并使用GeoPHP将WKB十六进制字符串转换为WKT。