【问题标题】:Is there a way to represent location values in a query?有没有办法在查询中表示位置值?
【发布时间】:2016-12-15 21:48:09
【问题描述】:

对于 where 子句中的简单过滤器和比较之类的事情,有没有办法表示位置值?例如,类似:

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

文档提到其他地理数据可以表示为众所周知的文本 (WKT),您可以在简单的过滤器和比较等事情中使用它,但据我所知,似乎没有位置值的 WKT 表示。

这可能是为了让用户使用 within_circle 之类的东西,而不是直接比较值,我在文档页面上看到了位置是旧数据类型的注释,所以如果没有方式。

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

【问题讨论】:

    标签: socrata soda


    【解决方案1】:

    我的示例将使用 2.1 版端点,而不是您上面链接到的旧 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 中格式化纬度/经度,您需要将它们格式化为 POINT

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

    更新:StevenW 发现如果你的语法正确,你可以做一个精确的过滤器:

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

    请注意,这要求您具有与该点完全相同的纬度/经度,因此它没有太多的误差余地。

    【讨论】:

    • 糟糕,我没有意识到这是一个 2.0 端点。现在我环顾四周,我实际上找不到任何列数据类型为location 的 2.1 数据集。关于不能与点完全相等的问题,您也是正确的。我以为我已经成功地尝试过了,但我想我一定是用 multipolygon 之类的东西测试过并且记错了。无论如何,感谢您的快速和有用的回答!
    • 实际上,在测试一些查询时,我发现您实际上可以使用以下语法https://data.cityofchicago.org/resource/6zsd-86xi.json?location='POINT (-87.631046 41.694312)' 使用简单的过滤器进行精确相等。我不认为你能看到这一点,因为我还没有足够的声誉。
    • 好发现 StevenW,我也试过了,但我一定是做错了什么。
    猜你喜欢
    • 2019-11-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多