Привет. Есть две точки, на поверхности земли, заданные широтами и долготами. Нужно посчитать расстояние межну ними в километрах. Вот здесь я нашел формулу: http://mk.semico.ru/dr_info19.htm Но синусы, косинусы и арккосинусы - это слишком долго. Дело в том, что мне нужно делать вычисление расстояния в SQL-запросе в условии WHERE - выбрать точки, удаленные от данной не дальше чем N. Дело спасает то условие, что мне не нужна большая точность - ошибка до 50% меня устраивает. Например, вместо теоремы пифагора sqrt((x2 - x1)^2 + (y2 - y1)^2) можно использовать сумму модулей разности коорднат: abs(x2 - x1) + abs(y2 - y1) - ошибка в данном случае не превышает ~41% (sqrt(2) - 1). Как можно было бы упростить формулу по ссылке, если можно допускать ошибку до 50% ?
пусть центральная точка имеет координаты (а,b) Если я правильно понял, то нужно определить точки, которые попадают а круг Точки которые попадают в вписанный квадрат - попадают в круг. Площадь квадрата = 2*R^2 площадь круга - 2*Pi*R^2. Т.е. примерно 64 процента точек можно определить условием where (a< a+x) and (a> a-x) and (b < b+x) and (b > b-x) где х - угол между центром и точкой в центре любой из сторон вписанного квадрата. Этот угол можно вычислить до Sql запроса 1 раз.
Хотя я сильно гоню. Площади для выпуклых поверхностей будут не такие. Но, думаю, надо их расчитать. Если удасться доказать, что отношение площади описываемой кругом и вписанным в неё квадратом устроят вас, то способ рабочий
Точно что? _DEN_ А какое расстояние будет использоваться? А то если нужно определить объекты в радиусе 300 км то, думается, кривизной можно пренебречь, а вот если > 1000, то, наверное, уже нет.
asd Города внутри страны. Во всех случаях, кроме россии, видимо можно пренебречь. Насчет россии - с ходу не ясно
в принципе, расстояние можно достаточно точно и быстро получать в виде квадрата косинуса половины угла между точками k = cos2(alpha) = (dX2 + dY2)/R2 с увеличением угла до 90o cos будет уменьшаться расстояние l = Pi*R * (2*alpha / Pi) = (2*R) * alpha угол из косинуса вполне можно получать таблицей (R в первом случае константа и ей можно пренебречь или задаться любым числом, а вот квадратами не стоит). достаточно быстро и точность можно наперед задать. скажем, 1000 4х байтных коэфициентов займет 1кб и даст точность в 1км для 1000 км. ну а на 1 - 10 км помехи от ландшафта будут больше чем неточность от кривизны.
Тогда просто надо умножить на радиус Земли (6411 км.) и все... Код (Text): (abs(Fi2 - Fi1) + abs(Lm2 - Lm1))*6411 PS: разность углов, естественно, в радианах PPS: надо контролировать разность углов: если abs(Fi2 - Fi1) > Pi, вычесть Pi и т.д.