Имя: Пароль:
1C
 
1с 8.3 + JSON yandex расстояние между двумя точками.
0 memogolik
 
07.12.16
12:10
День добрый. Вопрос такой.
Есть пример из яндекса:
https://geocode-maps.yandex.ru/1.x/?format=json&geocode=Москва,%20улица%20Новый%20Арбат,%20дом%2024

Данные выводятся в формате JSON. Все отлично, можно подцепить 1Ской.
Но это геокодинг, т.е. просто по адресу получить координату.
А вот примера где по паре адресов(координат) можно получить в json формате расстояние между этими координатами найти не могу. Если есть знатоки, подскажите пожалуйста. Заранее спасибо.
1 DrShad
 
07.12.16
12:20
2 DrShad
 
07.12.16
12:23
хотя нет немного не то
3 DrShad
 
07.12.16
12:23
тебе какое именно расстояние нужно? по прямой?
4 DrShad
 
07.12.16
12:27
&НаСервере
Функция ПосчитатьРасстояние(Широта1, Долгота1, Широта2, Долгота2)
    скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
    скрипт.Language="jscript";
    скрипт.AddCode("function latlng2distance(lat1, long1, lat2, long2) {
    |//радиус Земли
    |var R = 6372795;
    |
    |//перевод коордитат в радианы
    |lat1 *= Math.PI / 180;
    |lat2 *= Math.PI / 180;
    |long1 *= Math.PI / 180;
    |long2 *= Math.PI / 180;
    |
    |//вычисление косинусов и синусов широт и разницы долгот
    |var cl1 = Math.cos(lat1);
    |var cl2 = Math.cos(lat2);
    |var sl1 = Math.sin(lat1);
    |var sl2 = Math.sin(lat2);
    |var delta = long2 - long1;
    |var cdelta = Math.cos(delta);
    |var sdelta = Math.sin(delta);
    |
    |//вычисления длины большого круга
    |var y = Math.sqrt(Math.pow(cl2 * sdelta, 2) + Math.pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));
    |var x = sl1 * sl2 + cl1 * cl2 * cdelta;
    |var ad = Math.atan2(y, x);
    |var dist = ad * R; //расстояние между двумя координатами в метрах
    |
    |return dist
    |}
    |");
    
    ВозвращаемоеЗначение=скрипт.Modules.Item("Global").CodeObject.latlng2distance(Число(Широта1), Число(Долгота1), Число(Широта2), Число(Долгота2));
    
    Возврат ВозвращаемоеЗначение;
КонецФункции
5 Zapal
 
07.12.16
12:53
теорема Пифагора, не?
6 Jija Grenkov
 
07.12.16
12:56
(5) Не
7 Zapal
 
07.12.16
13:11
(6) а мне кажется что если речь о координатах в пределах одного города то прокатит. Оценить сколько километров в одном градусе и считать
8 memogolik
 
07.12.16
14:13
расчет должен быть не напрямую между точками а через яндекс API.
Ответ от яндекса должен быть в виде json или хотя бы xml.
9 DrShad
 
07.12.16
14:17
(8) ну тогда (1), вот только какого джейсона ты ожидаешь? там тупо расстояние в цифрах
10 DrShad
 
07.12.16
14:18
ну и без самой карты как объекта не обойтись
11 memogolik
 
07.12.16
14:34
(10) https://s.mail.ru/4QdM/VdqBfd9xf тут же он рассчитывает. Как из 1Ски выцепить расстояние?
12 Jija Grenkov
 
07.12.16
14:45
(7) 1 градус по широте и 1 градус по долготе в общем случае разное расстояние, посмотрите на сетку широт и долгот, по тиореме пифагоора результат будет очень далекий от правильного, можно разве что поправочные коэфициенты ввести, но лучше уже посчитать по праильной формуле.
(8) В (1) что не устраивает. У гугла должна быть матрица расстояний. Но эти сервисы обычно делают более грубы расчет по сравнению с ручным вызовом карты.
Вот я когда-то делал обработку, сама вк там бажная с момента заливки на инфостарта она была практически полностью переписана, но в обработке должно быть получени рассчтояния
13 Jija Grenkov
 
07.12.16
14:46
14 Zapal
 
07.12.16
14:47
(11) если ты собрался рассчитывать оптимальные маршруты то обломись
яндекс запрещает использование этого своего сервиса в коммерческих целях, а у гугла надо платить
можно попробовать опенстритмап
15 DrShad
 
07.12.16
14:51
(14) на двух точках посчитать оптимальный маршрут вообще не проблема
16 DrShad
 
07.12.16
14:52
(11) а карту ты там видишь? без нее никак
17 DrShad
 
07.12.16
14:52
+(16) ну а как считает и как получить результат описано в (1)
18 Zapal
 
07.12.16
15:01
(15) мы тут конечно уходим в область домыслов, но подозреваю что автор хочет оценить все возможные пути между несколькими адресами и методом простого перебора выбрать лучший
19 DrShad
 
07.12.16
15:03
(18) простым перебором не получится, а методом полного перебора и расчета не по прямой, а по карте уже на 6-ти точках очень долго