Pages: 1
- Sujet précédent - OpenLayers 2.7 API google map rechercher une adresse geocodage - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - OpenLayers 2.7 API google map rechercher une adresse geocodage - Sujet suivant