#1 Wed 03 December 2008 11:53
- saturn
- Juste Inscrit !
- Date d'inscription: 3 Dec 2008
- Messages: 4
[Openlayers] France apaltie :-(
Bonjour à tous !
Dans le cadre de mon asso, je souhaiterais mettre en place une carte de France des spot de kite.
Pour cela, j'ai récupéré la carte de france au format svg, issue de wikipedia, modifiée puis convertie en png, que j'ai calibrée et utilisée avec openlayers.
A partir de cela, je peux ajouter sur ma carte des point à partir de leurs coordonnées gps.
Tout cela fonctionne très bien sauf, que ma france est toute aplatie :-(
J'ai essayer de modifier le maxExtent, mais rien n'y fait, j'ai certainement zappé une donnée.
Please help me :-(
Voila le lien vers cette petite appli :
http://kitedor.info/tests/
Merci d'avance pour votre aide.
Antoine.
Hors ligne
#2 Wed 03 December 2008 12:00
Re: [Openlayers] France apaltie :-(
Bonjour Antoine,
Rien d'anormal, tu utilises un système géographique (WGS84, latitude / longitude) et pas un système projeté. Donc c'est normal, si tu veux avoir une France pas trop applati il te faudra reprojeter ta carte en un système de projection NTF/lambert 2 étendue. Maintenant est ce vraiment problématique ? Car cela te demandera un peu de travail : définir ta carte dans la bonne projection et reprojeter tes données à la volée (ce que fait très bien OpenLayers).
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 Wed 03 December 2008 12:13
- saturn
- Juste Inscrit !
- Date d'inscription: 3 Dec 2008
- Messages: 4
Re: [Openlayers] France apaltie :-(
Bonjour Yves et merci pour ta réponse rapide.
J'ai bien compris que dès lors que je calibre ma carte avec OpenLayers.Bounds afin d'y afficher correctement les points via leur coordonnes GPS, cela modifie l'aspect de cette carte. Openlayers ne tient alors plus compte (pour l'affichage) de OpenLayers.Size
Est-ce que cela signifie qu'il n'est pas possible d'une façon simple, d'afficher ma carte telle qu'elle est à l'origine en utilisant openlayers afin d'y ajouter mes points via leurs coordonnes GPS ?
PS: l'aspect de la carte est effectivement un point important et je dis autant que possible me rapprocher de la réalité.
Merci pour tout.
Antoine.
Hors ligne
#4 Wed 03 December 2008 12:28
Re: [Openlayers] France apaltie :-(
PS: l'aspect de la carte est effectivement un point important et je dis autant que possible me rapprocher de la réalité.
Quelle réalité ? Le globe n'est pas plan tu auras du mal à l'afficher en 2d Tout ceci pour revenir à mon premier message, la France que tu affiches est une réalité (mais dans système géographique). Ce que tu montre à partir du site de wikipedia est certainement dans un système non projeté (un simple dessin) dont la source pourrait être en lambert 2 étendue (système projeté).
Donc si tu veux avoir une France plus proche de ce qui est représenté sur l'image que tu as données, il faut définir la projection dans OL à EPSG:27572, modifier en conséquence les coordonnées de la carte ainsi que celle des points.
Pour transformer des points :
Code:
lonlat.transform(new OpenLayers.Projection('EPSG:4326'),new OpenLayers.Projection('EPSG:27572'));
Pour définir une projection autre que celle que tu utilises, rajouter dans la variable options de la carte :
Code:
projection: new OpenLayers.Projection("EPSG:27572"), units: 'm',
Il est possible que cela ne soit pas suffisant.
Tu peux aussi faire en sorte que les coordonnées affichées (je dis bien affiché) soient en WGS84 (ie latitude / longitude), tu trouveras la fonction dans un message de René-Luc D'hont dans un thread de ce même forum
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 Wed 03 December 2008 12:51
- saturn
- Juste Inscrit !
- Date d'inscription: 3 Dec 2008
- Messages: 4
Re: [Openlayers] France apaltie :-(
Merci milles fois Yves, j'essaye tout cela de suite, et notifierais du resiltat de cela dans ce thread.
Hors ligne
#6 Wed 03 December 2008 13:31
Re: [Openlayers] France apaltie :-(
Tout ceci pour revenir à mon premier message, la France que tu affiches est une réalité (mais dans système géographique).
Je me dois de contredire Yves, car afficher sur un plan des données en coordonnées géographiques n'est en aucune manière une réalité. Dans un système géographique, on peut afficher des données sur une sphère, un ellipsoïde, mais pas un plan.
La seule réalité pour une carte (plane) est celle de la projection. Si on est comme Yves et qu'on aime les déformations qu'affiche le logiciel lorsqu'on lui dit "je suis dans un système géographique", on fait comme dans l'antiquité et on utilise une projection plate carrée (EPSG:9825).
Aussi, le Lambert II n'est pas une projection comme une autre, dont la réalité est aussi quelconque que n'importe quelle autre. Quand on regarde d'assez près, la Terre est plate, et donc on sait définir une déformation par rapport à la réalité. La projection Lambert II déforme très peu, vouloir faire une carte avec une projection est une bonne chose.
Dernière modification par Jérôme C (Wed 03 December 2008 13:43)
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#7 Wed 03 December 2008 14:21
Re: [Openlayers] France apaltie :-(
Yves a écrit:Tout ceci pour revenir à mon premier message, la France que tu affiches est une réalité (mais dans système géographique).
Je me dois de contredire Yves, car afficher sur un plan des données en coordonnées géographiques n'est en aucune manière une réalité. Dans un système géographique, on peut afficher des données sur une sphère, un ellipsoïde, mais pas un plan.
N'hésite pas à me taper sur les doigts, j'ai vraiment du mal avec ces concepts et j'ai hésité à prévenir, j'aurais dû ^^
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
#8 Wed 03 December 2008 15:04
Re: [Openlayers] France apaltie :-(
Le problème c'est que les logiciels SIG sont trop permissifs et ne font pas la différence entre les différents types système de coordonnées, géographiques ou cartographiques. Du coup, quand on n'a pas compris, ça marche quand même
Une des difficultés est aussi que beaucoup se reposent sur les codes EPSG. Or l'EPSG ne définit pas des projections, mais des méthodes pour passer d'un système de coordonnées à un autre. Les différents types de code ont une logique qui permet d'avoir des descriptions assez génériques, mais du coup, il faut prendre beaucoup de recul pour comprendre tout ça. Mais comme il suffit de mettre un code magique pour que cela fonctionne, pourquoi se poser des questions ?
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#9 Wed 03 December 2008 15:17
- saturn
- Juste Inscrit !
- Date d'inscription: 3 Dec 2008
- Messages: 4
Re: [Openlayers] France apaltie :-(
Arf désolé messieurs, mais je suis un peu paumé :-(
J'ai donc essayé la chose suivante :
Code:
map = new OpenLayers.Map('map',{controls: []}); var options = {numZoomLevels: 3,projection: new OpenLayers.Projection("EPSG:27572"),units: 'm'}; var bounds = new OpenLayers.Bounds(); bounds.extend(new OpenLayers.LonLat(-5.8,41.00).transform(new OpenLayers.Projection('EPSG:4326'),new OpenLayers.Projection('EPSG:27572'))); bounds.extend(new OpenLayers.LonLat(10.0,51.5).transform(new OpenLayers.Projection('EPSG:4326'),new OpenLayers.Projection('EPSG:27572'))); bounds.toBBOX() bounds.transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); var graphic = new OpenLayers.Layer.Image( 'France', './carto/img/France.png', bounds, new OpenLayers.Size(650, 625), options); map.addLayers([graphic]); map.setCenter(new OpenLayers.LonLat(2.1, 46.25).transform(new OpenLayers.Projection('EPSG:4326'),new OpenLayers.Projection('EPSG:27572')), 0);
Malheureusement, cela revient au même et ma carte est toujours aplatie :-(
Les données de base sont les suivantes:
Une carte de france sous sa représentation habituelle (désolé, je ne sais pas comment on nome cela techniquement, EPSG:27572 ?) dont les dimensions en pixels sont : 650x625
Des points dont je possède les coordonnes gps (WGS84 si j'ai bien compris).
Pour faire cohabiter tout cela, j'ai donc calibré les 4 points de ma carte avec des coordonnes gps suivante :
-5.8,41.00,10.0,51.5
ainsi que le centre de ma carte : 2.1, 46.25
hors par rapport aux coordonnées pixel de ma carte (0,0,650,625), j'ai bien saisie que l'aspect ratio changeait toutefois, je n'ai pas encore saisi comment opérer cette transformation dans openlayers.
Pouvez-vous m'éclairer ?
Hors ligne
#10 Wed 03 December 2008 15:24
Re: [Openlayers] France apaltie :-(
Antoine,
Tu n'as appliques pas la variable options à l'objet map :
Code:
var options = {numZoomLevels: 3,projection: new OpenLayers.Projection("EPSG:27572"),units: 'm'};
Voici quelque chose de correccte à adapter bien sur :
Code:
var options = { projection: new OpenLayers.Projection("EPSG:27572"), units: 'm', maxExtent: new OpenLayers.Bounds(bbox.minX, bbox.minY,bbox.maxX, bbox.maxY), restrictedExtent: new OpenLayers.Bounds(restrictBbox.minX, restrictBbox.minY,restrictBbox.maxX, restrictBbox.maxY), maxResolution: 'auto', maxZoomLevel: maxZoomLevel, minZoomLevel: minZoomLevel, controls: [] }; map = new OpenLayers.Map('map', options);
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
#11 Wed 03 December 2008 18:55
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: [Openlayers] France apaltie :-(
Bonjour,
A mon avis ce n'est qu'un problème de représentation.
Je prend l'hypothèse que le dessin de la carte et le dessin de la position des villes sont homogènes, ce qui est manifestement le cas.
Voici un petit script qui modifie les dimensions de l'image. C'est du PHP qui peut s'insérer dans une page HTML.
Il suffit de remplacer CreTrame.png par France.png.
<img src="CreTrame.png" width=544 height=399>
<?php
$Size=GetImageSize("CreTrame.png");
$im_in=ImageCreateFromPng("CreTrame.png");
$im_out=ImageCreate($Size[0],$Size[1]/2);
ImageCopyResized($im_out,$im_in, 0,0,0,0, $Size[0], $Size[1]/2, $Size[0], $Size[1]);
ImagePng($im_out, "DemoTrame.png");
?>
<img src="DemoTrame.png" >
Il est évident que la première balise <img ...> ne sert qu'au contrôle.
Il faudra adapter le rapport de hauteur à l'oeuil.
Je reste persuadé que ce problème n'a rien à voir avec la projection puisque les villes sont à leur place.
Cordialement.
Hors ligne
#12 Thu 04 December 2008 10:01
Re: [Openlayers] France apaltie :-(
Bonjour Pierre,
Je reste persuadé que ce problème n'a rien à voir avec la projection puisque les villes sont à leur place.
Cordialement.
Étant données que les villes et la carte sont en WGS84 (lat/long) il est bien évident que celles-ci sont bien placés Le problème d'Antoine n'est pas la place des villes mais la forme de la France.
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
#13 Thu 04 December 2008 19:00
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: [Openlayers] France apaltie :-(
Bonjour,
C'est ce que je voulais dire, il ne s'agit pas d'un problème de projecttion mais d'aun problème de déformation à la visualisation.
Le bout de script en PHP ne fait que changer les dimensions de l'image, et en particulier le rapport hauteur/largeur.
Donc ce script donne la possibilité de visualiser la France aussi haute que large, telle qu'on la voit sur des atlas.
Il me semble que c'est le but recherché.
Cordialement.
Hors ligne
#14 Sun 07 December 2008 13:37
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: [Openlayers] France apaltie :-(
Bonjour,
Il faut admettre le principe que vous faites des opérations dans le système géographique et que vous les visualisez sur un plan. Même si votre écran, comme le mien, est un écran cathodique et non un écran plat, le fait de visualiser sous-entend une projection.
Vu sous un autre plan, un pixel de l'écran correspond à une valeur angulaire.
Comme la France se situe vers le 45è parallèle, que l'on a l'habitude de voir la France suivant une projection conique tangente suivant le 45è parallèle (environ), l'unité dans le sens vertical n'a pas la même dimension que la même unité dans le sens horizontal.
J'ai vu que vous avez une fonction Size qui prend 2 paramètres, je suppose que c'est Width et Height. Essayez Size(650,950), ou Size(950,650). Il est très probable que c'est cette fonction qui transforme des valeurs d'angle de lon/lat en lignes et colonnes de pixels. Autrement dit, à part la réduction en hauteur, le script de base (le lien que vous indiquez) est bon, il suffit d'adapter Width et Height.
Cordialement
Hors ligne
#15 Tue 09 December 2008 19:29
Re: [Openlayers] France apaltie :-(
Je viens de tomber sur la doc d'OpenLayers, et j'ai compris pourquoi on fait facilement des abus de langage monstrueux :
lon {Number} The x-axis coordinate in map units. If your map is in a geographic projection, this will be the Longitude. Otherwise, it will be the x coordinate of the map location in your map units.
On peut rien y faire, c'est un type d'OpenLayers, LonLat. Si quelqu'un réussit à convaincre de l'horreur de cette chose, il faudra garder une équivalence type EastNorth = type LonLat pour la compatibilité des programmation, et s'amuser à changer tous les types dans les prototype de fonction
Tant qu'il y aura ce genre de chose, personne qui commence le SIG avec le webmapping et OpenLayers (je ne veux pas voir les autres soft ) ne pourra comprendre l'utilité d'une projection.
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne