簡體   English   中英

地理空間搜索 - 實體框架核心 / PostgreSQL

[英]Geospacial search - Entity Framework Core / PostgreSQL

我有一個存儲一些事件位置的表和一個使用 ef 核心映射到它的 class:

public class Location
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        
        [Column(TypeName = "geography (point)")]
        public Point Location { get; set; }

        public string? Address { get; set; }

        public string? City { get; set; }

        public string? Region { get; set; }

        public string? Country { get; set; }

        public Post Post { get; set; }

        public int PostId { get; set; }
    }

問題
位置 class 與 Post 具有 1 - 1 的關系。 現在,給定緯度和經度以及半徑X km的輸入,我希望能夠從該半徑內的數據庫中獲取所有帖子。 即我想執行地理空間查詢。

我找到了一個解決方案,但它涉及執行一些普通的 SQL 查詢,我不惜一切代價避免這些查詢。 我將如何使用 LINQ 執行它?

解決方案來自Postgis 它增加了對地理對象的支持,允許在 SQL 中運行位置查詢。 它必須安裝在數據庫端。 對於服務器端,必須安裝以下

可以執行地理空間查詢的相關方法稱為“.IsWithinDistance”。 緯度,經度必須作為一個點傳遞,半徑。 這將返回指定范圍內的所有記錄。

例子:

posts = await Context.Posts
        .Include(p => p.Location)                
        .Where(p => p.Location.Location.IsWithinDistance(location, radius * 1000) 
        .AsNoTracking().ToListAsync();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM