Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display a track on a layer with lat and long

i just want to show a track on my map i tried as follow but the problem is i don't want to load track point in layer from GPX File (because i don't want to generate file from coordinates witch i get from GPSdevice programmatically)

is there any way to add a track layer from long and lat

// Add the Layer with the GPX Track
var lgpx = new OpenLayers.Layer.Vector("Car track", {
    strategies: [new OpenLayers.Strategy.Fixed()],
    protocol: new OpenLayers.Protocol.HTTP({
        url: "testTrack.GPX",
        format: new OpenLayers.Format.GPX()
    }),
    style: { strokeColor: "green", strokeWidth: 5, strokeOpacity: 0.5 },
    projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lgpx);

Here is the lat and long in GPX file(xml format)

<?xml version="1.0" encoding="UTF-8"?>
    <gpx version="1.0">
    <name>Example gpx</name>
    <trk><name>Example gpx</name><number>1</number>
    <trkseg>
        <trkpt lat="35.737097" lon="51.314965"></trkpt>
        <trkpt lat="35.736953" lon="51.317454"></trkpt>
        <trkpt lat="35.737572" lon="51.317551"></trkpt>
        <trkpt lat="35.737755" lon="51.315716"></trkpt>
        <trkpt lat="35.739588" lon="51.316070"></trkpt>
    </trkseg>
    </trk>
 </gpx>
like image 318
Hossein Salmanian Avatar asked May 11 '15 20:05

Hossein Salmanian


1 Answers

i've found the solution ,here it is

        lineLayer = new OpenLayers.Layer.Vector("Line Layer");
        map.addLayer(lineLayer);
        map.addControl(new OpenLayers.Control.DrawFeature(lineLayer, OpenLayers.Handler.Path));

    var coordinates = [
        { lat: "35.737097", lon: "51.314965" },
        { lat: "35.736953", lon: "51.317454" },
        { lat: "35.737572", lon: "51.317551" },
        { lat: "35.737755", lon: "51.315716" },
        { lat: "35.739588", lon: "51.316070" }
    ];
function DrawTrack(){
        var points = coordinates.map(function (cor) {
            return new OpenLayers.Geometry.Point(cor.lon, cor.lat)
                             .transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
        });

        var style = {
            strokeColor: '#0000ff',
            strokeOpacity: 0.5,
            strokeWidth: 5
        };

        for (var i = 0; i < points.length - 1; i++) {

            (function (i) {

                window.setTimeout(function () {
                    var line = new OpenLayers.Geometry.LineString([points[i], points[i + 1]]);
                    var lineFeature = new OpenLayers.Feature.Vector(line, null, style);
                    lineLayer.addFeatures([lineFeature]);

                    map.setCenter(points[i].lon, points[i].lat);

                }, i * 1000);

            }(i));
        }
}
like image 64
Hossein Salmanian Avatar answered Nov 18 '22 06:11

Hossein Salmanian