Клуб API Карт

обновление карты

mgrusik2010
29 июня 2009, 22:39

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

вот и сам скрипт:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Map</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=AG0yR0oBAAAAaeVyFAMApngd3BvopFv9h2iseQfujqIxjFgAAAAAAAAAAAA5QjXYJlrKf7S_V1zMumxjd0UoMA=="
type="text/javascript"></script>
<script type="text/javascript">
var map, geoResult;

window.onload = function () {
var map = new YMaps.Map(document.getElementById("YMapsID"));
map.setCenter(new YMaps.GeoPoint(35.018387,48.481746), 5);

map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.ScaleLine());

var bounds = map.getBounds(),
pointLb = bounds.getLeftBottom(),
span = bounds.getSpan();

}



function showinMap(koor){

var z = koor.indexOf(',');
var minlat = parseFloat(koor.substring(0, z));
var minlng = parseFloat(koor.substring(z+1,koor.length-1));


var t3latdeg = Math.floor(minlat / 100);
var t3latmin = (Math.floor(minlat) - Math.floor(Math.floor(minlat) / 100)*100) *100 / 60;
var t3latost = minlat - Math.floor(minlat);
var t3lat = t3latdeg+t3latmin /100 +t3latost/60;


var t3lngdeg = Math.floor(minlng / 100);
var t3lngmin = (Math.floor(minlng) - Math.floor(Math.floor(minlng) / 100)*100) *100 / 60;
var t3lngost = minlng - Math.floor(minlng);
var t3lng = t3lngdeg+t3lngmin/100 +t3lngost/60;



var map = new YMaps.Map(document.getElementById("YMapsID"));
map.setCenter(new YMaps.GeoPoint(t3lng,t3lat), 10);

var point = new YMaps.GeoPoint(t3lng,t3lat);
var placemark = new YMaps.Placemark(point);
map.addOverlay(placemark);


}
</script>
</head>

<body>
<b>$GPRMC,hhmmss.sss,A,xxxx.xxxx,N,yyyyy.yyyy,E,vv.vv,ccc.ccc,ddmmyy,g.g,W,A*hh</b><br><br>
Для просмотра местоположения объекта на спутниковой карте введите цифры соответствующие полям <b>xxxx.xxxx</b> и <b>yyyyy.yyyy</b> в приведенную ниже форму.
</p>
</div>

<form action="#" onsubmit="showinMap(this.koor.value); return false">
<p>
<input type="text" size="60" name="koor" value="xxxx.xxxx,yyyyy.yyyy" />
<input type="submit" value="Показать!" />

</p>
</form>

<div id="YMapsID" style="width:600px;height:400px"></div>


</body>

</html>



2 комментария
Подписаться на комментарии к посту
Вы создаете при каждом вызове функции showinMap() новый экземпляр карты.

Для того, чтобы этого избежать сделайте следующее:

1. Объявите карту как глобальную переменную. Для этого уберите на 5ой строчке var.

map = new YMaps.Map(document.getElementById("YMapsID"));

2. Закомментируйте 48 строчку.

 // var map = new YMaps.Map(document.getElementById("YMapsID"));

В документации есть подобный пример. Он Вам не подходит?
большое спасибо hevil!