0

我像这样在我的数据库中存储坐标

var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);

var point = geometryFactory.CreatePoint(new NetTopologySuite.Geometries.Coordinate(
    command.GeoCoordinate!.Longitude,
    command.GeoCoordinate!.Latitude));

然后我需要在数据库中查询某个坐标一定距离内的任何点,所以我传入这样的表达式

x => x.Location.Distance(inputPoint) < distance

然而,返回的距离只是使用正常的毕达哥拉斯计算,给我一个度数而不是米或英里的结果。

我可以使用 hasrsine 公式手动计算以米为单位的距离,但是将其传递给我的表达式会导致 linq 错误:

无法翻译 LINQ 表达式。要么以可翻译的形式重写查询,要么切换到 ..

如何存储/查询这些数据,以便我可以将过滤器传递给 ef core 并取回给定距离内的结果列表?

4

1 回答 1

1

你真的需要使用 EPSG:4326 (纬度/经度坐标对,而不是像UTM这样的投影坐标)吗?

如果您可以切换到 UTM 坐标,您将直接在数据库中拥有仪表,而无需担心转换。

于 2021-02-25T09:05:14.600 回答