如何将空间索引的数据提取到我的 PHP 应用程序中?

Posted

技术标签:

【中文标题】如何将空间索引的数据提取到我的 PHP 应用程序中?【英文标题】:How to extract data of a spatial index into my PHP app? 【发布时间】:2011-10-28 03:48:52 【问题描述】:

我的表中有一个 POINT 类型的空间索引,用于存储某个位置的地理坐标。

我已经能够使用这个成功地将一个 POINT 插入到我的表中:

$point = new Zend_Db_Expr("GeomFromText('POINT(-12.461334 130.841904)')");
$property->setLocation($point);

我正在使用 Zend,并且试图弄清楚如何将纬度和经度值提取回我的应用程序中。谁能帮我解决这个问题?

现在我正在使用以下代码返回我存储的 POINT 值。

$properties->getLocation();

是否有一些 php 函数可以让我返回 -12.461334 130.841904

【问题讨论】:

latlng为二进制数据格式,应使用SQL语句X(latlng)或Y(latlng)提取。 【参考方案1】:

我了解到,如果您将值保存为几何点,是因为您将尝试使用可用的Geometry Functions(例如“GLength”或“LineString”)来计算距离或边界,那么您将输出一个值一般是float,以这张表为例

event
id -> int -> 11 -> unsigned -> primary -> auto increment
name -> varchar -> 255
location -> point

使用此查询,您将获得提供的经纬度位置与表事件内的行值之间的距离

SELECT
    ev.id,
    ev.name,
    (
        GLength(
            LineString(
                (
                    PointFromWKB(
                        POINT(
                            32.660629,
                            -117.106354
                        )
                    )
                ),
                (
                    ev.location
                )
            )
        )
    ) * 100
    AS distance
FROM
event ev

结果你得到了

=====================================
= id = name     = distance          =
=====================================
= 1  = event x  = 16.956332397071797=
=====================================

要将其实现为 Zend 查询,您将执行与此类似的操作,(取决于您的实现以及您从哪里获得 $table 值)

$point = new stdClass();
$point->lat = 32.660629;
$point->lon = -117.106354;
$table = $this->getDbTable();
$resultSet = $table->fetchAll(
    $table->select()
        ->from(
            $table,
                array(
                    'id',
                    'name',
                    new Zend_Db_Expr("
                            (
                                GLength(
                                    LineString(
                                        (
                                            PointFromWKB(
                                                POINT(
                                                    $from->lat,
                                                    $from->lon
                                                )
                                            )
                                        ),
                                        (
                                            location
                                        )
                                    )
                                )
                            ) * 100
                            AS 'distance'
                    "
                    ),
                    'category',
                    'user'
                )
            )
        );

希望这会有所帮助。

【讨论】:

以上是关于如何将空间索引的数据提取到我的 PHP 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字典存储到我的解析仪表板中并从中提取数据(Swift 3)

将 SQL 表中的所有数据提取到我的 Python 代码中

MySql,如何将索引从我的开发数据库导出到我的生产数据库?

如何使用索引号将数据发送到mysqli(准备好的语句)

从弹性索引中提取数据,处理并返回

我如何通过 json 将数据从我的设备发送到我的 php 文件