Как нарисовать анимированные openLayers линейки пути?
Я использую openlaers map api. Я хочу отобразить на своем пути анимированный маршрут, например http://jer Jerusalem.com/map#!/tour/the_way_of_the_cross/location/abu_jaafar. Как это сделать? Спасибо.
Это мой Java Script, я получаю данные из XML-файла.
<script type="text/javascript">
var zoom=13
var map; //complex object of type OpenLayers.Map
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
// Define the map layer
// Here we use a predefined layer that will be kept up to date with URL changes
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
layerMarkers = new OpenLayers.Layer.Markers("Markers");
map.addLayer(layerMarkers);
// Add the Layer with the GPX Track
var lgpx = new OpenLayers.Layer.Vector("Descrizione del layer", {
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: "c.php",
format: new OpenLayers.Format.GPX()
}),
style: {strokeColor: "blue", strokeWidth: 5, strokeOpacity: 0.5},
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lgpx);
}
</script>
1 ответ
Попробуйте ответ в разделе Рисование анимированных дорожек линии вкладышей. Вроде бы очень похоже.
Вот важная часть ответа:
function drawAnimatedLine(startPt, endPt, style, steps, time, fn) { var directionX = (endPt.x - startPt.x) / steps; var directionY = (endPt.y - startPt.y) / steps; var i = 0; var prevLayer; var ivlDraw = setInterval(function () { if (i > steps) { clearInterval(ivlDraw); if (fn) fn(); return; } var newEndPt = new OpenLayers.Geometry.Point(startPt.x + i * directionX, startPt.y + i * directionY); var line = new OpenLayers.Geometry.LineString([startPt, newEndPt]); var fea = new OpenLayers.Feature.Vector(line, {}, style); var vec = new OpenLayers.Layer.Vector(); vec.addFeatures([fea]); map.addLayer(vec); if(prevLayer) map.removeLayer(prevLayer); prevLayer = vec; i++; }, time / steps); }
time
Аргумент указывает, как долго вы хотите, чтобы анимация длилась (в миллисекундах), иsteps
определяет, на сколько шагов вы хотите разделить анимацию.fn
это обратный вызов, который будет выполнен после завершения анимации.