|
Моя битва с Яндекс-картами... | ☑ | ||
---|---|---|---|---|
0
mikecool
05.06.12
✎
16:44
|
При загрузке выполняется
window.onload = function () { map = new YMaps.Map(document.getElementById("YMapsID")); map.setCenter(new YMaps.GeoPoint(39.761795, 47.271364), 10); map.addControl(new YMaps.TypeControl()); map.addControl(new YMaps.ToolBar()); map.addControl(new YMaps.Zoom()); map.addControl(new YMaps.ScaleLine()); map.addControl(new YMaps.SearchControl()); } есть пара функций function AddPath(Param) { debugger; polyline = new YMaps.Polyline(Param); polyline.setStyle("example#CustomLine"); map.addOverlay(polyline); return polyline; } function GetPointObject(X, Y) { return new YMaps.GeoPoint(X, Y); } в одноэсе пишу СафеЭррей = Новый COMSafeArray("VT_VARIANT", Результат.Количество()); Счетчик = 0; Пока Результат.Следующий() Цикл СафеЭррей.SetValue(Счетчик, ЭлементыФормы.ПолеHTMLДокумента.Документ.parentWindow.GetPointObject(Результат.Долгота, Результат.Широта)); Счетчик = Счетчик + 1; КонецЦикла; ПостроитьПуть = ЭлементыФормы.ПолеHTMLДокумента.Документ.parentWindow.AddPath(СафеЭррей); выбираются сохраненные координаты и должен рисоваться маршрут. Пробовал отдавать обычный массив, была ругань на параметр. При передаче сейфэрея - не ругается, но и нифига не рисуется чяднт? |
|||
1
pumbaEO
05.06.12
✎
16:55
|
вот моя борьба с ЯндексКартами
|
|||
2
mikecool
05.06.12
✎
16:58
|
(1) омг )))
|
|||
3
pumbaEO
05.06.12
✎
17:04
|
(2) маршрут может строиться до минуты, не забудь про sleep
|
|||
4
mikecool
05.06.12
✎
17:07
|
(3) мне сам маршрут прокладывать не надо, пока только отобразить полигональ по имеющимся координатам с трекинга
|
|||
5
mikecool
05.06.12
✎
17:07
|
за пример спасибо, буду щас свое писать )))
|
|||
6
pumbaEO
05.06.12
✎
17:10
|
(4) зачем, тогда рисуешь вручную, в гугле точно(в яндексе не помню) можно POST передать трекинг и он сам построит по нему кривую.
|
|||
7
pumbaEO
05.06.12
✎
17:10
|
*передать трекинг - передать файл с трекингом.
|
|||
8
mikecool
05.06.12
✎
17:14
|
(7) файл с трекингом - он обычно имеет какой то стандарт? мобильная торговля в нем ли?
|
|||
9
pumbaEO
05.06.12
✎
17:17
|
(8) файл с трекингом - 2 или 3 стандарта.
[мобильная торговля в нем ли?] - не понял вопроса. |
|||
10
Serg_1960
05.06.12
✎
17:20
|
Угм... сильно зауважал. Даже как-то "тыкать" неудобно - буду теперь на "Вы" обращаться: Вы "не против", что я тут "отмечусь" для памяти на будущее?
|
|||
11
mikecool
05.06.12
✎
17:22
|
(9) мобильная торговля - суть агент плюс новой версии
вот она выгружает файл трекинга, там тупо три поля: дата и координаты, разделенные табуляцией |
|||
12
mikecool
05.06.12
✎
17:23
|
ща попробую набросать скрипт, принцип понятен, вроде )
|
|||
13
БалбесВ1с
05.06.12
✎
17:27
|
(10)А я код из (1) на рабочий стол обоями сделал.
|
|||
14
pumbaEO
05.06.12
✎
17:28
|
(10) это не мое, подсмотрел где-то... Там еще обработчик на форме стоит и ожидает определенное время, как в
добавятся элементы, но это неправильно, но к сожалению работает и все никак не перепишу на обработку события.
А так ли нужен трекинг, мы берем отметки посещений торговой точки, строю маршрут, проверяю относительное расстояние от координат снятия и координат торговой точки, коли километраж сильно отличается от задекларированного или же расстояние до точки больше чем пол километра, тогда задачу суперу - этого агента на ковер. |
|||
15
Learn_
05.06.12
✎
17:29
|
ого какие вы тут все умные
|
|||
16
Deon
05.06.12
✎
17:30
|
(15) Элита
|
|||
17
and2
05.06.12
✎
17:30
|
(15) а ты вышей код крестиком.
никто из них и близко не умеет.... |
|||
18
mikecool
05.06.12
✎
17:32
|
(17) вот если на машинке - то да, а крестиком любой сможет
|
|||
19
mikecool
05.06.12
✎
17:32
|
(16) ошибка, правильно Илита
|
|||
20
and2
05.06.12
✎
17:34
|
(18) на машинке сейчас - как 2 пальца.
ввел программу - хоть Джоконду в цвете вышьет. а вот крестиком руцами - то сильно уважительно.... |
|||
21
Паланик
05.06.12
✎
17:37
|
Зубры))
СафеЭррей - прикольно) |
|||
22
mikecool
05.06.12
✎
17:43
|
(14) а вот не понял, нафига цикл
Для Каждого СтрокаКонтрагенты Из СоставМаршрута Цикл если текстхтмл потом перебивается? |
|||
23
mikecool
05.06.12
✎
17:45
|
(21) думать уже не хочется )
|
|||
24
pumbaEO
05.06.12
✎
17:49
|
(22) строиться строка с массиво координат точек
МаршрутHTML = МаршрутHTML+?(МаршрутHTML="","",",")+"'"+Формат(СтрокаКонтрагенты.Долгота,"ЧРД=.; ЧН=; ЧГ=0")+","+Формат(СтрокаКонтрагенты.Широта,"ЧРД=.; ЧН=; ЧГ=0")+"'"; а в html уже пишем вручную массив | var router = new YMaps.Router(["+МаршрутHTML+"], [1], {viewAutoApply: 1}); |
|||
25
kuromanlich
05.06.12
✎
17:51
|
а есть у яндекса ограничения по количеству точек при построении трека?
|
|||
26
pumbaEO
05.06.12
✎
17:54
|
(25) у яндекса пока нет, во всяком случаи для 30-60 точек проблем не было, у гугла ограничение 8 роутов = 10 точек.
|
|||
27
mikecool
05.06.12
✎
17:54
|
(24) это я понял, но там же собирается ТекстHTML, который не используется
или я гоню? |
|||
28
kuromanlich
05.06.12
✎
17:57
|
(26) про гугл знал, вот про яндекс нет... обидно будет если все заточишь, а через пол года накося...
|
|||
29
pumbaEO
05.06.12
✎
18:00
|
Используется...
Процедура вызывается из формы
ЭлементыФормы.Карта - ПолеHTML... |
|||
30
mikecool
05.06.12
✎
18:01
|
(29) блин, так после того как соберется в цикле, тупо перебивается Текстхтмл = )))
|
|||
31
pumbaEO
05.06.12
✎
18:03
|
(28) тогда можно будет на бинг перейти, а если будут карты нарисованы то и на openstreetmap.
(30) работает ... не трогаю. |
|||
32
Learn_
05.06.12
✎
19:24
|
(17) ну спасиб ))))))
|
|||
33
Alex_MA
05.06.12
✎
20:10
|
(0) скажите для каких целей ?
|
|||
34
Alex_MA
05.06.12
✎
20:11
|
матрица маршрутов чтоль ?
|
|||
35
Agent ООЗ
05.06.12
✎
20:33
|
как все сложно то, вот пример внешней обработки вывода гпс трека для трех карт: гугл, яндекс, опенстрит.
http://agentoid.ru/?attachment_id=706 |
|||
36
Agent ООЗ
05.06.12
✎
20:35
|
результат http://clip2net.com/s/20gXl
|
|||
37
mikecool
06.06.12
✎
12:18
|
(35) чета не подружился я с нею (
ну да бох с нею, потом может и получиться подружиться возник маленький вопрос: в при открытии вызывается ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(Текст); Текст содержит хтмл страницу, в которой описана ява функция GetPointObject по кнопке заменяю Текст на свой, в котором также описана эта функция но получаю при попытке использования, что функция не обнаружена может нужен какой то рефреш? |
|||
38
mikecool
09.06.12
✎
10:21
|
ситуация поменялась, бросил я переопределять текст страницы с картой
начал писать яваскрипты )) проблема обнаружилась в получении координат по переданному адресу делаю: var geocoder = new YMaps.Geocoder(AddressString); //map.addOverlay(geocoder); - если раскоментить, то добавится метка на карту var GeoPoint = geocoder[0].getGeoPoint(); -- вот здесь нулл с меткой или без ((( var result = Array(); result[0] = GeoPoint.getX(); result[1] = GeoPoint.getY(); return result; что делать? |
|||
39
rs_trade
09.06.12
✎
10:28
|
(38) можно вкраце чего не получается? в 1С результат получить?
|
|||
40
mikecool
09.06.12
✎
10:30
|
(39) да, координаты нужны в 1с,
возвращал в 1с geocoder - у него в свойстве result = 0 хотя отметку на карте рисует, значит результат таки есть |
|||
41
acsent
09.06.12
✎
10:35
|
может поможет
http://infostart.ru/public/69837/ |
|||
42
mikecool
09.06.12
✎
10:38
|
(41) не поможет, видел ее уже
|
|||
43
mikecool
09.06.12
✎
10:38
|
+42 все равно спасибо )
|
|||
44
rs_trade
09.06.12
✎
10:44
|
(40) он асинхронно работает. воткни alert перед ретурном. и посмотри, вернет в 1с или нет
|
|||
45
mikecool
09.06.12
✎
10:51
|
(44) воткнул
var geocoder = new YMaps.Geocoder(AddressString); alert(AddressString); var GeoPoint = geocoder[0].getGeoPoint(); не удалось получить значение свойства "getGeoPoint": значением объекта является NULL или он не определен зы: Привет, Ненавижу1с ))) |
|||
46
mikecool
09.06.12
✎
10:53
|
насчет асинхронности - читал, вот только ума пока не приложил - как из события вернуть данные в 1с )
|
|||
47
rs_trade
09.06.12
✎
10:56
|
Результат = Новый Массив;
МассивЗаказов = Док.parentWindow.getOrderArray(Результат); В Javascript function getOrderArray(result) { result.add(1); result.add(2); result.add(3); return(result); } |
|||
48
mikecool
09.06.12
✎
11:01
|
Пример ниже иллюстрирует обработку событий геокодера. В случае успешного геокодирования пользователю карты будет показано сообщение о количестве найденных объектов, а самый релевантный (первый) из них будет показан на карте:
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { if (this.length()) { alert("Найдено :" + this.length()); map.addOverlay(this.get(0)); map.panTo(this.get(0).getGeoPoint()) }else { alert("Ничего не найдено") } }); YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (error) { alert("Произошла ошибка: " + error.message) }); вот сюда пока ума не хватает )) |
|||
49
mikecool
09.06.12
✎
11:01
|
+48 попробовать чтоли обработку оповещения натянуть...
|
|||
50
rs_trade
09.06.12
✎
11:31
|
я че то с трудом вспоминаю свою войну с эти делом, но в итоге я по моему пошел другим путем. посмотри обработку, такое тебе подойдет?
https://dl.dropbox.com/u/20471596/ПолучениеКоординатПоАдресу.epf |
|||
51
mikecool
09.06.12
✎
11:39
|
(50) посмотрел, щас попробую такую же фигню для яндекса придумать )
|
|||
52
rs_trade
09.06.12
✎
11:41
|
(51) У яндекса есть такой же формат запросов. Гугл меня устроил тем, что выдавал адм. округ Москвы, в отличии от яндекса.
|
|||
53
pumbaEO
09.06.12
✎
11:41
|
(51) почту проверь...
|
|||
54
mikecool
09.06.12
✎
11:48
|
(53) проверяю, сообщение в присоздании впечатляет ))))
|
|||
55
mikecool
09.06.12
✎
11:48
|
+54 спасибо
|
|||
56
mikecool
09.06.12
✎
11:53
|
(53) посмотрел, не нашел момента возврата координат в 1с ((
|
|||
57
pumbaEO
09.06.12
✎
11:58
|
(55) обращайтесь:
| // Создание обработчика события Click для карты | YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) { | var ClickOnMap = document.getElementById(""Clikatel""); | tempPoint = mEvent.getGeoPoint(); | document.body.CoordLat = tempPoint.getLat(); | document.body.CoordLng = tempPoint.getLng(); | document.body.ActionMap = 1; | ClickOnMap.click(); | }); |
|||
58
mikecool
09.06.12
✎
12:00
|
(57) гм, описание обработчика и его вызов в обработчике?
|
|||
59
mikecool
09.06.12
✎
12:00
|
+58 и я уже упоминал - чего то нет у меня тех объектов, на которые ссылаешься ты ((
|
|||
60
pumbaEO
09.06.12
✎
12:06
|
(59) Давай еще раз описание задачи:
1. Есть адресс, надо получить координаты? (решается без поля HTML) 2. Есть адрес, получаем координаты, отмечаем на карте пускай пользователь посмотрит и согласится? (с помощью ПолеHTML) |
|||
61
mikecool
09.06.12
✎
12:07
|
(60) нет, мне достаточно получить координаты
|
|||
62
mikecool
09.06.12
✎
12:08
|
как бы скрипт отрабатывает, метку размещает, но сам объект Geocoder возвращается пустым
|
|||
63
pumbaEO
09.06.12
✎
12:14
|
геокодирование через HTTP:
Перем _КаталогВременныхФайлов;
ГеокодироватьСтроку - в строку таблицы возвращает или координаты или адрес. Передаешь адрес, возвращает координаты, передаешь координаты возвращает адрес. Более точное описание http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml |
|||
64
mikecool
09.06.12
✎
12:19
|
(63) ого, спасибо )
|
|||
65
rs_trade
09.06.12
✎
12:28
|
(63)
Функция URLEncode4(Строка="") ScrCtrl = Новый COMОбъект("MSScriptControl.ScriptControl"); ScrCtrl.Language="JScript"; Сообщение = ScrCtrl.eval("var uri='"+Строка+"'; encodeURI(uri);") ; Возврат Сообщение; КонецФункции |
|||
66
pumbaEO
09.06.12
✎
12:30
|
(65) согласен, проще, но в linux не отработает, без доп шаманств
|
|||
67
mikecool
09.06.12
✎
14:54
|
получилось по варианту из (63)
всем спасибо ))) |
|||
68
pumbaEO
09.06.12
✎
14:55
|
(67) не забудь про apikey, а то на каком-то запросе забанят...
|
|||
69
mikecool
09.06.12
✎
14:59
|
(68) кстати, не нашел инфы - с какой частотой можно отправлять такие запросы?
поставил паузу в 3 секунды, насколько можно уменьшить? а апикей есть ) |
|||
70
pumbaEO
09.06.12
✎
15:03
|
(69) когда много точек надо был определить, делал RND с 1 до 10 секунд. Есть ограничение до 2500 за сутки вроде (или то у гугла), но вроде было и у яндекса. Пару раз в результате тестов приходилось сосать лапу(зачеркнуто) ждать сутки.
|
|||
71
ЗЫ5
09.06.12
✎
15:05
|
аналогичный вопрос по 7.7 есть специалисты нашел такой код.
ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl"); ScrptCtrl.Language="vbscript"; ScrptCtrl.AddCode( "Function EncodeURIcomponent(SourceString) | Dim I, C, Out | For I = 1 To Len(SourceString) | C = Asc(Mid(SourceString, I, 1)) | '/// Пробелы заменяем на плюс | If C = 32 Then | EncodeURIcomponent = EncodeURIcomponent + ""%20"" | '/// Запрещённые символы заменяем на ""%"" и HEX значение от кода символа | ElseIf (C = 44) Then | EncodeURIcomponent = EncodeURIcomponent + "","" | ElseIf (C < 48 Or C > 126) Or (C > 56 And C <= 64) Then | EncodeURIcomponent = EncodeURIcomponent + ""%"" + Hex© | Else | '/// Разрещённые символы добавляем как есть | EncodeURIcomponent = EncodeURIcomponent + Chr© | End If | Next | End Function"); СтрокаURL = ScrptCtrl.CodeObject.EncodeURIcomponent(СтрокаAnsi); Сервер = "geocode-maps.yandex.ru"; Страница = "/1.x/?geocode="+СтрокаURL+"&key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=="; Вопрос что в строку СтрокаAnsi должно передоваться? |
|||
72
pumbaEO
09.06.12
✎
15:07
|
(71) http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml - или адрес или координаты вернет обратное переданному
|
|||
73
ЗЫ5
09.06.12
✎
15:07
|
еще есть вот пример может кому нужен
http://infostart.ru/public/76147/ только к 7.7. никак не могу прикрутить автора измучал)) |
|||
74
ЗЫ5
09.06.12
✎
15:09
|
(+73) при чем у некоторых получается запустить на 7.7. у нас никак..
может кто сталкивался у нас пишет АктивХ.СоздатьЭУ("Maps1C.ActiveX.Maps1CUserControl"); {C:\DOCUMENTS AND SETTINGS\FEDOROV\РАБОЧИЙ СТОЛ\MAPS\MAPS.ERT(63)}: Создание элемента управления Maps1C.ActiveX.Maps1CUserControl не удалось в 8.2. все работет идеально. Если делаешь АктивХ.СоздатьЭУ("Maps1C.Карта"); то ошибок не выдает но на форме появляется сообщение окно здесь должен быть элемент АктивХ. |
|||
75
ЗЫ5
09.06.12
✎
15:10
|
самое интересное что разработка автора на 8.2 работает идеально..
|
|||
76
pumbaEO
09.06.12
✎
15:10
|
прикольные ограничения:
2. Максимальное количество маршрутов - 3 - люди купять и потом им скажут, для гугла ограничение в 8 маршрутов, хотите большего заплатите еще гуглу нехилую денюжку... |
|||
77
ЗЫ5
09.06.12
✎
15:11
|
(76) так нам просто точки нужны маршруты не нужны нужен анализ покупателей. на карте
|
|||
78
ЗЫ5
09.06.12
✎
15:12
|
(72) Спасибо.
|
|||
79
pumbaEO
09.06.12
✎
15:16
|
(77) вам просто точки нужны или еще нужна интерактивность, типа клацнули на карте, вот эта точка?
|
|||
80
ЗЫ5
09.06.12
✎
15:21
|
(79) Выгрузить хотим из справочника Контрагенты покупателей чтобы можно было двигаться по карте на форме 1С и смотреть кто сколько берет в каком регионе и какой менеджер отвечает за этого контрагента ну это можно цветами выделять.
|
|||
81
pumbaEO
09.06.12
✎
15:26
|
Формируйте себе правильный html, и показывайте, если честно не вижу проблемы. То API яндекса которое достаточно, что бы отобразить... (вставляете activex объект ie и можете через форму смотреть)... Но я бы советовал сохранять в файл html и открывать современным браузером, с ie6 приходилось костыли выдумывать причем на одной машинке работает, на другой нет...
|
|||
82
ЗЫ5
09.06.12
✎
15:42
|
Сделал такой код в 7.7. на форме сделал текстовое поле КартаАктХ но при выполнении это кода все равно в примоугольнике пишет, здесь должен быть элемент АктивX не доходит что ему может не нравится..
АктивХ = СоздатьОбъект("АктивИкс") ; АктивХ.УстановитьАтрибут(Форма,"КартаАктХ"); АктивХ.СоздатьЭУ("Maps1C.ActiveX.Maps1CUserControl"); АктивХ.УстановитьФокус(); Карта = АктивХ.Объект; Карта.ТипКарты="GoogleMap"; Карта.Маршруты.Очистить(); Карта.Маркеры.Очистить(); СтрокаПоиска1="Россия, Новосибирск, Ленина, 12"; СтрокаПоиска2="Россия, Новосибирск, Гоголя, 30"; Координаты1 = Карта.ПолучитьКоординатыПоАдресу(СтрокаПоиска1); Координаты2 = Карта.ПолучитьКоординатыПоАдресу(СтрокаПоиска2); ТекМаркер=Карта.ДобавитьМаркер(Координаты1); ТекМаркер=Карта.ДобавитьМаркер(Координаты2); Карта.АвтомасштабМаркеров(); |
|||
83
ЗЫ5
09.06.12
✎
15:42
|
компоненту автора зарегил ок в 8.2 все супер а в 7.7. не идет..
|
|||
84
mikecool
15.06.12
✎
16:31
|
а вот как определить оверлей на карте по координатам?
есть - список точек с координатами, тыцкаю в нужную - на ней происходит центрирование хочу еще сменить тип балуна, поменять ему цвет, может еще и размер ) |
|||
85
mikecool
15.06.12
✎
16:57
|
попробую поднять, хоть и тяпница, хоть и вечер )
|
|||
86
kuromanlich
15.06.12
✎
17:07
|
а у тебя есть уже функция "рядом"? ну типа учет 15 метровой погрешности. поделешься?
|
|||
87
mikecool
15.06.12
✎
17:14
|
(86) ээ? не, такую еще не рисовал ((
|
|||
88
kuromanlich
15.06.12
✎
17:19
|
а мне вот уже понадобилос... е охота возиться... по идее функции приближения должны быть в инете специально для геокоординат...
|
|||
89
kuromanlich
17.06.12
✎
12:17
|
(88) не приближения, а принадлежности? wiki:Функция_принадлежности
|
|||
90
kuromanlich
17.06.12
✎
16:10
|
(0) если понадобится "функция приближения" (в абсолютном конечно выражении, т.е. обычное множество) то вот тут Калькулятор расстояния (гео. координаты А и Б) есть функция вычисения расстояния между двумя точками
|
|||
91
mikecool
21.06.12
✎
15:02
|
(84) так понимаю сложно реализовать, если вообще возможно
решил пойти другим путем - сохраняю в массиве добавленные на карту элементы и буду пробовать работать с ним не найду - если несколько меток одна на другой, то как (если я знаю метку) вывести ее на передний план? |
|||
92
pumbaEO
21.06.12
✎
15:07
|
(91) на хабре почитай, там была поднята тема с оверлейми и множеством точек с объединениями и т.д.
|
|||
93
mikecool
21.06.12
✎
15:34
|
(92) не нашел там упоминаний по своему вопросу (
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |