Вот что писал Ivanius на л2бот форуме:
Очень часто поступает вопрос о том, как перемещаться с помощью встроенного GPS?
Для начала общая логика: есть некая база маршрутов (есть дефолтная qpath.db3, но вы так же можете делать свои маршруты), если ее загрузить, то можно бегать автоматически в любую точку. Adrenalin сам будет рассчитывать оптимальный путь, исходя из текущего месторасположения.
Таким образом:
1. Загружаем базу в начале скрипта (1 раз) командой:
function LoadBase(const FilePath: String): Integer; // Загрузка базы GPS
Gps.LoadBase(exepath+'\qpath.db3'); // Либо название своей базы
2. Используем готовую функцию движения, приведенную ниже, либо пишем свою по аналогии:
function gps_moveto(x, y, z: integer): boolean; // GPS движение
var dist: integer; i: integer;
begin
dist:= trunc(GPS.GetPath((user.x), (user.y), (user.z), (x),
![Thumbs up (y) (y)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
, (z)));
engine.msg('[gps_moveto]',format('Бегу в точку %d (x=%d y=%d z=%d), дистанция: %d м',[i,x,y,z,dist]), 4210752);
if (GPS.count > 0) then
begin
for i:= 0 to GPS.count-1 do
begin
{engine.msg('[gps_moveto]',format('Бегу в точку %d (x=%d y=%d z=%d), дистанция: %d м',
[i,trunc(GPS.items(i).x), trunc(GPS.items(i).y), trunc(GPS.items(i).z),Distance(trunc(GPS.items(i).x), trunc(GPS.items(i).y), trunc(GPS.items(i).z),(user.x), (user.y), (user.z))]), 4210752);}
if not Engine.MoveTo(trunc(GPS.items(i).x), trunc(GPS.items(i).y), trunc(GPS.items(i).z)) then
begin
engine.msg('[gps_moveto]',format('Ошибка при движении в точку № %d : (%d, %d, %d)',[i,trunc(GPS.items(i).x), trunc(GPS.items(i).y), trunc(GPS.items(i).z)]), 222);
result:= false;
break;
end;
end;
result:= Engine.MoveTo(x, y, z) or (user.distto(x, y, z) < 150);
end
else engine.msg('[gps_moveto]','Не смог найти нужный маршрут', 128);
end;
Все вместе выглядеть это будет примерно следующим образом:
Код:
begin
Gps.LoadBase(exepath+'\qpath.db3');
// code...
gps_moveto(25200, 10680, 827); // Бежать в указанную точку с помощью GPS
end.