有没有办法在查询中表示位置值?

Is there a way to represent location values in a query?

对于 where 子句中的简单过滤和比较之类的东西,有没有什么方法可以表示位置值?例如,类似于:

https://data.seattle.gov/rescource/82su-5fxf.json?location='LOCATION (Seattle, 47.612237, -122.290868)'

文档中提到其他地理数据可以表示为 Well-Known Text (WKT),您可以将其用于简单的过滤和比较等操作,但据我所知,似乎没有是位置值的 WKT 表示。

它可能是为了让用户使用 within_circle 之类的东西,而不是直接比较值,我在文档页面上看到了 location 是遗留数据类型的注释,所以如果有不是办法。

我个人会在应用程序中使用类似 within_circle 的东西,但我正在编写一个 haskell SODA 绑定库,所以我只想让它可用(尽管不鼓励)如果有可能的。我不希望绑定阻止进行有效调用。

我的示例将使用 2.1 版端点,而不是您 link 以上的旧 2.0 版,因此请确保您使用的是此版本:https://dev.socrata.com/foundry/data.seattle.gov/3c4b-gdxv

您实际上不能在 Point 列的简单过滤器中完全相等。我推荐的最接近的近似值是使用 within_circle 和一个非常小的圆圈,像这样:

GET https://data.seattle.gov/resource/3c4b-gdxv.json?$where=within_circle(location,%2047.514821,%20-122.258635,%2010)

如果您正在寻找如何在 WKT 中格式化 lat/longs,您需要将它们格式化为 POINT

我没有意识到,但我们的 Point datatype 并没有实际记录,所以我会把它添加到我的队列中!

更新:StevenW 发现如果语法正确,您可以进行精确过滤:

GET https://data.cityofchicago.org/resource/6zsd-86xi.json?locat‌​ion='POINT (-87.631046 41.694312)'

请注意,这要求您具有与点完全相同的 lat/lon,因此不会有太多误差。