
No
11.10.2017
10:22:48
Никак по другому не хочу
Просто стоит это учитывать )
Вот и всё )

biert
11.10.2017
11:57:59
есть идеи как заменить near в geocoder?

Google

No
11.10.2017
12:08:34

biert
11.10.2017
12:12:51
задача найти в базе близайшие координаты к указаным
но с условием не больше N километров
near вроде то что надо, но как-то не работает, пустой результат выдет, хотя не должен
не понимаю почему

No
11.10.2017
12:14:39
ммм, нужно подробнее
был тот же кейс
что и у тебя
всё на ура воркало
попробуй увеличить радиус, который передаешь в near
если на огроном радиусе ближайших не найдет

biert
11.10.2017
12:15:19
пытался

No
11.10.2017
12:15:22
значит проблема не в near-е

Google


biert
11.10.2017
12:15:51
координаты еспользуя левые калькуляторы с дистанцией 1 км
а оно не хочет и считает как-то не адекватно
```
SELECT drivers.*, 6371.0 * 2 * ASIN(SQRT(POWER(SIN((49.836389 - drivers.longitude) * PI() / 180 / 2), 2) + COS(49.836389 * PI() / 180) * COS(drivers.longitude * PI() / 180) * POWER(SIN((24.034877 - drivers.latitude) * PI() / 180 / 2), 2))) AS distance, MOD(CAST((ATAN2( ((drivers.latitude - 24.034877) / 57.2957795), ((drivers.longitude - 49.836389) / 57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing FROM "drivers" WHERE "drivers"."available" = $1 AND (drivers.longitude BETWEEN 49.746456839408125 AND 49.92632116059187 AND drivers.latitude BETWEEN 23.895441341097502 AND 24.1743126589025 AND (6371.0 * 2 * ASIN(SQRT(POWER(SIN((49.836389 - drivers.longitude) * PI() / 180 / 2), 2) + COS(49.836389 * PI() / 180) * COS(drivers.longitude * PI() / 180) * POWER(SIN((24.034877 - drivers.latitude) * PI() / 180 / 2), 2)))) BETWEEN 0.0 AND 10) ORDER BY distance ASC LIMIT $2
ох шит


No
11.10.2017
12:17:35
ну да ) в этом особо не разберешься )

biert
11.10.2017
12:17:55
49.829617;24.032388 это координаты в базе

No
11.10.2017
12:17:58
формулу он точно правильно генерит

biert
11.10.2017
12:18:10
да

No
11.10.2017
12:18:13
по теореме Гаверсинуса кажись так называется

biert
11.10.2017
12:18:14
"pickup_place_latitude": 49.836389,
"pickup_place_longitude": 24.034877,
это те которые в near закидаю
'''
drivers = Driver.available.near(location, MAX_DISTANCE_FOR_NOW, :units => :km).includes(:car).limit(MAX_DRIVERS_AMOUNT)
'''
и пёс его знает почему оно так

Anna
11.10.2017
12:19:54

No
11.10.2017
12:20:15
ошибся

Anna
11.10.2017
12:20:35
для радиусов в 5-10 км не имеет смысла только

No
11.10.2017
12:20:55
для радиусов 5-10 км земля плоская прост )

Anna
11.10.2017
12:21:02
ну а я о чём

Google

No
11.10.2017
12:21:42
ведь там итак запрос не маленький, может что-то криво нагенерить
попробуй без и проверь результат
так же пустое будет?

biert
11.10.2017
12:22:11
да
только что затестил

No
11.10.2017
12:22:21
@cleaners = Cleaner.where.not(id: @order.declined_cleaners_ids).near(@order, 50)

Evegeniy
11.10.2017
12:22:38
ты в Qlean работаешь?
Не удержался ?
спросить

No
11.10.2017
12:23:04
нет, это проект вообще некоммерческий )
точнее - диплом бакалавра )

biert
11.10.2017
12:23:38
бесовщина
кстати
если запрос к базе подшаманить
и убрать рамки between
то работает ))

No
11.10.2017
12:25:17
хм
убрать - всмысле заменить на равенство?

biert
11.10.2017
12:25:25
FROM "drivers" WHERE "drivers"."available" = TRUE
AND (drivers.longitude BETWEEN 49.746456839408125 AND 49.92632116059187
AND drivers.latitude BETWEEN 23.895441341097502 AND 24.1743126589025
) ORDER BY distance ASC LIMIT 3

Google

biert
11.10.2017
12:25:40
убрать и оставить FROM "drivers" WHERE "drivers"."available" = TRUE
есть подозрения что дело может быть в точности float
24.1743126589025 че-т слишком точно

No
11.10.2017
12:27:44
не совсем понял, что ты убрал из запроса

Anna
11.10.2017
12:27:56
всё

biert
11.10.2017
12:28:12
по факту само условия поиска по близости

Anna
11.10.2017
12:28:15
теперь он проверяет квадрат на наличие водителей в нём

No
11.10.2017
12:28:43
сейчас, может ещё чё вспомню, может были какие-то проблемы

Admin
ERROR: S client not available

biert
11.10.2017
12:28:46
мне почти подходит
но хз как это сказать модели

No
11.10.2017
12:29:08
но моё впечатление было тогда: near? скорее всего сразу не заведется. но завелось сразу отлично

biert
11.10.2017
12:29:10
не использовать все эти шаманства
поищу может можно отключить некоторые параметры

No
11.10.2017
12:30:48
вот твоя проблема кажись

biert
11.10.2017
12:30:48
You cannot use the near scope with another scope that provides an includes option because the SELECT clause generated by near will overwrite it (or vice versa).

No
11.10.2017
12:30:58
ахах

biert
11.10.2017
12:30:59
мысли читаешь

No
11.10.2017
12:31:01
одновременно )
я просто всомнил, что на гитхабе был раздел по near отдельно )))

Google

biert
11.10.2017
12:31:43
тогда как жить

No
11.10.2017
12:32:02
там же ниже вариант
с комбой joins и preload
не подходит?

biert
11.10.2017
12:37:29
ничерта не понимаю
оно делает 2 поля с дистанцией и направлением от одной точки к другой
и потом после where ищет координаты через between
но не находит
хотя должно
есть мысль что в модели написав reverse_geocoded_by :longitude, :latitude
это не правильно
точняк
надо наоборот
заработало
ппц баг тупой
точнее я
спасибо ребята)

Artem
11.10.2017
13:27:48

Evegeniy
11.10.2017
13:27:59
?
Она даже сюда забралась?