Как нарисовать анимированные 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 это обратный вызов, который будет выполнен после завершения анимации.

Другие вопросы по тегам