【问题标题】:inside lat,lng bounds where query在 lat,lng 范围内查询
【发布时间】:2012-06-26 19:22:05
【问题描述】:

我通过 xhr 从客户端的谷歌地图获取 lat/lng 边界到我的 php 脚本。这是一个 sql 查询来搜索该范围内的位置。我的表将lat, lng 存储为不同的列。现在如何安排我的 where 查询,以便只返回指定的 NE, SW 范围内的点。

在数据库中它存储为number,我不知道是否已经有任何 postgresql 特定的聚合函数来做同样的事情。

【问题讨论】:

  • 查看 PostGIS 以向 PostgreSQL 添加地理支持。
  • 我从来没有用过这个。但是,如果这是我唯一的要求,我应该选择安装新扩展吗?

标签: php postgresql google-maps google-maps-api-3


【解决方案1】:

我错过了什么吗?这只是一个矩形边界检查。这不像你需要计算点之间的距离。

WHERE lat BETWEEN lat_of_corner_a AND lat_of_corner_b
  AND lon BETWEEN lon_of_corner_a AND lon_of_corner_b

【讨论】:

  • 这种方式能解决所有问题吗?像时间线?例如,一个点可能是消极的,另一个点可能是积极的
  • 哎呀,我希望 BETWEEN 操作员会自动处理这个问题,但看起来它不会,至少在版本 9 之前。所以,至少,你必须确保首先指定较低的值:BETWEEN -10 AND 10
【解决方案2】:

我在这里发布了可行的解决方案: Get all records from MySQL database that are within Google Maps .getBounds?

Alex 的解决方案仅适用于美国,特别是北半球西部地区(递减值符合 Google 提供 bouds 值的顺序。

这个适用于世界上另外 3/4 的人。

SELECT * FROM tilistings WHERE
(CASE WHEN a < c
        THEN lat BETWEEN a AND c
        ELSE lat BETWEEN c AND a
END) 
AND
(CASE WHEN b < d
        THEN lng BETWEEN b AND d
        ELSE lng BETWEEN d AND b
END)

(详情请查看链接帖子)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多