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

问题描述 投票:3回答:2

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

我的位置表如下所示:

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

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

我希望是接收Range内所有记录的输出。

c# postgresql linq geospatial postgis
2个回答
1
投票

欢迎您加入。

PostGIS依赖于嵌入在geometrygeography类型的字段中的坐标。就是说,您的表结构不应将坐标存储到两个不同的double precision字段中,而应存储在一个字段中。

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

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

并且要从longitudelatitude列中创建几何,您可以执行以下操作:

UPDATE TABLE your_table
SET geom = ST_MakePoint(Longitude, Latitude);

之后,您可能想要创建一个索引,例如..

CREATE INDEX my_index ON my_table USING GIST (geom);

..并使用ST_DWithin进行查询

ST_DWithin

请注意,SELECT * FROM your_table WHERE ST_DWithin(geom, ST_MakePoint(input_lon, input_lat),input_distance) geometry具有不同的度量单位。有关更多详细信息,请参见此geographyanswer

如果无法更改表结构,则必须坚持使用@Michael Entin发布的解决方案,但请记住,创建answerdocumentation值会产生不必要的开销在查询时,您还可以not对其进行索引,这可能会使查询变慢!

祝你好运。>>

进一步阅读:

  • documentation
  • geometry

1
投票

对于PostGIS来说很简单,例如

© www.soinside.com 2019 - 2024. All rights reserved.