Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

google maps - трек по координатам [D7, XP]


Страницы:   1 2

gvozdkoff ©   (2012-01-19 16:27:00) 

Здравствуйте, нужна помощь специалистов, возник вопрос.
работаю с компонентом TWebBrowser  и выполняю со страницы Javaскрипт.
Так вот загвоздка в том что не могу до конца сочинить java скрипт который бы рисовал трек по координатам.
Вот что у меня есть.
//отрывок из сттраницы

const
HTMLStr: AnsiString =
'<html> '+
'<head> '+
'  function DrawTrack(LatLng) { '+    
//здесь я пытаюсь объявить функцию рисования трека, который строится вобщем то по координатам (чтобы был трек нужно минимум 2 координаты)              
'   var LatLng = new google.maps.LatLng(Lat,Lang);'+
//LatLng  это переменная которая теоретически содержит координаты
Lat - координата  северной широты
Lng- координата  северной широты  
'    var Track = new google.maps.Polyline({ '+ //здесь обявляю переменную и даю ей понять что она будет треком (линией) присваиваю какие о параметры
цвет , ширина линии и т.д
'      path: LatLng,  '+  //здесь указываю откуда брать значения для переменной
'      strokeColor: "#FF0000",  '+
'      strokeOpacity: 1.0,    '+
'      strokeWeight: 2    '+
'    });'+
'   Track.setMap(map);  '+ вывожу на карту


Так якобы вызываю скрипт

for i:=0 to ListView2.Items.Count -1 do
begin
HTMLWindow2.execScript(Format('DrawTrack(%s)',[ListView2.Selected.Caption+','+ListView2.Selected.SubItems[0]]), 'JavaScript')

Координаты хранят в листитеме
Код заранее не рабочий, не доделан до конца. это чисто рассуждения, не могу понять где неправильно, подскажите пожалуйста


Медвежонок Пятачок   (2012-01-20 15:36:00) [1]

Уже и так пробовал
geo_path =[%s,s])


А причем здесь текст скрипта?
Ошибка то не его, а делфийская. Формату твоему не хватает элемента в массиве для очередного %s


gvozdkoff   (2012-01-20 15:13:00) [2]

Уважаемые мастера, правильно ли понял,
когда  есть заполненый координатами массив, то массив geo_path будет таким(выделен жирным )
var geo_path = new Array();
  var geo_path = [
       new google.maps.LatLng(-18.142599, 178.431),
 new google.maps.LatLng(-27.46758, 153.027892)        
  ];

  var Track = new google.maps.Polyline({
    path: geo_path,
    strokeColor: "#FF0000",
    strokeOpacity: 1.0,
    strokeWeight: 2
  });


А в случае если нет координат, то есть загружается стандартный   google map, массив будет таким ?
   var geo_path = [
new google.maps.LatLng(Lat, Lng)
];


gvozdkoff   (2012-01-20 14:41:00) [3]

как то не получается, уже всяко разно пробовал

что тут есть аргумент для %s
Как я понял. то это одна из координат, первая -широта , вторая долгота
Так вроде и даю аргументы
Уже и так пробовал
geo_path =[%s,s])
случайно попробовал с одной %s, ошибка исчезла, но не рисуется линия никак ((


Медвежонок Пятачок   (2012-01-20 13:42:00) [4]

ну так дай ему аргумент


gvozdkoff   (2012-01-20 13:34:00) [5]

написал
 
 listview2.MultiSelect:=true;
 listview2.SelectAll;

хм.. щас выскакивает ошибка
No argument  for format %s


gvozdkoff   (2012-01-20 13:10:00) [6]

ах тыж..., спасибо большое,   то есть в строке указано для выбранных элементов, сейчас попробую выбрать весь listview2, listview2.SelectAll;


Медвежонок Пятачок   (2012-01-20 12:54:00) [7]

listview2.selected = nil or listview2.selected.subitems = nil or listview2.selected.subitems[0] = nil


gvozdkoff   (2012-01-20 11:21:00) [8]

понимаю что ошибка в строке
HTMLWindow2.execScript(Format('geo_path =[new google.maps.LatLng(%s,%s)])',[ListView2.Selected.Caption+','+ListView2.Selected.SubItems[0]]), 'JavaScript');


gvozdkoff   (2012-01-20 11:05:00) [9]

Решил сделать так, чтобы в компонент TWebBrowser,  подгружалась статическая html страница
  WebBrowser1.Navigate('85.143.50.133/gps/g-m.html');
   if Assigned(WebBrowser1.Document) then

     HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;


А вот и сам код страницы
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps</title>
<link href=" http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">

 function initialize() {
   var myLatLng = new google.maps.LatLng(0, -180);
   var myOptions = {
     zoom: 3,
     center: myLatLng,
     mapTypeId: google.maps.MapTypeId.TERRAIN
   };
   var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var geo_path = new Array();
   var geo_path = [
        new google.maps.LatLng(-18.142599, 178.431),
  new google.maps.LatLng(-27.46758, 153.027892)        
   ];
   var Track = new google.maps.Polyline({
     path: geo_path,
     strokeColor: "#FF0000",
     strokeOpacity: 1.0,
     strokeWeight: 2
   });
Track.setMap(map);  
 }
</script>
</head>
<body onload="initialize()">
 <div id="map_canvas"></div>
</body>
</html>

Получилось сделать без функции для полилайна
Скрипт работает, трек виден,
Но теперь другой вопрос, а как добавить координаты из листитема, широта и долгота хранятся в 2-ух разных столбцах.
пробовал так

for i:=0 to ListView2.Items.Count -1 do
HTMLWindow2.execScript(Format('geo_path =[new google.maps.LatLng(%s,%s)])',[ListView2.Selected.Caption+','+ListView2.Selected.SubItems[0]]), 'JavaScript');

при этом пишет ошибку Access violation at address


gvozdkoff   (2012-01-20 10:52:00) [10]


> DVM ©

Спасибо, много интересного


DVM   (2012-01-19 23:26:00) [11]


> gvozdkoff   (19.01.12 16:27) 
> Здравствуйте, нужна помощь специалистов, возник вопрос.
> работаю с компонентом TWebBrowser  и выполняю со страницы
> Javaскрипт.
> Так вот загвоздка в том что не могу до конца сочинить java
> скрипт который бы рисовал трек по координатам.

Очень советую поглядеть на обертку к гуглмапс апи вот от этого немца http://www.delphipraxis.net/157004-google-maps-ueber-com-component-object-model.html


Медвежонок Пятачок   (2012-01-19 19:46:00) [12]

да не суть в общем. главное статический скрипт + данные, а не программа, пишущая текст другой программы


sniknik   (2012-01-19 19:40:00) [13]

> пиши скрипт в блокноте
ну... я к примеру предпочитаю HTMLPad, а как отладчик яваскрипта мозиловксий плагин Firebug. и посоветовал бы лучше их.


sniknik   (2012-01-19 19:38:00) [14]

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


gvozdkoff   (2012-01-19 18:15:00) [15]

неее, похоже я туплю


gvozdkoff   (2012-01-19 18:08:00) [16]

да мне бы с этим справиться для начала, а потом оптимизировать, правильный вид придавать )
А еще вопросик, вместо

geo_path.push(new google.maps.LatLng(1,2));

можно ведь сделать запись такого вида
если  переменная определена
var LatLng = new google.maps.LatLng(Lat,Lang);'+
то , получается
geo_path.push(LatLng )
или это некорректно будет
а в свою очередь LatLng будет такого типа (12.345, 76.8910) -даные из листитема


Медвежонок Пятачок   (2012-01-19 17:53:00) [17]

совет:

не пиши программу на делфи, которая напишет программу на яваскрипте.

пиши скрипт в блокноте, и передай ему данные через json

а то, что ты делаешь очень сильно немного похоже на следующее:

в в левой руке у тебя молоток, в правой - утюг.
утюгом ты долбишь по молотку, чтобы тот забивал гвоздь, который ты держишь зубами.


Медвежонок Пятачок   (2012-01-19 17:47:00) [18]

var geo_path = new Array();

geo_path.push(new google.maps.LatLng(1,2));
geo_path.push(new google.maps.LatLng(3,4));
geo_path.push(new google.maps.LatLng(5,6));
geo_path.push(new google.maps.LatLng(7,8));

var track = new google.maps.Polyline({
path: geo_path,
......


gvozdkoff   (2012-01-19 17:45:00) [19]

блииин, path же будет массивом


gvozdkoff   (2012-01-19 17:44:00) [20]

)) да похоже так. не могу сообразить

в начале объявил массив
'  var LatLng = [];'+
пустой массив


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо