SASGIS

Веб-картография и навигация

Слой Яндекс.Пробки

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

Слой Яндекс.Пробки

Сообщение dsd_corp » 17 мар 2009, 18:04

Всем привет.
Недавно в ветке "Чего вы хотите?" было обсуждение сабжа.
По просьбам трудящихся создаю новую тему и скомпилирую результаты предыдущих обсуждений сюда.

Итак, вот что у нас уже есть. Первое сообщение данной ветки (этот пост) будет регулярно обновляться.

настройки для слоя пробок:
GetUrlScript.txt
Код: Выделить всё
function retrieve_ts(url: string; xstart: string; xend: string):integer; external 'ytrf_retrieve_ts@maps\YaTraf.dll stdcall';
function GetIntParam(key: string): Integer; external 'ytrf_GetIntParam@maps\YaTraf.dll stdcall';
function SetIntParam(key: string; val: Integer): integer; external 'ytrf_SetIntParam@maps\YaTraf.dll stdcall';
function GetUTS: Longint; external 'ytrf_GetUTS@maps\YaTraf.dll stdcall';

function ts_update_needed(delta: integer):integer;
var
  lts, ts : integer;
  lts_key: string;
begin
  result:=0;
  lts_key:='ytrf_lts';
  lts:=GetIntParam(lts_key);
  ts:=GetUTS;
  if (ts>lts+delta) then begin
    SetIntParam(lts_key, GetUTS);
    result:=1;
  end;
end;

function get_ts(delta: integer):integer;
var
  ts_key, url, data: string;
  pt : LongInt;
begin
result:=0;
ts_key:='ytrf_ts';
if (ts_update_needed(delta)>0) then begin
   url:='http://trf.maps.yandex.net/trf/stat.js';
   result:=retrieve_ts(url, 'timestamp:"', '"');
   SetIntParam(ts_key, result);
end else begin
   result:=GetIntParam(ts_key);
end;
end;

begin
ResultURL:='';
if (GetZ<>0) then ResultURL:=GetURLBase+inttostr(GetX)+'&y='+inttostr(GetY)+'&z='+inttostr(GetZ-1)+'&tm='+inttostr(get_ts(60));
end.


params.txt
Код: Выделить всё
[PARAMS]
GUID={C32B96AD-3AC5-4170-ADD7-47B2222AFC99}
asLayer=1
name=Пробки (Яндекс.Карты)
name_9=Traffic (Yandex.Maps)
NameInCache=yatraf
DefURLBase=http://trf.maps.yandex.net/tiles?l=trf&x=
ContentType=image/png
ParentSubMenu=
Ext=.png
projection=2
sradiusa=6378137
sradiusb=6356752
separator=0
UseDwn=1
Usestick=0
UseGenPrevious=0
Usedel=1
Usesave=0
UseAntiBan=0
Sleep=0
DefHotKey=54
BanIfLen=0
DelAfterShow=1

собственно готовый zmp-файл: http://cs.911.ru/traffic/YaTraf.zmp (GUID я ему сгенерил, а слизывал формат с яндекс-гибрида)
для работы слоя необходима внешняя библиотека дополнительных функций.
Скомпилированную библиотеку можно скачать тут: http://cs.911.ru/traffic/YaTraf.dll
Этот файл нужно бросить в папку maps, то есть туда же, где лежат zmp-файлы.

исходники библиотеки(для параноиков и просто интересующихся :D ):
Последний раз редактировалось dsd_corp 16 окт 2009, 10:15, всего редактировалось 3 раз(а).
dsd_corp
Новичок
 
Сообщения: 46
Зарегистрирован: 25 фев 2009, 19:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Слой Яндекс.Пробки

Сообщение garl » 17 мар 2009, 18:16

а как быть если есть JAVA приложение для допустим краснодара, а в WEB интерфейсе его нету?
Russian NDN Team
QIP NightlyTester
Аватара пользователя
garl
Гуру
 
Сообщения: 1625
Зарегистрирован: 16 июл 2008, 14:40
Откуда: Краснодар, Кубанская столица.
Благодарил (а): 97 раз.
Поблагодарили: 273 раз.

Re: Слой Яндекс.Пробки

Сообщение dsd_corp » 17 мар 2009, 18:57

garl писал(а):а как быть если есть JAVA приложение для допустим краснодара, а в WEB интерфейсе его нету?

пока никак. в веб поддерживаются только вышеперечисленные 4 города.
и еще несколько (чуть ли не около 20) в java-приложениях, ака "Пробки 2.0".
я думаю, то что есть в java-приложениях, там данные строятся только на основе мониторинга движения самих пользователей(трекинг), и возможно частично из других источников.
пока в определенном городе не будет более-менее полноценного мониторинга пробок, как я понимаю, до тех пор этот город в веб-чать на яндексе не попадет. а возможно некоторые из этих городов уже наполовину готовы к подключению в веб-часть.
ну или как-то так.

если есть желание, возможности и способности, можете попробовать поковырять java-версию на предмет того откуда она берет тайлы, и тайлы ли она вообще берет.
я мобильную версию не пользую, потому и ковырять мне нечего )
dsd_corp
Новичок
 
Сообщения: 46
Зарегистрирован: 25 фев 2009, 19:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Слой Яндекс.Пробки

Сообщение dsd_corp » 19 мар 2009, 20:29

to feya: а можно в программе к паскаль-скрипту хотя бы привинтить их же компонент TPSDllPlugin, ну в общем поддержку вызова external dll?
этого было бы достаточно для расширения нестандартного функционала программы.
dsd_corp
Новичок
 
Сообщения: 46
Зарегистрирован: 25 фев 2009, 19:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Слой Яндекс.Пробки

Сообщение feya » 20 мар 2009, 10:23

dsd_corp
Если расскажите что для этого надо сделать - без проблем.
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 56 раз.

Re: Слой Яндекс.Пробки

Сообщение dsd_corp » 20 мар 2009, 14:07

feya писал(а):dsd_corp
Если расскажите что для этого надо сделать - без проблем.


у меня нет их хелпов, т.к. имею Delphi 6, а их хелп в более новом формате - он не регистрируется.
однако по одному из их примеров видно, что тебе в модуле u_UrlGenerator.pas нужно добавить следующее(ничего если я на ТЫ перейду? так проще):

1.
Код: Выделить всё
uses uPSC_dll, uPSR_dll;


2. далее, в конструкторе TUrlGenerator.Create между строками
Код: Выделить всё
  VCompiler:= TPSPascalCompiler.Create;       // create an instance of the compiler.
  VCompiler.OnUses:= ScriptOnUses;            // assign the OnUses event.

нужно вставить такую:
Код: Выделить всё
  VCompiler.OnExternalProc := DllExternalProc; // Добавляем стандартный обработчик внешних DLL(находится в модуле uPSC_dll)


3. в том же конструкторе TUrlGenerator.Create сразу после строки
Код: Выделить всё
  FExec := TPSExec.Create;   // Create an instance of the executer.

нужно вставить такую:
Код: Выделить всё
  RegisterDLLRuntime(FExec);


и вроде бы все.

после этого для проверки должен нормально компилиться такой вот GetUrlScript.txt:
Код: Выделить всё
function FindWindow(C1, C2: PChar): Longint; external 'FindWindowA@user32.dll stdcall';
var
  wnd: Longint;
Begin
  wnd := Findwindow('TApplication', 'SAS.Planet');

end.
dsd_corp
Новичок
 
Сообщения: 46
Зарегистрирован: 25 фев 2009, 19:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Слой Яндекс.Пробки

Сообщение dsd_corp » 26 мар 2009, 18:18

to feya:

ну так чего там как? ожидать в ближайшей версии поддержки внешних DLL? и когда примерно?
а то DLL-ка уже готова давно, уже руки чешутся оттестить и вывалить сюда вместе с сырцами.
а самое главное - руки чешутся уже поскорей начать таки пользоваться пробками )))
dsd_corp
Новичок
 
Сообщения: 46
Зарегистрирован: 25 фев 2009, 19:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Слой Яндекс.Пробки

Сообщение feya » 27 мар 2009, 16:22

dsd_corp
Ожидать. Токо все никак не засяду за новую версию. Вот на этих выходных тоже хз получится ли.
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 56 раз.

Re: Слой Яндекс.Пробки

Сообщение dsd_corp » 27 мар 2009, 17:03

feya писал(а):dsd_corp
Ожидать. Токо все никак не засяду за новую версию. Вот на этих выходных тоже хз получится ли.

а то в принципе, учитывая, что у тебя скрипты пускаются как безымянная функция, а не как программа(напр. нет в первой строчке файла GetUrlScript.txt заголовка program GetUrlScript;), может статься такое, что вышеописанный мной выше способ объявления внешних функций может не сработать.
В таком случае есть вариант прикручивать внешние DLL-ки через систему плагинов. заодно и привинтить эту самую систему плагинов.

Суть будет в том(это например), что в директории программы появится поддиректория plugins, в которую будут сваливаться DLL-ки плагинов.
Программа будет автоматически их подцеплять, и все экспортируемые ими функции будут автоматом "присутствовать" в любом GetUrlScript.txt.
Плагин пишется по определенным правилам. По сути это обычная DLL, в которой кроме обычных, еще экспортируется спецфункция, возвращающая список функций, которые нужно подключить к паскаль-компилеру в SAS.Planet. По этой функции сама программа будет определять, что данная DLL-ка является плагином, и подтягивать ее к себе.

Могу реализовать. это несложно и недолго. Думаю такая шняга должна быть мегаполезной, т.к. позволяет прикрутить сторонний нестандартный функционал, не разрушая и не меняя при этом основную/базовую логику работы программы.

и вообще, можно с тобой пообщаться на более "короткой ноге"? ну, аська там, или еще чего....
dsd_corp
Новичок
 
Сообщения: 46
Зарегистрирован: 25 фев 2009, 19:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Слой Яндекс.Пробки

Сообщение svp » 27 мар 2009, 18:37

dsd_corp писал(а):подключить к паскаль-компилеру в SAS.Planet

Там не компилер, а интерпретатор.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.

След.

Вернуться в SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21