如何将空间索引的数据提取到我的 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)