Имя: Пароль:
1C
1С v8
определение координат в запросе
,
0 Kabz
 
10.03.13
16:09
Сведущая проблема берем например Москву есть координаты точки например    55.7998 37.53412 есть координаты машин  , как в запросе отобрать все машины на расстояние меньше 5 км от этой координаты точки ..  Без запроса то можно по формуле .
1 Kabz
 
10.03.13
16:11
РадиусЗ*ATAN(Sqrt(Pow(COS(Пи*Ширина2/180)*SIN(ABS(Пи*Долгота2/180-Пи*Долгота1/180)),2)+Pow(COS(Пи*Ширина1/180)*SIN(Пи*Ширина2/180)-SIN(Пи*Ширина1/180)*COS(Пи*Ширина2/180)*COS(ABS(Пи*Долгота2/180-Пи*Долгота1/180)),2))/(SIN(Пи*Ширина1/180)*SIN(Пи*Ширина2/180)+COS(Пи*Ширина1/180)*COS(Пи*Ширина2/180)*COS(ABS(Пи*Долгота2/180-Пи*Долгота1/180))))    но в запросе нет функций синуса косинуса .., а переберать каждую очень долго , Кто знает примерную функцию без тригонометрии. ??
2 Эмбеддер
 
10.03.13
16:14
проще всего зная координаты точки прибавить 5 километров влево-вверх и 5 вправо-вниз, получим координаты углов. выбрать все точки в квадрате запросом, а потом в цикле в программе выбрать
3 Lama12
 
10.03.13
16:16
Можно в ряд разложить...
Муторно....
4 GANR
 
10.03.13
16:19
(0) А как насчет СКД? Там можно функции из общих модулей использовать в выражениях, а в функциях считать Sin(x) Cos(x).
5 GANR
 
10.03.13
16:21
6 GANR
 
10.03.13
16:31
Проще формулу в коде вычислить - в запросе 1С это будет алгоритмически непросто и непроизвордительно, если только прямой SQL запрос http://technet.microsoft.com/ru-ru/library/ms177516(v=sql.100).aspx.
7 Kabz
 
10.03.13
16:37
(2) думаю так и сделать сначала отберу  потом посчитаю точно .
8 Kabz
 
10.03.13
16:39
и почему Transact-SQL = есть Математические функции  а в 1с  трудно добавить ..
9 Classic
 
10.03.13
16:43
Может я конечно туплю, но разве расстояние не равно корню из суммы квадратов дельт?
На корень можно наплевать и сравнивать сразу с квадратом пяти.

А сумму квадратов дельт вполне можно посчитать и в запросе
10 GANR
 
10.03.13
16:46
(8) Как сказать... Перегружать платформу редко нужными функциями - тоже нехорошо. (9) Это в плоскостной системе координат.
11 Classic
 
10.03.13
16:47
(10)
5 км - это считай плоскость
12 GANR
 
10.03.13
17:04
(11) к о о р д и н а т ы  обеих точек заданы в виде широты и долготы, отсюда формула (1)
13 rphosts
 
10.03.13
17:17
(9) земля не плоская!
14 GANR
 
10.03.13
17:18
(2) даст условие попадания в квадрат, а не в радиус 5 км
15 rphosts
 
10.03.13
17:22
(0)Если вот прям внутри запроса - загружаешь во временные таблицы свои синусы-косинусы и т.п. с мелким шагом а потом в запросе брать значение от наиболее близкой точки (что-то типа срезов).

вот тоько нафига такой геморой?
16 rphosts
 
10.03.13
17:23
+(15) "значение от наиболее близкой точки" - это про углы
17 vs1c
 
10.03.13
17:25
А ведь (13) прав, копать в сторону "WGS84","проекция Меркатора", а там может задача умрет сама или еще что поменяется :)
18 GANR
 
10.03.13
17:32
Имхо, быстрее всего будет работать (8). Запрос Transact-SQL посредством ADO.
19 Kabz
 
10.03.13
17:36
(14) да даст но потом  уже не будет 200 машин и можно будет отобрать  по формуле.
20 GANR
 
10.03.13
17:39
(19) А нельзя ли преобразовать широту и долготу к плоскостным координатам, взяв за начало координат определенную точку? А потом (9).
21 GANR
 
10.03.13
17:40
На пятачке в 100 км фактор (13) уже несущественен.
22 vs1c
 
10.03.13
17:46
(19) таксисты мучают?
23 GANR
 
10.03.13
17:48
А нельзя ли от таксистов получить координаты (20)?
24 Kabz
 
10.03.13
17:49
ага
25 vs1c
 
10.03.13
17:50
(23) Да есть они у автора.
(21) Если на это забить, так и Пифагор катит, но боюсь если посчитать вы расстроитесь. Хотя для прикидки видимо сойдет.
26 Kabz
 
10.03.13
17:52
(25) а в запросе корень есть ?
27 vs1c
 
10.03.13
17:53
(26) А нужно ли городить огород с запросом?
28 Classic
 
10.03.13
17:54
(26)
Тебе какая точность нужна?
29 GANR
 
10.03.13
17:54
(26) Зачем корень? Наложить условие на КВАДРАТ нужного расстояние - и все.
30 Classic
 
10.03.13
18:09
(25)
Как-то влом считать несоответствие. Реально на 5 километрах погрешность пифагоровой формулы составит больше погрешности ЖПС?
31 Kabz
 
10.03.13
18:13
(27) скорость отработки нужна   найти  из 10- до 40  заказов которые надо распределять    и 200 водителей с условиями  по водителям  ближайших , предложить им заказ и если отказались предложить другому .   я  думаю без запроса все ляжет ..
32 Classic
 
10.03.13
18:15
(31)
Сядь и перепиши формулу из (1) в что-то близкое на плоскости.
ИМХО Пифагор с коррекцией на широту твоего города.
Тебе мегаточность не нужна. Нужны приблизительно рядом находящиеся водители
33 vs1c
 
10.03.13
18:15
(30) А это смотря какой приемник GPS, какие спутники над головой и пр. Я так понимаю, что автору нужно просто выдать ближайшие машины в радиусе примерно 5 км. Полагаю, что с серьезной тригонометрией, меркаторами и прочей наукой  заморачиваться не стоит. Хотя та досуге надо бы посчитать.
(31) я думаю ляжет и с запросом. как в данной обстановке себя чувствует теория массового обслуживания?
34 Kabz
 
10.03.13
18:18
(28) мне бы хорошо точность по дорогам с учетом пробок , боюсь ее не получу. Поэтому сначала отберу наверно приблизительно а потом посчитаю точность .., проблема что есть несколько узловых точек радиуса  3,5,7 км  сначала смотрим меньшее расстояние тут накладывается свой отбор по типам водителям .. предлагаем им если  нет или оказались берем  второе расстояние и тд.
35 Classic
 
10.03.13
18:38
(34)
"По дорогам с учетом пробок" это как? Пробки на расстояние не влияют. Если имеется ввиду "маршрут с учетом минимизации пробок", то погрешность даже (1) будет большая.
Плюс тебе надо учесть, что если машина движется, то время обработки запроса играет значительную роль. За лишнюю минуту работы запроса машина может уехать на километр. Это значительно превышает погрешность "пифагорового" метода.
Делай максимально быстрый простой отбор в запросе с запасом. А потом уже накладывай свои функции определения расстояния
36 Kabz
 
10.03.13
18:45
(33) (35)  5 текущих заказов 137 активных водил  запрос 1 приближения 127 мс  беру  кто входит в квадрат . думаю 40 200  справляться ....   опрашивать хочу раз в 20 секунд  ну  и  успевать регламентное задание за это время должно .
37 Kabz
 
10.03.13
18:47
(35) растояние до цели по дороги  * на коэффициент пробки этой дороги : но это не реально
38 vs1c
 
10.03.13
18:55
(36) И личного опыта (не Москва) - автоматическое распределение на ближайших к заказу - полная ж*па. Водилы начинают выть, диспетчеры материться - в итоге они все будут собираться в местах наибольшей вероятности получения заказа, это они без всякой математики быстро вычислят. А что делать с остальными заказами?
39 GANR
 
10.03.13
19:08
(34) Ещё и пробки... Тут уже алгоритмы на графах подключать надо, либо писать.
40 GANR
 
10.03.13
19:09
+(39) Может из УПП 2.0 последнее выдрать удастся.
41 Speshuric
 
10.03.13
20:03
(0)
1. С тригонометрией всё просто: запихнуть её с нужной точностью в таблицу временную. Колонки: Угол, Синус, Косинус, Тангенс, Котангенс. А для конкретного города - вообще константу взять и посчитать.
2. С обратными тригонометрическими и квадратным корнем это не канает, но квадратный корень достаточно легко исключить из неравенства.
3. Для 5 км можно существенно упростить формулу, принимая область плоской. Грубо говоря: один градус широты константа всегда, а градус долготы в километрах - почти константа для данной области.
42 Torquader
 
10.03.13
21:02
(41) А какая разница - в запросе всё равно будет полный перебор по всем машинам, так как нет возможности оптимизировать функцию вычисления расстояния.
Хотя, можно сначала нарисовать некоторое подобие квадрата, чтобы отбор был по двум интервалам, а потом уже для тех, кто попал в интервал можно провести точные вычисления.
43 Fragster
 
гуру
10.03.13
21:11
наркоманы, чтоли? выбираем в квадрате запросом (тогда по индексу есть шанс), затем в квадрате выбираем по квадрату гипотенузы. на кривизну поверхности земли на расстояниях типа 5 км молжно забить. и на 50 - тоже.
44 Fragster
 
гуру
10.03.13
21:11
мы же не баллистическую ракету наводим
45 Classic
 
10.03.13
21:24
(41)
Можно даже не брать градус долготы как константу, а предположить, что он прямопропорционален для данной области. так точность будет выше, а увеличение нагрузки на вычисления минимально.
Типа для 50 широты - 71.35 км
Для 51 - 69.85
Все, что между ними - равномерное распределение.
тогда в Пифагора брать минимальный из двух точек.
Достаточно легкий для скуля алгоритм и вменяемая точность вычислений
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший