【发布时间】:2012-12-14 15:10:36
【问题描述】:
您好,我有一个结构如下的数据库:
表 1:
time(type timestamp) longitude(type string) latitude(type string)
2:00 -110.4365 38.7463
2:00 -110.2743 38.7983
2:00 -102.4434 36.9438
3:00 -112.3254 39.2222
etc etc etc
现在我有一些绘制值的代码,当它这样做时它会失去一些准确性。用户可以单击这些点并查询数据库以获取有关该点的更多信息。然而,由于绘图功能失去了一些准确性,我需要在查询中考虑这一点。
所以我想查询时间 = x 以及(纬度 = 最接近 y 的值和经度 = 最接近 z 的值)。您会看到最接近的值取决于纬度和经度,这就是我对如何进行感到困惑的地方。
假设我在寻找:
Time = 2:00
Longitude = -110.3421
Latitude = 38.7587
现在如果我查询:
Time = 2:00 and Longitude = closest to -110.3421
那么结果将是第 2 行。
但是如果我这样做了:
Time = 2:00 and Latitude = closest to 38.7587
那么结果将是第 1 行。
如果我查询:
Time = 2:00 and Longitude = closest to -110.3421 and Latitude = closest to 38.7587
那么结果将是第 1 行。这是我需要的查询类型...
我发现以下帖子对于查询一个字段中最接近的值很有用:
https://stackoverflow.com/a/6103352/1800665
谢谢, 詹姆斯
编辑:我有以下内容:
(SELECT * FROM (
(SELECT * FROM Table1 WHERE cast(latitude as double precision) >= '38.7587' AND healthtime = '2:00' AND cast(longitude as double precision) >= '-110.3421')
UNION ALL
(SELECT * FROM Table1 WHERE cast(latitude as double precision) < '38.7587' AND healthtime = '2:00' AND cast(longitude as double precision) < '-110.3421')
) as nearest ORDER BY ( abs('38.7587'-cast(latitude as double precision)) + abs('-110.3421'-cast(longitude as double precision))) LIMIT 1)
【问题讨论】:
-
听起来像你想要的postgis.refractions.net
-
谢谢,但理想情况下我不想安装额外的软件。此外,纬度和经度字段实际上是字符串类型,而不是地理数据类型。
-
另请注意,“(最接近X,最接近Y)”与“最接近(X,Y)”不同。
标签: postgresql