Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Sun 28 July 2013 14:51

araking
Participant actif
Date d'inscription: 8 Jul 2013
Messages: 83

[openlayers] mesure distance

Bonjour,
J'essaye d'ajouter une fonctionalité qui calcule une distance entre 2 pts quand j'ajoute mon code à la fonction init() rien en se passe alors dehors de init() il me renvoie une erreur map is undfined

Code:

measureControl = new OpenLayers.Control.Measure(
    OpenLayers.Handler.Path,
    {
        immediate: true,
        persist: true
    }
);  

var lastMeasure = 0.0;

function measurementToolActivated() {
    lastMeasure = 0.0;
}

function handleFinalMeasurement(event) {
    var units = event.units;
    var measure = event.measure;
    var out = "measure: " + measure.toFixed(3) + " " + units;
    if (lastMeasure > 0) {
        out += "    last segment: " + (measure-lastMeasure).toFixed(3) + " " + units;
    }
    lastMeasure = 0.0;  
    $('#Message').html(out);
}

function handlePartialMeasurement(event) {
    var units = event.units;
    var measure = event.measure;
    var out = "measure: " + measure.toFixed(3) + " " + units;
    if (lastMeasure > 0) {
        out += "    last segment: " + (measure-lastMeasure).toFixed(3) + " " + units;
    }
    lastMeasure = measure;
    $('#Message').html(out);
}

map.addControl(measureControl);
measureControl.events.on({
        "measure": handleFinalMeasurement,
        "measurepartial": handlePartialMeasurement,
        "activate": measurementToolActivated
    });

Hors ligne

 

#2 Sun 28 July 2013 19:09

araking
Participant actif
Date d'inscription: 8 Jul 2013
Messages: 83

Re: [openlayers] mesure distance

pas de réponse smile ?

Hors ligne

 

#3 Tue 30 July 2013 14:11

gallab
Participant occasionnel
Lieu: Marseille
Date d'inscription: 28 May 2010
Messages: 19

Re: [openlayers] mesure distance

Bonjour,
D'après le code j'en déduit :

1) Qu'il vous faut un élément ayant pour id 'Message' dans le code HTML qui reçoit la valeur retourné par :  $('#Message').html(out);
2) qu'il vous faut (probablement) rajouter un lien vers la bibliothèque jQuery pour prendre en compte le sélecteur $

sinon pr "map is undefined" => si vous placez le code suivant en dehors de la procédure d'init() de la carte,
l'objet map n'étant pas encore instancié il ne sera pas référencé et vous ne pourrait pas lui appliquer la méthode addControl.

Code:

map.addControl(measureControl);

de plus il me semble qu'il vous faudrait activer le controle, sinon ça marche pas :
measureControl.activate();

voilà mon code :

http://jsfiddle.net/NKPR4/


Gallien

Hors ligne

 

#4 Wed 31 July 2013 16:15

araking
Participant actif
Date d'inscription: 8 Jul 2013
Messages: 83

Re: [openlayers] mesure distance

Bonjour merci pour ces excellentes réponses j'ai testé votre code et il fonctionne bien  mais je voudrais faire un chekbox qui me permet de naviguer ou claculer des distances ou des surfaces dans la partie init () j'ai écrit

Code:

      var option = {
                    displayUnits: 'km',
                    handlerOptions: {
                            immediate:true,
                        persist: false
                    }
                };
           var circleOptions = {
                    displayUnits: 'km',
                    handlerOptions: {
                        sides: 35,
                            immediate:true,
                        persist: false
                    }
                };
                measureControls = {
                    line: new OpenLayers.Control.Measure(
                       OpenLayers.Handler.Path, option
                     ),
                     polygon: new OpenLayers.Control.Measure(
                         OpenLayers.Handler.Polygon, option
                     ),
                     circle: new OpenLayers.Control.Measure(
                         OpenLayers.Handler.RegularPolygon, circleOptions
                     )
                  };
                
                  var control;
                 for(var key in measureControls) {
                     control = measureControls[key];
                     control.onMeasure = handleMeasurements;
                     map.addControl(control);
                 }
                
                 map.setCenter(new OpenLayers.LonLat(0, 0), 3);
               
                document.getElementById('noneToggle').checked = true;

en dehors

Code:

function handleMeasurements(geometry, length, area, units) {
            var element = document.getElementById('output');
                var out = "";
                if(geometry.CLASS_NAME == "OpenLayers.Geometry.LineString") {
                 out += "length: " + length.toFixed(3) + " " + units;
                 } else {
                     out += "perimeter: " + length.toFixed(3) + " " + units + "<br />";
                     out += "area: " + area.toFixed(3) + " " + units + "<sup>2</" + "sup>";
                }

                element.innerHTML = out;
                    
            }
    
            function toggleControl(element) {
                for(key in measureControls) {
                    var control = measureControls[key];
                    if(element.value == key && element.checked) {
                        control.activate();
                    } else {
                        control.deactivate();
                    }
                }
            }

pour la partie html

Code:

<p id="shortdesc">
            Demonstrates the measure control to measure distances and areas.
    </p>
        <div id="map" class="smallmap">
             <p id="Message">test</p>
</div>
         <div id="options">
            <div id="output">
            </div>
            <ul id="controlToggle">
                <li>
                    <input type="radio" name="type" value="none"     id="noneToggle"
                           onclick="toggleControl(this);" checked="checked" />
                    <label for="noneToggle">navigate</label>
                </li>
                <li>
                    <input type="radio" name="type" value="line" id="lineToggle" onclick="toggleControl(this);" />
                    <label for="lineToggle">draw line</label>
                </li>
                <li>
                    <input type="radio" name="type" value="polygon" id="polygonToggle" onclick="toggleControl(this);" />
                    <label for="polygonToggle">draw polygon</label>
                </li>
                <li>
                    <input type="radio" name="type" value="circle" id="circleToggle" onclick="toggleControl(this);" />
                    <label for="circleToggle">draw circle</label>
                </li>
            </ul>
        </div>

firebug ne retourne aucune erreur mais le problème qu'aucune mésure ne s'affiche

Dernière modification par araking (Wed 31 July 2013 16:17)

Hors ligne

 

Pied de page des forums

Powered by FluxBB