如何从 Symfony2 和 Doctrine2 中的一个点保存和检索纬度和经度

Posted

技术标签:

【中文标题】如何从 Symfony2 和 Doctrine2 中的一个点保存和检索纬度和经度【英文标题】:How to save and retrieve latitude and longitude from a point in Symfony2 and Doctrine2 【发布时间】:2014-06-10 15:07:49 【问题描述】:

我有一个 Symfony2/Doctrine 应用程序,它需要存储和检索纬度/经度值。

我找到了很多处理地理定位的捆绑包,但似乎大多数人的需求与我的不同,我似乎无法解决这个简单的问题......

我现在需要做的就是将实体的经纬度属性保存到点列中,当实体被加载时,从该点加载纬度和经度。

我已关注http://codeutopia.net/blog/2011/02/19/using-spatial-data-in-doctrine-2/,并且我的实体上有一个“位置”属性,该属性映射到点列。这很棒。但我不太明白如何从 lat/long 设置该点,或者如何从该点检索 lat/long,而无需在我需要加载/保存实体的任何时候执行自定义 DQL。

在非 symfony/doctrine 应用程序中,我会执行以下操作:"SELECT *, X(location) as latitude, Y(location) as longitude FROM... 来加载纬度和经度,但是使用 SF2 和教义,我似乎无法弄清楚我需要做什么。

谁能指出我正确的方向?

【问题讨论】:

codeutopia.net/blog/2011/02/19/using-spatial-data-in-doctrine-2 是一个损坏的链接。 这篇文章将有助于验证传入数据的第一个方面:technoburgh.com/php/latitude-longitude-validation-symfony-3 【参考方案1】:

考虑到您的实体有一个您链接的“点”类型的字段,操作您的坐标就像这三个示例中一样简单:

/* Returns the latitude of your existing entity */
$entity->getPoint()->getLatitude();

/* Creates a new point of coordinates (42,42) and sets it as your entity's coordinates */
$point = new Point(42, 42);
$entity->setPoint($point);

/* Adds 1 to your existing entity's latitude */
$tmp = $entity->getPoint();
$tmp->setLatitude($tmp->getLatitude() + 1);
$entity->setPoint($tmp); 

【讨论】:

谢谢!超级简单,我知道我只是在这里缺少一些基本的东西

以上是关于如何从 Symfony2 和 Doctrine2 中的一个点保存和检索纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 项目中的 Doctrine2 映射问题

在 Doctrine2/Symfony2 中的重复条目上插入忽略

带有 Symfony2 的 Doctrine2 无法识别数据库字符集和排序规则

Symfony2 和 Doctrine2 :用两个实体填充表单(一个复杂的场景)

使用 YAML 的 Doctrine2 和 Symfony2 的默认列值?

Doctrine2 自定义类型不像主键 Symfony2 那样工作