Перейти к основному содержимому

Географические типы данных

В Pimcore доступны различные типы географических данных: Geopoint, Geobounds, Geopolygon и Geopolyline. Поле выбора страны также относится к контексту гео-виджетов, но по сути является обычным виджетом выбора и потому перечислено вместе с другими виджетами select.

Geopoint

поле GeoPoint

Geopoint состоит из двух координат: широты (latitude) и долготы (longitude). В интерфейсе Pimcore доступен то же виджет выбора точки на карте, что и показанный выше. Это позволяет легко найти координаты географической точки. В базе данных значения хранятся в двух колонках с именами latitude и longitude. Программно данные для этого поля представлены классом Pimcore\Model\DataObject\Data\Geopoint. Чтобы задать geopoint программно, необходимо создать объект Pimcore\Model\DataObject\Data\GeoCoordinates, например:

$longitude = 107.6191228;  
$latitude = -6.9174639;
$point = new \Pimcore\Model\DataObject\Data\GeoCoordinates($latitude, $longitude);
$object->setPoint($point);
$object->save();

Geobounds

поле GeoBounds

Geobounds представляют собой географическую область, определяемую северо-восточной (north east) и юго-западной (south west) точками. В интерфейсе Pimcore доступен виджет ввода, показанный выше. В базе данных для хранения координат геограниц используются 4 колонки. Программно обе точки представлены объектами Pimcore\Model\DataObject\Data\GeoCoordinates и обёрнуты в объект Pimcore\Model\DataObject\Data\GeoCoordinates. В следующем фрагменте кода показано, как установить географические границы:

use Pimcore\Model\DataObject\Data\Geobounds;  
use Pimcore\Model\DataObject\Data\GeoCoordinates;

$northEast = new GeoCoordinates(150.96588134765625, -33.704920213014425);
$southWest = new GeoCoordinates(150.60333251953125, -33.893217379440884);
$object->setBounds(new Geobounds($northEast,$southWest));
$object->save();

Geopolygon

поле GeoPolygon

позволяет определить географическую область путем задания произвольного количества гео-точек. В базе данных эти точки хранятся в одной колонке типа LONGTEXT в виде сериализованного массива объектов Pimcore\Model\DataObject\Data\GeoCoordinates. Чтобы задать данные геополигона программно, нужно передать в сеттер массив объектов GeoCoordinates:

use Pimcore\Model\DataObject\Data\GeoCoordinates;  

$data = [
new GeoCoordinates(-33.464671118242684, 150.54428100585938),
new GeoCoordinates(-33.913733814316245, 150.73654174804688),
new GeoCoordinates(-33.9946115848146, 151.2542724609375)
];
$object->setPolygon($data);
$object->save();

Geopolyline

поле GeoPolyline

Geopolyline позволяет определить географический маршрут (линию) путем задания произвольного количества гео-точек. В базе данных эти точки также хранятся в одной колонке типа LONGTEXT в виде сериализованного массива объектов Pimcore\Model\DataObject\Data\GeoCoordinates. Чтобы задать данные геополинии программно, нужно передать в сеттер массив объектов GeoCoordinates:

use Pimcore\Model\DataObject\Data\GeoCoordinates;  

$data = [
new GeoCoordinates(-33.464671118242684, 150.54428100585938),
new GeoCoordinates(-33.913733814316245, 150.73654174804688),
new GeoCoordinates(-33.9946115848146, 151.2542724609375)
];
$object->setPolyline($data);
$object->save();


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.