#1 Thu 14 October 2010 22:56
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Modification d'écriture
Bonjour
Sous Openlayer ou autre, existe-t-il une fonction pour transformer
Code:
MULTIPOLYGON(((377214.302977711 2446886.56088011,377182.33865765 2446904.66253807,377156.675547636 2446918.63976763,377114.972993864 2446942.46979836,377138.803024591 2446986.69283615,377148.999528123 2447003.763387,377139.948699145 2447012.81421598,376982.074745581 2447141.70260333,376957.0990403 2447154.19045597,376901.992094244 2447006.62757339,376974.055023701 2446936.74142559,376978.752289374 2446890.11247123,376979.66882
EN
Code:
<gml:MultiPolygon srsName="EPSG:4326"> <gml:polygonMember> <gml:Polygon> <gml:outerBoundaryIs> <gml:LinearRing> <gml:coordinates>1.313216,46.690770 1.000968,46.861087 0.887424,47.059790 1.142899,47.244300 1.355795,47.244300 1.554498,47.017211 1.710622,47.059790 1.767394,46.747542 1.313216,46.690770 1.313216,46.690770 </gml:coordinates> </gml:LinearRing> </gml:outerBoundaryIs> </gml:Polygon> </gml:polygonMember> <gml:polygonMember> <gml:Polygon> <gml:outerBoundaryIs> <gml:LinearRing>
et inversement !!
Pouvez-vous m'indiquez les spécifications de ces deux syntaxes??
Merci de votre aide Tio
Hors ligne
#2 Fri 15 October 2010 09:38
Re: Modification d'écriture
Bonjour,
Tu peux regarder cette page d'exemple : http://dev.openlayers.org/releases/Open … rmats.html
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 Fri 15 October 2010 11:10
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
Merci Voici un example tout simple
Code:
var out_options = { 'internalProjection': map.baseLayer.projection, 'externalProjection': map.baseLayer.projection }; var gmlOptions = { featureType: "feature", featureNS: "http://example.com/feature" }; var gmlOptionsOut = OpenLayers.Util.extend( OpenLayers.Util.extend({}, gmlOptions), out_options ); formats = { wkt: new OpenLayers.Format.WKT(out_options), gml2: new OpenLayers.Format.GML.v2(gmlOptionsOut) }; console.log(formats); feature=map.getLayersByName('outline')[0].features; console.log(feature); var str = formats['gml2'].write(feature,true); console.log(str);
Il me reste qu'à faire le ménage pour récupérer la balise de la géometrie.
Merci Yves.
Hors ligne
#4 Mon 18 October 2010 10:14
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
Bonjour
Je relance ce sujet pour deux problèmes :
1) Afin de récupérer uniquement le polygon j'ai fait ceci :
Code:
featureGML.substring(featureGML.indexOf('feature:geometry',0)+17,featureGML.indexOf('feature:geometry', featureGML.indexOf('feature:geometry',0)+1)-2);
Efficace mais pas orthodoxe. Je n'ai pas réussit à utiliser Openlayers.formats.XML
2) Ce cherche à récupérer le polygon avec des projection différentes (27582 et 2154)
Code:
map.getLayersByName('outline')[0].features[0].geometry.transform(new OpenLayers.Projection('EPSG:27572'),new OpenLayers.Projection('EPSG:27582'));
Ne fonctionne pas!! Je ne situe pas le problème.
Merci de votre aide Tio
Hors ligne
#5 Mon 18 October 2010 10:59
Re: Modification d'écriture
Bonjour,
Concernant le point 2 :
là tu as ta géométrie en WKT :
map.getLayersByName('outline')[0].features[0].geometry
Après il faut que tu te créés un objet Feature propre à OpenLayers que tu pourras reprojeter (le site d'openlayers est down je n'ai pas pu vérifier).
Je n'ai pas compris le point 1
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
#6 Mon 18 October 2010 11:08
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
Re,
Ok pour le point 2.
pour le point 1 Dans le fomat GML, j'ai utilisé la chaîne de caractère pour récupérer la balise "feature:geometry". Il aurait été plus propre, je pense d'utiliser le XML!!! Non Qu'en penses-tu?
Tio.
Hors ligne
#7 Wed 20 October 2010 09:59
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
Je rencontre toujours des problèmes. Quand je test les différentes étapes, cela fonctionne.
Quand je lance le script entièrement, j'ai l'erreur suivante : "geometry.clone().transform is not a function"
Je ne comprend pas l'erreur.
Merci de votre Aide
Tio
Code:
var geom = new Array(); var src = new Array(2154,27582); var out_options = { 'internalProjection': map.baseLayer.projection, 'externalProjection': map.baseLayer.projection }; var gmlOptions = { featureType: "feature", featureNS: "http://example.com/feature" }; var gmlOptionsOut = OpenLayers.Util.extend( OpenLayers.Util.extend({}, gmlOptions), out_options ); var formats = { wkt: new OpenLayers.Format.WKT(out_options), gml2: new OpenLayers.Format.GML.v2(gmlOptionsOut) }; for (i=0; i<map.getLayersByName('outline')[0].features.length; i++){ geom[i]= new Array(); geom[i]['wkt'] = map.getLayersByName('outline')[0].features[i].geometry; k=i; for(j=0; j<src.length; j++){ var tmp = new OpenLayers.Feature.Vector(map.getLayersByName('outline')[0].features[k].geometry); tmp.geometry.transform(new OpenLayers.Projection(map.baseLayer.projection.projCode),new OpenLayers.Projection('EPSG:'+src[j])); var featureGML = formats['gml2'].write(new OpenLayers.Feature.Vector(tmp),true); geom[k]['gml'] = new Array(); geom[k]['gml'][src[j]] = featureGML.substring(featureGML.indexOf('feature:geometry',0)+17,featureGML.indexOf('feature:geometry', featureGML.indexOf('feature:geometry',0)+1)-2); } }
Hors ligne
#8 Fri 22 October 2010 13:16
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
Bonjour
Je viens de trouver l'erreur , il manquait une affectation à la variable
tmp = tmp.geometry.transform(new OpenLayers.Projection(map.baseLayer.projection.projCode),new OpenLayers.Projection('EPSG:'+src[j]));
Par contre, pouvez-vous m'expliquer ce résultat
Code:
console.log(map.getLayersByName('outline')[0].features[0].geometry); var tmp = new OpenLayers.Feature.Vector(map.getLayersByName('outline')[0].features[0].geometry); tmp = tmp.geometry.transform(new OpenLayers.Projection(map.baseLayer.projection.projCode),new OpenLayers.Projection('EPSG:2154')); console.log(map.getLayersByName('outline')[0].features[0].geometry);
1=> 27572 POLYGON((452458.31904584 2520883.3001864,451752.76387129 2512769.415679,459161.09320412 2516649.969139,452458.31904584 2520883.3001864)) { id="OpenLayers.Geometry.Polygon_3014", more...}
2=> 2154 POLYGON((504638.10140192474 6955402.053690341,503865.8876504806 6947298.930498692,511301.8014213318 6951115.847015039,504638.10140192474 6955402.053690341)) {
Mon objet initial est map.getLayersByName('outline')[0].features[0].geometry.
Après transformation, via la variable tmp l'objet initial n'est pas identique.
Merci pour votre aide.
Tio
Hors ligne
#9 Mon 25 October 2010 08:58
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
J'ai trouvé la solution.
Pour cela j'ai repasse le polygon initial en wkt avec openlayer format. Ensuite j'ai créé un nouveau polygon avec cette chaine.
Résolut
Hors ligne
#10 Mon 25 October 2010 16:11
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
Bonjour
J'ai un problème que je comprend pas lors de la conversion de projection
tmp = tmp.geometry.transform(new OpenLayers.Projection(map.baseLayer.projection.projCode),new OpenLayers.Projection('EPSG:'+src[j]));
Cela fonctionne très bien pour la 27582, mais pas pour la 2154. il me modifier la coordonnées des points.
27582
POLYGON((518071.44534596906 2531717.0935387663,517041.33479111857 2532108.676660671,517750.4177415489 2532154.537746969,518480.66734720924 2532076.926677767,518071.44534596906 2531717.0935387663,518071.44534596906 2531717.0935387663)) { id="OpenLayers.Geometry.Polygon_5919", more...}
<gml:featureMember xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><feature:feature xmlns:feature="http://example.com/feature"><feature:geometry><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">518071.44534596906,2531717.0935387663 517041.33479111857,2532108.676660671 517750.4177415489,2532154.537746969 518480.66734720924,2532076.926677767 518071.44534596906,2531717.0935387663</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></feature:geometry></feature:feature></gml:featureMember>
2154
POLYGON((570301.7796602645 6965685.096435715,569275.5397314288 6966085.018542743,569984.5830060684 6966124.952082867,570713.7528938007 6966041.310273165,570301.7796602645 6965685.096435715,570301.7796602645 6965685.096435715)) { id="OpenLayers.Geometry.Polygon_5894", more...}
<gml:featureMember xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><feature:feature xmlns:feature="http://example.com/feature"><feature:geometry><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">570301.7796602645,6965685.096435715,43.78045410942286 569275.5397314288,6966085.018542743,43.789065099321306 569984.5830060684,6966124.952082867,43.78273188881576 570713.7528938007,6966041.310273165,43.7763734459877 570301.7796602645,6965685.096435715,43.78045410942286</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></feature:geometry></feature:feature></gml:featureMember>
voici les quelques lignes de code
Code:
tmp = new OpenLayers.Feature.Vector(GeomFromWKT(formats['wkt'].write(map.getLayersByName('outline')[0].features[k])),true); tmp = tmp.geometry.transform(new OpenLayers.Projection(map.baseLayer.projection.projCode),new OpenLayers.Projection('EPSG:'+src[j])); featureGML = formats['gml2'].write(new OpenLayers.Feature.Vector(tmp)); geom[k] = geom[k]+'"' + src[j] + '":"' + featureGML.substring(featureGML.indexOf('feature:geometry',0)+17,featureGML.indexOf('feature:geometry', featureGML.indexOf('feature:geometry',0)+1)-2).replace(/"/g,"\\\"").replace(/\//g,"\\/") + '",';
Merci de votre aide. J'avance mais pas vite
Tio
Hors ligne
#11 Thu 28 October 2010 11:24
- tiolebucheron
- Participant actif
- Lieu: Rouen
- Date d'inscription: 26 Mar 2006
- Messages: 147
Re: Modification d'écriture
J'ai avancé dans le diagnostic du problème
Je crée un Vector en 27572
tmp = new OpenLayers.Feature.Vector(GeomFromWKT('POLYGON((473624.97428247717 2503420.8096146192,468333.3104733147 2481195.821616069,495144.40710643225 2488604.150948889,473624.97428247717 2503420.8096146192))'),true);
Je le transforme en 2154
tmp = tmp.geometry.transform(new OpenLayers.Projection(map.baseLayer.projection.projCode),new OpenLayers.Projection('EPSG:'+src[j]));
POLYGON((525647.2866382567 6937775.032845644,520174.83243102545 6915607.812195801,547030.399726584 6922789.120917389,525647.2866382567 6937775.032845644,525647.2866382567 6937775.032845644)) { id="OpenLayers.Geometry.Polygon_2925", more...}
Je fais la transcription en gml
featureGML = formats['gml2'].write(new OpenLayers.Feature.Vector(tmp));
"<gml:featureMember xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><feature:feature xmlns:feature="http://example.com/feature"><feature:geometry><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">525647.2866382567,6937775.032845644,44.21614613290876 520174.83243102545,6915607.812195801,44.29253465030342 547030.399726584,6922789.120917389,44.039753519929945 525647.2866382567,6937775.032845644,44.21614613290876</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></feature:geometry></feature:feature></gml:featureMember>"
C'est au niveau de la transcription en gml qu'il y a un problème
Code:
var out_options = { 'internalProjection': map.baseLayer.projection, 'externalProjection': map.baseLayer.projection }; var gmlOptions = { featureType: "feature", featureNS: "http://example.com/feature" }; var gmlOptionsOut = OpenLayers.Util.extend( OpenLayers.Util.extend({}, gmlOptions), out_options ); var formats = { wkt: new OpenLayers.Format.WKT(out_options), gml2: new OpenLayers.Format.GML.v2(gmlOptionsOut) };
Ce code fonctionne avec la transcription GML en 27582.
Merci de votre Aide Tio
Hors ligne