Географические типы данных
В Pimcore доступны различные типы географических данных: Geopoint, Geobounds, Geopolygon и Geopolyline.
Поле выбора страны также относится к контексту гео-виджетов, но по сути является обычным виджетом выбора и потому перечислено вместе с другими виджетами select.
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 представляют собой географическую область, определяемую северо-восточной (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

позволяет определить географическую область путем задания произвольного количества гео-точек. В базе данных эти точки хранятся в одной колонке типа 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 позволяет определить географический маршрут (линию) путем задания произвольного количества гео-точек. В базе данных эти точки также хранятся в одной колонке типа 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();
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.