Как хранить/запрашивать координаты для расчета расстояния между ними в метрах?

Я храню координаты в своей базе данных, как это

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

Однако возвращаемое расстояние использует обычный расчет Пифагара, что дает мне результат в градусах, а не в метрах или милях.

Я могу вручную рассчитать расстояние в метрах, используя формулу гаверсинуса, но передача ее в мое выражение приводит к ошибке linq:

Не удалось перевести выражение LINQ. Либо переписать запрос в виде, который можно перевести, либо перейти на ..

Как я могу хранить/запрашивать эти данные, чтобы я мог передать фильтр в ядро ​​ef и получить список результатов в пределах заданного расстояния?


person Bassie    schedule 24.02.2021    source источник


Ответы (1)