gpt4 book ai didi

sql - Postgres - 使用 PostGis 在 LINQ 或 SQL 中进行地理空间搜索

转载 作者:行者123 更新时间:2023-12-03 16:21:16 26 4
gpt4 key购买 nike

我正在使用 PostGis 搜索给定范围内相对于给定原点的所有点。我正在查看 PostGis 提供的所有文档,但似乎无法弄清楚我将如何为此提出解决方案?

我的位置表如下所示:

Id         - INT(11)  
Longitude - DOUBLE
Latitude - DOUBLE
Address - LONGTEXT
City - LONGTEXT
Region - LONGTEXT
Country - LONGTEXT

输入将是 Longitude , Latitude和一个 Range (以公里或英里为单位)。

我希望收到 Range 中所有记录的输出。 .

最佳答案

欢迎来到 SO。

PostGIS 依赖于嵌入在 geometry 类型的字段中的坐标。或 geography .话虽如此,您的表结构不应该将坐标存储到两个不同的 double precision 中。领域,但在一个单一的。

如果您仍然可以更改表结构,只需在表中添加一个新的几何列:

SELECT AddGeometryColumn ('your_schema','your_table','geom',4326,'POINT',2);

并从您的 longitude 中创建几何图形和 latitude列你可以做这样的事情:
UPDATE TABLE your_table
SET geom = ST_MakePoint(Longitude, Latitude);

之后你可能想要创建一个索引,例如..
CREATE INDEX my_index ON my_table USING GIST (geom);

.. 并使用 ST_DWithin 查询它
SELECT * FROM your_table
WHERE ST_DWithin(geom,
ST_MakePoint(input_lon, input_lat),input_distance)

请记住, geometrygeography有不同的计量单位。看到这个 answer documentation 更多细节。

如果您无法更改表结构,则必须坚持@Michael Entin 发布的解决方案,但请记住,创建 geometry 会产生不必要的开销。或 geography查询时间的值,你也会 不是 能够索引它们,可能会使查询速度变慢!

祝你好运。

进一步阅读:
  • ST_MakePioint
  • AddGeometryColumn
  • 关于sql - Postgres - 使用 PostGis 在 LINQ 或 SQL 中进行地理空间搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61978355/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com