如何以store/query坐标计算米之间的距离?
How to store/query co-ordiantes for calculating the distance between in meters?
我像这样在我的数据库中存储坐标
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
但是,返回的距离仅使用正常的毕达哥拉斯计算,结果以度而不是米或英里为单位。
我可以使用 haversine 公式手动计算以米为单位的距离,但是将其传递给我的表达式会导致 linq 错误:
The LINQ expression could not be translated. Either rewrite the query in a form that can be translated, or switch to ..
如何 store/query 此数据,以便我可以将过滤器传递给 ef core 并返回给定距离内的结果列表?
您真的需要使用 EPSG:4326(Lat/lon 坐标对,而不是像 UTM 这样的投影坐标)吗?
如果您可以切换到 UTM 坐标,您将直接在数据库中使用米,而无需担心转换问题。
我像这样在我的数据库中存储坐标
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
但是,返回的距离仅使用正常的毕达哥拉斯计算,结果以度而不是米或英里为单位。
我可以使用 haversine 公式手动计算以米为单位的距离,但是将其传递给我的表达式会导致 linq 错误:
The LINQ expression could not be translated. Either rewrite the query in a form that can be translated, or switch to ..
如何 store/query 此数据,以便我可以将过滤器传递给 ef core 并返回给定距离内的结果列表?
您真的需要使用 EPSG:4326(Lat/lon 坐标对,而不是像 UTM 这样的投影坐标)吗?
如果您可以切换到 UTM 坐标,您将直接在数据库中使用米,而无需担心转换问题。