PHP бағдарламасына кеңістіктік индексті қалай шығаруға болады?

Менің кестедегі кейбір нүктенің гео-координаттарын сақтайтын POINT түрінің кеңістік индексі бар.

Мен осы кестені пайдалана отырып, кестеге сәтті кірістірдім:

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

Мен Zend-ды пайдаланып жатырмын және мен кеңістіктік және бойлық мәндерін өзімнің қосымшаға қалай шығаруға болатынын анықтауға тырысамын. Маған кез келген адамның көмегі бар ма?

Енді POINT сақталған мәнін қайтару үшін келесі кодты пайдаланамын.

$properties->getLocation();

PHP функциясы бар ма, ол мені қайтарады -12.461334 130.841904

1
Линзалар екілік деректер пішімінде, сіз X (latlng) немесе Y (latlng) SQL операторымен шығарып алуыңыз керек.
қосылды автор Question Overflow, көзі

1 жауаптар

Мен құндылықтарды Геометрия ұпайлары ретінде сақтасаңыз, сіз қолдана алатын » Геометрия функциялары , қашықтықтар немесе шекараларды есептеу үшін '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 сұрауы ретінде іске асыру үшін, сізге ұқсас нәрсені жасай аласыз (сіздің енгізуіңізге байланысты және $ 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'
                )
            )
        );

Бұл көмектеседі деп үміттенемін.

0
қосылды