【问题标题】:Return points present in circle of particular radius from specified location从指定位置返回特定半径的圆中的点
【发布时间】:2014-12-15 15:01:59
【问题描述】:

我正在使用 PostgreSQL。我希望从地理编码的特定点返回带有圆圈的点。现在我有一个地理编码和圆半径。根据这些数据,我可以计算出圆圈内的点吗? 实际上我已经用 PostGIS 试过了,它工作正常,但 PostGIS 只处理空间数据,我有非空间数据。 在 PostGIS 我使用了以下查询:

select addressid,ST_AsText(geocode)geocode from aspatial_address as A where ST_Point_Inside_Circle(a.geocode,14.083333,19.583333,7)

我的表结构是:

create table maddress
{
 addressid bigint(30) primary key;
 addressline varchar2(40) not null;
 geocode varchar2(20) not null;
}

并且我希望返回距离地理编码 (14.083333,19.583333) 半径为 7 公里的圆中存在的点。

现在,提示我..我如何在 PostgreSQL 中做到这一点?这里可以吗?它们在 PostgreSQL 中是否使用了任何几何函数?请告诉我..

【问题讨论】:

  • PostGIS 不仅仅处理空间数据。它是 PostgreSQL 的扩展,因此您可以使用 PostGIS 函数进行空间谓词,并将该输出与您通常在 PostgreSQL 中执行的任何其他关系相关联。您能否展示表格结构并举例说明您希望在单个输出中看到的相关数据?
  • 嗨@Patrick..感谢您的回复..我已经用表结构和我的查询更新了我的问题..请看看让我知道

标签: postgresql radius


【解决方案1】:

PostgreSQL 有一些你可以使用的几何类型:

SELECT addressid, addressline, geocode
FROM maddress
WHERE geocode::point <@ circle '((14.083333,19.583333), 7)';

请注意,如果geocode 生成xy 带有非标准标点符号,则应使用字符串函数将geocode 解析为point 类型将接受的格式。

请记住,如果地理编码和 (14.083333,19.583333) 位于长纬度坐标中,则您不能使用 PostgreSQL 几何类型,因为单位不同(地理编码位置和圆心与平面距离的球形长纬度度数以公里为半径)。在这种情况下,您必须使用 PostGIS 将经纬度坐标转换为某个平面坐标参考系。

【讨论】:

  • 如何使用字符串函数解析地理编码?我正在动态输入(纬度、经度和半径)。在运行时,我当时正在传递值,它给出了错误。为什么会这样?
  • 编辑您的问题以准确显示地理编码值的样子,我将编辑我的答案。
  • 我已经发布了一个关于这个的问题。请你看看stackoverflow.com/questions/27480846/…
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多