Skail
October 21, 2011, 7:26am
1
Привет, столкнулся с проблемой перерисовки вектора, вот код, но он не рабочий, в чем ошибка?
<html>
<head>
<title>OpenLayers Example</title>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script defer="defer" type="text/javascript">
function init()
{
var map = new OpenLayers.Map('map');
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", {layers: 'basic'});
map.addLayer(layerMapnik);
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
map.setCenter(new OpenLayers.LonLat(104,52) // Центр карты
.transform(
new OpenLayers.Projection("EPSG:4326"), // преобразование из WGS 1984
new OpenLayers.Projection("EPSG:900913") // в Spherical Mercator Projection
), 12 // Уровень масштаба
);
map.addControl(new OpenLayers.Control.LayerSwitcher());
var vectorLayer = new OpenLayers.Layer.Vector("Overlay");
var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(104, 52).transform(
new OpenLayers.Projection("EPSG:4326"), // преобразование из WGS 1984
new OpenLayers.Projection("EPSG:900913")) // в Spherical Mercator Projection
,
{some:'data'},
{externalGraphic: 'tram.png', graphicHeight: 21, graphicWidth: 16, rotation: 90});
vectorLayer.addFeatures([feature]);
map.addLayer(vectorLayer);
new_vector();
}
</script>
<script type="text/javascript">
function new_vector()
{
var lon = 102;
var lat = 53;
var newPoint = new OpenLayers.LonLat(lon, lat).transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913"));
feature.geometry.x = lonlat.lon;
feature.geometry.y = lonlat.lat;
feature.style.rotation = 45;
feature.move(newPoint);
}
</script>
</head>
<body onload = 'init()'>
<div style="width:600px; height:600px" id="map"></div>
</body>
</html>
Дак вы добавьте vectorLayer.drawFeture(feature), ну и я документацию по леерсам точно не помню, но мне кажется move принимает на сколько подвинуть а не куда, и вроде как не LonLat
Skail
October 21, 2011, 8:00am
3
Не работает, изменил на
<script type="text/javascript">
function new_vector()
{
var lon = 102;
var lat = 53;
var newPoint = new OpenLayers.LonLat(lon, lat).transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913"));
feature.geometry.x = lonlat.lon;
feature.geometry.y = lonlat.lat;
feature.style.rotation = 45;
vectorLayer.drawFeture(feature);
}
</script>
А ошибки пишет?
vectorLayer разве доступен внутри new_vector, там же вроде для этого надо ее либо как глобальную объявлять либо new_vector объявлять внутри init
Хотя в вопросе областей видимости в js - я не спец.
Skail
October 21, 2011, 8:22am
5
Нет, ошибок не пишет, и вектор остается на месте старых координат.
Я если даже функцию new_vector() переношу в главную функцию всё равно не работает
<html>
<head>
<title>OpenLayers Example</title>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script defer="defer" type="text/javascript">
function init()
{
var map = new OpenLayers.Map('map');
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", {layers: 'basic'});
map.addLayer(layerMapnik);
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
map.setCenter(new OpenLayers.LonLat(104,52) // Центр карты
.transform(
new OpenLayers.Projection("EPSG:4326"), // преобразование из WGS 1984
new OpenLayers.Projection("EPSG:900913") // в Spherical Mercator Projection
), 12 // Уровень масштаба
);
map.addControl(new OpenLayers.Control.LayerSwitcher());
var vectorLayer = new OpenLayers.Layer.Vector("Overlay");
var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(104, 52).transform(
new OpenLayers.Projection("EPSG:4326"), // преобразование из WGS 1984
new OpenLayers.Projection("EPSG:900913")) // в Spherical Mercator Projection
,
{some:'data'},
{externalGraphic: 'tram.png', graphicHeight: 50, graphicWidth: 50, rotation: 90});
vectorLayer.addFeatures([feature]);
map.addLayer(vectorLayer);
var lon = 102;
var lat = 53;
var newPoint = new OpenLayers.LonLat(lon, lat).transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913"));
feature.geometry.x = lonlat.lon;
feature.geometry.y = lonlat.lat;
feature.style.rotation = 45;
vectorLayer.drawFeture(feature);
new_vector();
}
</script>
<script type="text/javascript">
function new_vector()
{
}
</script>
</head>
<body onload = 'init()'>
<div style="width:600px; height:600px" id="map"></div>
</body>
</html>
Тогда и не знаю даже, а redraw у слоя не помогает?
Skail
October 21, 2011, 12:46pm
7
А где использовать redraw?
vectorLayer.drawFeture(feature);
vectorLayer.redraw();
Skail
October 24, 2011, 12:08am
9
Не, не помогло. Вот нашел пример, только ни как не могу разобрать с ним…
http://kestrelcomputer.com/MovingMarkers/MoveMarkers.html
Чета они у меня не движутся нифига.
Skail
October 24, 2011, 6:15am
11
А ты какой браузер используешь? Я Chrome, жмешь там на кнопку тест и они двигаться начинают.
Skail
October 24, 2011, 6:27am
12
Все, разобрался. Спасибо dkiselev.
Вот решение:
var newPoint = new OpenLayers.LonLat(x, y).transform(
new OpenLayers.Projection("EPSG:4326"), // преобразование из WGS 1984
new OpenLayers.Projection("EPSG:900913"));
feature.attributes.angle = angle;
feature.move(newPoint);
Черт, кнопку Start Test то я и не приметил