#.net-core #geojson #geojson.net
#.net-core #geojson #geojson.net
Вопрос:
я использую GeoJSON.Библиотека Net (https://github.com/GeoJSON-Net/GeoJSON.Net ) чтобы создать некоторые функции GeoJSON в моем коде. Точки, мультилинии и т.д. Все это работает нормально, пока мне не нужно рассчитать расстояние между некоторой парой объектов. Эта библиотека не имеет никакой возможности для этого.
Я пробовал использовать GeoJSON.Net.Contrib.MsSqlSpatial (https://www.nuget.org/packages/GeoJSON.Net.Contrib.MsSqlSpatial ), чтобы преобразовать объекты в SqlGeographies, а затем использовать метод для этого типа для вычисления расстояния. Это отлично работает с одним предостережением: это только для .NET Framework. Библиотека недоступна для .NET Core.
Пожалуйста, обратите внимание, что мне нужна возможность вычислять расстояние между двумя произвольными объектами — точками, мультилиниями, полигонами, а не только между двумя точками. Это должно быть сделано для SRID 4326 (WGS84).
Есть идеи?
С наилучшими пожеланиями, Дмитрий.
Ответ №1:
GeoJSON.Net — это просто библиотека для десериализации GeoJSON в соответствии с RFC 7946.
Для вычисления расстояний вы можете либо написать свою собственную реализацию, либо использовать одну из существующих библиотек, таких как Geolocation.
Для удобства вы можете написать несколько методов расширения.
public static class PositionExtension
{
public static double GetDistanceTo(this Position origin, Position destination,
DistanceUnit unit = DistanceUnit.Kilometers)
{
return GeoCalculator.GetDistance(
origin.Latitude, origin.Longitude,
destination.Latitude, destination.Longitude, distanceUnit: unit);
}
}
Комментарии:
1. Большое спасибо за предложение, но вы пропустили эту часть в моем вопросе: «Мне нужна возможность вычислять расстояние между двумя произвольными объектами — точками, мультилиниями, полигонами, а не только между двумя точками»
2. @DmytroGokun Вы можете разбить его на
IPosition
то, что содержит широту / длину и наследуется во всех классах, имеющих дело с координатами. Точки, мультилинии, полигоны либо наследуютсяIPosition
, либо содержат их коллекцию. Например, как вы определяете точку измерения из многоугольника, зависит от ваших потребностей. Вам нужно вычислить это или, может быть, просто выполнить итерацию и найти наименьшееIPosition
значение внутри коллекции.