Changeset 69207 in spip-zone


Ignore:
Timestamp:
Jan 22, 2013, 6:04:11 PM (7 years ago)
Author:
jean-marc.viglino@…
Message:

[BUG] Erreur de calcul de distance sur les traces

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip_geoportail/js/geoprofil.js

    r64928 r69207  
    235235        }
    236236
     237        /** Calcul de grand cercle (en m) */
     238        this.gdCercle = function (lon1,lat1,lon2,lat2)
     239        {       var R = 6371000; // Rayon de la terre
     240                var toRad = Math.PI/180;
     241               
     242                var dLat = (lat2-lat1) * toRad;
     243                var dLon = (lon2-lon1) * toRad;
     244                var lat1 = lat1 * toRad;
     245                var lat2 = lat2 * toRad;
     246
     247                var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
     248                                Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
     249                               
     250                return 2 * R * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
     251        }
     252       
    237253        /** Extraction d'une trace dans un GPX */
    238254        this.extractTrk = function (format, segment, node)
     
    241257        var dmax = 0;
    242258        var zmax=null, zmin=1000000000;
    243         // Terre ronde de rayon 6371km
    244         var rayon_terre = 6371000/360*3.1415927 ;
    245259        var len = points.length;
    246260        for (var i=0; i < len; i++)
     
    251265                        zmin = Math.min (zmin,z);
    252266                        zmax = Math.max (zmax,z);
    253                         var pt = new OpenLayers.Geometry.Point(points[i].getAttribute("lon"), points[i].getAttribute("lat"));
    254             point_features.push({'pt':pt,'z':z, 't':t});
     267                        var lon = Number(points[i].getAttribute("lon"));
     268                        var lat = Number(points[i].getAttribute("lat"));
     269                        var pt = new OpenLayers.Geometry.Point(lon,lat);
     270            point_features.push({'pt':pt,'z':z, 't':t, 'lon':lon, 'lat':lat});
    255271            if (i==0) point_features[i]['d']=0;
    256272            else
    257             {   dmax += rayon_terre * Math.sqrt(
    258                                  Math.pow(pt.x-point_features[i-1]['pt'].x,2)
    259                                 +Math.pow(pt.y-point_features[i-1]['pt'].y,2)
    260                                 );
     273            {   dmax += this.gdCercle (lon,lat, point_features[i-1].lon, point_features[i-1].lat);
    261274                                point_features[i]['d'] = dmax;
    262275            }
Note: See TracChangeset for help on using the changeset viewer.