#1 Thu 02 September 2010 08:16
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
[OpenLayers] changement de système de coordonnées
Bonjour,
J'ai un scan d'une carte marine (projection Mercator ED50 - EPSG 6859) que j'ajoute à une carte OpenLayers.
A cette carte, je veux également ajouter un layer de type vecteur contenant des points, les coordonnées des points au départ sont en ED50 (géographique) (EPSG 4230).
Je déclare donc ma carte avec le système de coordonnées EPSG 6859, j'affiche ma carte, elle est bien calée.
J'ajoute un event à ma carte pour avoir l'affichage de la position du curseur en degrés décimaux, voici le code :
Code:
map.events.register("mousemove", map, function(e) { var position = this.events.getMousePosition(e); var lonlat = map.getLonLatFromPixel(this.events.getMousePosition(e)); lonlat.transform(new OpenLayers.Projection("EPSG:6859"), new OpenLayers.Projection("EPSG:4230")); OpenLayers.Util.getElement("mapInfosPos").innerHTML = '' + Math.round(lonlat.lon*1000000)/1000000 + ', ' + Math.round(lonlat.lat*1000000)/1000000; });
Ca ça marche nickel.
de l'autre côté, je veux transformer les coordonnées de mes points en ED50 Mercator avant de les charger dans le layer pour les afficher, voici le code :
Code:
var pt = new OpenLayers.LonLat(-4.5363, 47.99785); pt.transform(new OpenLayers.Projection("EPSG:4230"), new OpenLayers.Projection("EPSG:6859")); alert(pt.lon+' '+pt.lat); features[0] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(pt.lon, pt.lat), {type: 5, name: "Dourduff"}); var points = new OpenLayers.Layer.Vector('Points', {styleMap: myStyles}); points.addFeatures(features); map.addLayer(points);
et ça, ça ne marche pas : quand je fais afficher les coordonnées du point transformé, il m'affiche les coordonnées de départ.
Qu'est ce qui cloche ?
Apparement, l'instruction :
Code:
lonlat.transform(new OpenLayers.Projection("EPSG:6859"), new OpenLayers.Projection("EPSG:4230"));
fonctionne, mais celle-ci :
Code:
pt.transform(new OpenLayers.Projection("EPSG:4230"), new OpenLayers.Projection("EPSG:6859"));
ne fonctionne pas, pourquoi ?
Merci,
Nico
Hors ligne
#2 Thu 02 September 2010 09:48
Re: [OpenLayers] changement de système de coordonnées
Bonjour,
Je pense que tu devrais ajouter la projection que tu utilises pour la couche vector :
Code:
var points = new OpenLayers.Layer.Vector('Points', {styleMap: myStyles, projection: new OpenLayers.Projection('EPSG:6859')});
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Thu 02 September 2010 10:08
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: [OpenLayers] changement de système de coordonnées
ça ne fait rien.
ça coince déjà au niveau de :
Code:
var pt = new OpenLayers.LonLat(-4.5363, 47.99785); pt.transform(new OpenLayers.Projection("EPSG:4230"), new OpenLayers.Projection("EPSG:6859")); alert(pt.lon+' '+pt.lat);
puisque l'instruction alert renvoie les coordonnées du point de départ (-4.5363, 47.99785), et non les coordonnées converties.
Nico
Hors ligne
#4 Thu 02 September 2010 10:38
Re: [OpenLayers] changement de système de coordonnées
Tu as un message d'erreur ?
As tu inclus la lib proj4js et les définitions des deux projections ?
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#5 Thu 02 September 2010 10:47
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: [OpenLayers] changement de système de coordonnées
j'ai téléchargé proj4js et copié dans l'arborescence de mon site, dans un répertoire nommé carto.
dans l'en-tête de ma page html, j'ai mis :
Code:
<script type="text/javascript" src="carto/proj4js-1.0.1/lib/proj4js.js"></script>
au début de mon javascript, j'ai mis :
Code:
Proj4js.defs["EPSG:6859"] = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs"; Proj4js.defs["EPSG:4230"] = "+proj=longlat +ellps=intl +no_defs";
il faut autre chose ?
Nico
Hors ligne