4 votos

Dibujar una elipse con OpenLayers

Estoy tratando de dibujar una elipse en el lado del cliente usando openlayers con algunas funciones matemáticas de dibujar elipse con svg . He logrado dibujarlo pero no la rotación lo que he escrito para el parámetro y no estoy seguro de la longitud del eje también.

Cuando mido la longitud del eje semi-mayor o semi-minor, no estoy obteniendo la verdadera longitud que he dado para 4,8 * 1000 metros.

Sé que PostGIS 2.1 tiene ST_MakeEllipse para esto pero lo quiero en el lado del cliente.

Comparto con vosotros el código javascript, la imagen de referencia y la imagen de resultado. Cualquier ayuda se agradece.

Imagen de referencia:

ellipse

Códigos:

var radiusX= 4,8 * 2 // Semi-major axis length - km
var radiusY= 2,5 * 2 // Semi-minor axis length -km 
var rot = 125 //Rotation

var xCent = 14.7495;
var yCent = 47.4640;

var z = [];
var list = [];

for (var i = 0 * Math.PI; i < 2 * Math.PI; i += 0.01 ) {
    xPos = xCent - (radiusX* Math.sin(i)) * Math.sin(rot * Math.PI) + (radiusY* Math.cos(i)) * Math.cos(rot * Math.PI);
    yPos = yCent + (radiusY* Math.cos(i)) * Math.sin(rot * Math.PI) + (radiusX* Math.sin(i)) * Math.cos(rot * Math.PI);

    if(i == 0 ) {
        z.push( new OpenLayers.Geometry.Point(xPos, yPos).transform(map.displayProjection, map.projection)); 
    } else {
        list.push(new OpenLayers.Geometry.Point(xPos, yPos).transform(map.displayProjection, map.projection));
    }
};

var linear_ring = new OpenLayers.Geometry.LinearRing(list);
var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linear_ring]), null, null);
vector.addFeatures([polygonFeature ])

Resultado:

ellipse

3voto

Kornelije Petak Puntos 475

He hecho un trabajo similar antes, para la rotación, hay rotate para los polígonos. En su caso, añada la siguiente línea antes de añadir la característica a la capa:

var originPoint = new OpenLayers.Geometry.Point(xCent, yCent).transform(map.displayProjection, map.projection); //center point for rotation
polygonFeature.geometry.rotate(rot, originPoint);

Puede encontrar la documentación completa sobre rotate función aquí

No estoy seguro de tu cálculo para las elipses (puede que hayas utilizado algunas transformaciones matemáticas), pero te sugeriría que utilizaras el sistema polar para obtener las coordenadas de esos puntos.

Obtén la distancia del punto de la elipse en la dirección θ al origen utilizando la siguiente fórmula:

ellipse polar form relative to center

Las coordenadas del punto son:

x = r(θ) * cos(θ)
y = r(θ) * sin(θ)

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