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é ?

Annonce

Printemps des cartes 2024

#1 Wed 22 April 2009 17:17

jim06200
Participant occasionnel
Date d'inscription: 6 Apr 2009
Messages: 28

OpenLayers 2.7 API google map rechercher une adresse geocodage

Bonjour à tous

Je chercher à faire une recherche d'adresse avec openlayers, etant donné que j'utilise les fonds google map je me suis dit que j'allé utiliser leur geocodage. Je me suis inspirer de cette exemple : http://econym.org.uk/gmap/example_geo.htm#

Mon probleme est de placer le marker et de centrer ma carte sur se marqueur car il ne se place pas au bonne endroit.

Code:

<script src="OpenSVN/lib/OpenLayers.js"></script>
<script src="proj4js/lib/proj4js.js"></script>

Code:

var p = result.Placemark[0].Point.coordinates;
              var proj = new OpenLayers.Projection("EPSG:4326");
            var point = new OpenLayers.LonLat(p[1],p[0]);            
            markers.addMarker(new OpenLayers.Marker(point));
            point.transform(proj,new OpenLayers.Projection("EPSG:900913") )
              map.setCenter(point,6);

Ma map est en mercator.

J'obtient les mêmes lon et lat que l'exemple de google mais le placement ne se fait pas ou il faut.

Pour paris j'obtient 48.858205, 2.294359 avant reprojection et lon=5438699.2581436,lat=261784.15650052 après.

Des idées?

Merci Jim

Hors ligne

 

#2 Wed 22 April 2009 17:44

René-Luc D'Hont
Participant assidu
Date d'inscription: 7 Nov 2006
Messages: 328
Site web

Re: OpenLayers 2.7 API google map rechercher une adresse geocodage

Tu dois faire la transformation avant toute utilisation du point :

Code:

var p = result.Placemark[0].Point.coordinates;
var proj = new OpenLayers.Projection("EPSG:4326");
var point = new OpenLayers.LonLat(p[1],p[0]);
point.transform(proj,new OpenLayers.Projection("EPSG:900913") );
markers.addMarker(new OpenLayers.Marker(point));
map.setCenter(point,6);

Si ça ne fonctionne pas, j'aurais besoin du code permettant de créer la carte.

Hors ligne

 

#3 Wed 22 April 2009 18:14

jim06200
Participant occasionnel
Date d'inscription: 6 Apr 2009
Messages: 28

Re: OpenLayers 2.7 API google map rechercher une adresse geocodage

Merci pour ta réponse

Malheuresement mon point ne s'affiche toujours pas ou il faut sad

Voici le code de ma carte :

Code:

var options = {
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            units: "m",
            maxResolution: 'auto',
            numZoomLevels: 9,                
                        maxExtent: new OpenLayers.Bounds(-20037508, -20037508,20037508, 20037508.34)
            
            };
            
        map = new OpenLayers.Map('map',options);

Et voila le code de la fonction qui fait la recherche (dans le body de la page):

Code:

 // ====== Create a Client Geocoder ======
      var geo = new GClientGeocoder(); 

      // ====== Array for decoding the failure codes ======
      var reasons=[];
      reasons[G_GEO_SUCCESS]            = "Success";
      reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
      reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
      reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
      
     
      
             // ====== Geocoding ======
      function showAddress() {
      var markers=new OpenLayers.Layer.Markers('Marqueurs');
            map.addLayer(markers);
        var search = document.getElementById("search").value;
        // ====== Perform the Geocoding ======        
        geo.getLocations(search, function (result)
          { 
            // If that was successful
            if (result.Status.code == G_GEO_SUCCESS) {
              // How many resuts were found
              document.getElementById("message").innerHTML = "Found " +result.Placemark.length +" results";
              // Loop through the results, placing markers
              for (var i=0; i<result.Placemark.length; i++) {
                var p = result.Placemark[i].Point.coordinates;
                alert(p[1]+","+p[0]);
                var marker = new GMarker(new GLatLng(p[1],p[0]));
                document.getElementById("message").innerHTML += "<br>"+(i+1)+": "+ result.Placemark[i].address + marker.getPoint();
               // map.addOverlay(marker);
              }
              // centre the map on the first result
              var p = result.Placemark[0].Point.coordinates;
             var proj = new OpenLayers.Projection("EPSG:4326");
            var point = new OpenLayers.LonLat(p[1],p[0]);
            point.transform(proj,new OpenLayers.Projection("EPSG:900913") );
            markers.addMarker(new OpenLayers.Marker(point));
            map.setCenter(point,6);
            
            //alert(point);
            //markers.addMarker(new OpenLayers.Marker(point));
            //point.transform(map.displayProjection,map.projection )
            //  map.setCenter(point,6);
              alert(point);
            }
            // ====== Decode the error status ======
            else {
              var reason="Code "+result.Status.code;
              if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
              } 
              alert('Could not find "'+search+ '" ' + reason);
            }
          }
        );
    }

Je ne sais pas se que renvoie l'API google pour les lat lon deonc j'ai supposé que c'était du WGS84.

Jim

Hors ligne

 

#4 Wed 22 April 2009 18:29

René-Luc D'Hont
Participant assidu
Date d'inscription: 7 Nov 2006
Messages: 328
Site web

Re: OpenLayers 2.7 API google map rechercher une adresse geocodage

Je te propose un code plus simple :

var map, markers;

Code:

function main() {
  var options = {
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            units: "m",
            maxResolution: 'auto',
            numZoomLevels: 18,                
            maxExtent: new OpenLayers.Bounds(-20037508, -20037508,20037508, 20037508.34)
        };  
        map = new OpenLayers.Map('map',options);
        
        markers=new OpenLayers.Layer.Markers('Marqueurs');
        map.addLayer(markers);
}

fucntion showAddress() {
  var address = document.getElementById("search").value;
  var geocoder = new GClientGeocoder();
  if (geocoder) {
    geocoder.getLatLng(
        address,
        function(point) {
          if (!point) {
            alert("Adresse inconnue.");
          } else {
             var lonlat = new OpenLayers.LonLat(point.x,point.y);
             lonlat.transform(map.displayProjection,map.projection);
             markers.addMarker(new OpenLayers.Marker(lonlat.clone()));
             map.setCenter(lonlat,6);
          }
        });
}

Ce code fonctionne puisque c'est celui que j'utilise régulièrement.

Hors ligne

 

#5 Wed 22 April 2009 20:48

jim06200
Participant occasionnel
Date d'inscription: 6 Apr 2009
Messages: 28

Re: OpenLayers 2.7 API google map rechercher une adresse geocodage

Merci beaucoup cela marche parfaitement!

Je vais essayer d'adapter mon code avec le votre plus tard.

Encore merci!

Jim

Resolu

Hors ligne

 

Pied de page des forums

Powered by FluxBB