如何计算 EF Core 和 PostgreSql 数据库中两点之间的距离

问题描述 投票:0回答:1

我正在尝试计算用户当前点与数据库中另一个点的距离。我编写了以下代码,但出现了

function st_x(geography) does not exist
错误。

var points = pointsQueryable.Paging(pager).Select(x => new PointViewModel
        {
            Id = x.Id,
            Title = x.Title,
            Address = x.Address,
            Description = x.Description,
            Longitude = x.Location.X,
            Latitude = x.Location.Y,
            Image = x.Image,
            DistanceFromUser = x.Location.Distance(new Point(filter.UserLongitude, filter.UserLatitude)),
            
        });

当然,我已经使用

CREATE EXTENSION postgis;
命令为数据库启用了 postgis。

.net-core entity-framework-core geography
1个回答
0
投票

我使用以下代码示例在类似项目上测试了给定的场景,它有效:

        var firstPoint = new Point(10, 20);
        var fooPoint = await _fooRepository.FirstOrDefaultAsync(p=>p.Geom.Distance(firstPoint) > 5);
        var distance = fooPoint.Geom.Distance(firstPoint);

但在我的例子中,实体的 Geom 字段被定义为“Geometry”。 您能否也提供您的实体类,以便问题更清楚。

如果在项目中使用 NetTopologySuit,以下配置可能会有所帮助。

        var builder = new DbContextOptionsBuilder<FooDbContext>()
            .UseNpgsql(configuration.GetConnectionString("Default"), 
                opts => { opts.UseNetTopologySuite(); });
© www.soinside.com 2019 - 2024. All rights reserved.