1 votos

Transformación de polígonos con Proj4js

Estoy leyendo el Guía del usuario de Proj4js pero no puedo entenderlo. Importo la biblioteca

<script src="lib/proj4js-combined.js"></script>

Entonces,

function init() {

    (...) // reading from GML string - one polygon in EPSG:3031
    var features = format.read(strGML);

    Proj4js.defs['EPSG:3031'] = '+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs';

    var source = new OpenLayers.Projection('EPSG:3031');
    var wgs84 = new OpenLayers.Projection('WGS84');

    OpenLayers.Projection.transform(features[0], source, wgs84);

    (...) // show polygon on map

}

Bueno, esto no funciona. La lectura de la cadena GML funciona bien ya que el polígono se muestra correctamente en el mapa si las coordenadas están en WGS84 (y sin la transformación, por supuesto). Pero cuando pongo la cadena con otras coordenadas e intento transformar no funciona. ¿Es posible transformar un polígono de una vez o tengo que hacerlo punto por punto (y cómo lo haría)? Gracias

EDITAR: Mi cadena GML se parece a esto:

<gml:featureMember xmlns:gml="http://www.opengis.net/gml xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <feature:feature xmlns:feature="http://example.com/feature">
          <feature:geometry>
               <gml:Polygon>
                     <gml:exterior>
                           <gml:LinearRing>
                                 <gml:posList>591674.39 5022898.05 545682.5 4722908.1 571701.44 5322909.29 651691.25 5022904.6 591674.39 5022898.05
                                 </gml:posList>
                            </gml:LinearRing>
                     </gml:exterior>
               </gml:Polygon>
          </feature:geometry>
     </feature:feature>
</gml:featureMember>

¿Debería, en lugar de

OpenLayers.Projection.transform(features[0], source, wgs84); 

escribir

OpenLayers.Projection.transform(features[0].geometry, source, wgs84);

¿o incluso algo más?

1voto

brad Puntos 302

Como quiere transformar las coordenadas de la característica, necesita aplicar la transformación a la geometría de la característica.

//like this:
features[0].geometry.transform(source, wgs84);

//instead of:
//OpenLayers.Projection.transform(features[0].geometry, source, wgs84);

0voto

Sam007 Puntos 146

Pruebe este cambio en su código:

var source = new OpenLayers.Projection('EPSG:3031');
var wgs84 = new OpenLayers.Projection('EPSG:4326');

Esto debe funcionar.

0voto

Ash Puntos 28

Creo que la segunda opción es la correcta.

OpenLayers.Projection.transform(features[0].geometry, source, wgs84);

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X