Рассчитайте расстояние Земли между полигонами географии в .NET [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Рассчитайте расстояние Земли между полигонами географии в .NET [закрыто]

Сообщение Anonymous »

Мне нужно рассчитать расстояние на земле в метрах между полигонами географии, и я не могу найти ничего в экосистеме .NET, поэтому был вынужден позвонить по Postgres/Postgis DB. Пробовал nettopologysuite, projnet4geoapi, turf.sharp, ничего не сработало. В настоящее время я использую это: < /p>

Код: Выделить всё

public class PostgresGeographyDistanceCalculator(NpgsqlConnection connection)
{
public double CalculateDistanceInMeters(Geometry geographyOne, Geometry geographyTwo)
{
using var command = connection.CreateCommand();
command.CommandText = "SELECT ST_DistanceSphere(:geographyOne, :geographyTwo)";
command.Parameters.AddWithValue("geographyOne", geographyOne);
command.Parameters.AddWithValue("geographyTwo", geographyTwo);

return (command.ExecuteScalar() as double?)!.Value;
}
}
< /code>
Это мои тесты: < /p>
[TestCase(
"POLYGON ((14.2501 50.05023935110348, 14.250208509305542 50.050220681545085, 14.250287943430545 50.05016967540001, 14.250317018065362 50.05009999979769, 14.250287942884821 50.05003032429653, 14.25020850875982 50.04997931835377, 14.2501 50.04996064889653, 14.24999149124018 50.04997931835377, 14.249912057115178 50.05003032429653, 14.24988298193464 50.05009999979769, 14.249912056569457 50.05016967540001, 14.249991490694457 50.050220681545085, 14.2501 50.05023935110348))",
"LINESTRING (14.4285094 50.0882756, 14.4282467 50.08762, 14.4152461 50.0851708, 14.4095242 50.0867578, 14.39508 50.08354, 14.3926231 50.0838461)",
10857.27,
TestName = "1 Polygon and linestring")]
[TestCase(
"POLYGON ((14.402678899999998 50.08715464110803, 14.403232372395449 50.087059485526765, 14.403637537109827 50.086799516607236, 14.403785830585274 50.08644439473768, 14.403637522904482 50.08608927549927, 14.403232358190106 50.08582931184206, 14.402678899999998 50.08573415889195, 14.40212544180989 50.08582931184206, 14.401720277095514 50.08608927549927, 14.401571969414723 50.08644439473768, 14.401720262890171 50.086799516607236, 14.402125427604547 50.087059485526765, 14.402678899999998 50.08715464110803))",
"LINESTRING (14.4285094 50.0882756, 14.4282467 50.08762, 14.4152461 50.0851708, 14.4095242 50.0867578, 14.39508 50.08354, 14.3926231 50.0838461)",
49.7,
TestName = "2 Polygon and linestring")]
public void distance_is_correct(
string geographyOneWkt,
string geographyTwoWkt,
double expectedDistanceInMeters
)
{
var wktReader = new WKTReader(NtsGeometryServices.Instance);
var geographyOne = wktReader.Read(geographyOneWkt);
var geographyTwo = wktReader.Read(geographyTwoWkt);
var distanceCalculator = new PostgresGeographyDistanceCalculator(_connection);

var distanceInMeters = distanceCalculator.CalculateDistanceInMeters(geographyOne, geographyTwo);

distanceInMeters.ShouldBe(expectedDistanceInMeters, tolerance: expectedDistanceInMeters / 100);
}
исходный код минимального воспроизводимого примера: https://github.com/xhafan/geographiesdistance
Я хотел бы иметь чистое C# решение и не использовать DB для расчета расстояния.

Подробнее здесь: https://stackoverflow.com/questions/795 ... ons-in-net
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»