Вычисление расстояния между двумя точками с помощью [закрытой] теоремы Пифагора

Я настоятельно рекомендую против хранящие двоичные данные в реляционной базе данных. Реляционные базы данных разработаны для работы с данными фиксированного размера; это - то, где их сила производительности: помните старая статья Joel о том, почему базы данных так быстры? потому что требуется точно 1 инкремент указателя для перемещения от записи до другой записи. Если Вы добавите данные BLOB неопределенного и весьма переменного размера, Вы завинтите производительность.

Вместо этого храните файлы в файловой системе и сохраните имена файлов в своей базе данных.

6
задан cakeforcerberus 1 January 2012 в 16:49
поделиться

3 ответа

Вы можете использовать простой треугольник Пифагора, если вы ожидаете, что задействованные расстояния будут небольшими по сравнению с размером Земли.

Предположим, вы находитесь в (lat0, long0) и хотите узнать расстояние до точки (lat1, long1) в «единицах широты».

Расстояние по горизонтали (EW) примерно равно

d_ew = (long1 - long0) * cos(lat0)

Это умножается на cos (lat0), чтобы учесть сближение линий долготы на высоких широтах.

Вертикальное (NS) расстояние проще

d_ns = (lat1 - lat0)

Таким образом, расстояние между двумя точками равно

d = sqrt(d_ew * d_ew + d_ns * d_ns)

. Этот метод можно уточнить для более сложных задач, но этого должно быть достаточно для сравнения расстояний.

На самом деле, для сравнения расстояний можно сравнить квадрат d, что означает, что вы можете опустить операцию sqrt.

15
ответ дан 8 December 2019 в 12:20
поделиться

Ну, поскольку ваши точки находятся рядом друг с другом, поверхность сферы почти плоская, поэтому просто найдите координаты точек в трехмерном пространстве, поэтому найдите (x, y, z) для каждой из точек, где

x = r*sin(lat)*cos(long)
y = r*sin(lat)*sin(long)
z = r*cos(lat)

где r - радиус сферы. или что-то в этом роде в зависимости от того, как вы определяете широту / долготу. Когда у вас есть две координаты xyz, просто используйте sqrt ((x1-x2) ^ 2 + (y1-y2) ^ 2 + (z1-z2) ^ 2) . Вы действительно не можете просто использовать двумерную теорему Пифагора, так как вам нужно будет получить разумные двумерные координаты, что сложно.

3
ответ дан 8 December 2019 в 12:20
поделиться

Обычно вы будете видеть это обозначение «dy, dx», которое означает разность y и разность x. Вы просто вычисляете различия по обеим осям и получаете квадратный корень из обеих разностей, возведенный в квадрат согласно теории (сумма ажиотажа равна квадрату двух других сторон).

var dx:Number = x1-x2;
var dy:Number = y1-y2;
var distance:Number = Math.sqrt(dx*dx + dy*dy);

Надеюсь, это достаточно ясно

1
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: