Как извлечь данные пространственного индекса в мое приложение PHP? - PullRequest
1 голос
/ 28 октября 2011

В моей таблице есть пространственный индекс типа POINT, в котором хранятся географические координаты некоторого местоположения.

Мне удалось успешно вставить ТОЧКУ в мою таблицу, используя это:

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

Я использую Zend и пытаюсь выяснить, как извлечь значения широты и долготы обратно в мое приложение. Может ли кто-нибудь предложить мне какую-либо помощь в этом?

Сейчас я использую следующий код, чтобы вернуть сохраненное значение ТОЧКИ.

$properties->getLocation();

Нет ли какой-нибудь PHP-функции, которая вернула бы меня? -12.461334 130.841904

1 Ответ

0 голосов
/ 30 ноября 2011

Я узнал, что если вы сохраняете значения в виде точек геометрии, это потому, что вы собираетесь попытаться использовать доступные Функции геометрии , такие как 'GLength' или 'LineString', для вычисления расстояний или границ,затем вы собираетесь вывести значение, чаще всего, с плавающей точкой, возьмите эту таблицу в качестве примера

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, вы должны сделать что-то похожее на это (в зависимости от вашей реализации и того, гдеВы получаете свое значение таблицы $)

$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'
                )
            )
        );

Надеюсь, это поможет.

...