возвращает точку, расстояние которой превышает 90 км.
Обратите внимание, что аргументы, которые вы передаете: широта и долгота , чьи единицы измерения - градусы. В результате возвращаемое значение не является длиной в Метров . Как вы можете найти, расстояние между (35.1225, 32.600248)
и (35.115335,31.78562)
, возвращаемым методом Distance()
, равно 0.81465950900299355
. По сути, это равно:
Math.sqrt((35.1225 -35.115335)*(35.1225 -35.115335) + (32.600248 - 31.78562)*(32.600248 - 31.78562))
Если две точки достаточно близки , вы можете рассматривать его единицу как Степень дуги примерно:
Предположим, что Земля представляет собой совершенную сферу , а Окружность Земли равна 40,075.017 km
.
Согласнодо Как далеко одна градус :
мы можем примерно рассчитать расстояние следующим образом:
distance = Circumference * d /360
= 40,075.017 km * 0.81465950900299355 / 360
= 90.69km
Поскольку условие Where()
0.81465950900299355 < 75000
равно true
, вы получите точку на расстоянии более 90 км.
Обратите внимание, мы предполагаем, что две точки здесь достаточно близкиЧтобы рассчитать точное расстояние, нам нужно преобразовать (lon,lat)
Coordinate в проекционные системы координат, прежде чем мы вызовем метод Distance()
.
Цитируется из Пространственные данные -EF Core
Это означает, что если вы задаете координаты в терминах долготы и широты, некоторые значения, оцениваемые клиентом, такие как расстояние,Длина и площадь будут в градусах, а не в метрах. Для получения более значимых значений сначала необходимо спроецировать координаты в другую систему координат, используя библиотеку, подобную ProjNet4GeoAPI, прежде чем вычислять эти значения.