EF Core Spatial Data: запрашивать и получать расстояния в метрах - PullRequest
0 голосов
/ 27 апреля 2020

Я могу запросить и получить ближайшие местоположения к клиенту со степенями:

serviceQuery = serviceQuery.Where(s => s.Location.Distance(currentLocation) < <degree>)
    .OrderBy(s => s.Location.Distance(currentLocation));

Расположение NetTopologySuite.Geometries.Point введите C# и geography на SQL Сервер.

Как я могу предоставить метр вместо градуса в запросе, а также получить расстояние от метра вместо градуса? Преобразование степени результата в метр на стороне клиента приемлемо.

1 Ответ

0 голосов
/ 27 апреля 2020

Насколько я понимаю, важно, какой SRID (система пространственной привязки) используется при вставке геокоординат. Эта документация несколько полезна: https://docs.microsoft.com/en-us/ef/core/modeling/spatial

Я использую этот код для SRID 4326:

public static Point CreatePoint(double latitude, double longitude)
{
    // 4326 is most common coordinate system used by GPS/Maps
    var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);

    // see https://docs.microsoft.com/en-us/ef/core/modeling/spatial
    // Longitude and Latitude
    var newLocation = geometryFactory.CreatePoint(new Coordinate(longitude, latitude));

    return newLocation;
}

Предполагая, что вы также создаете currentLocation в SRID 4326 :

var currentLocation = CreatePoint(...

Тогда

var meters = 500;
serviceQuery = serviceQuery
    .Where(s => s.Location.Distance(currentLocation) < meters )
    .OrderBy(s => s.Location.Distance(currentLocation));

должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...