10 votos

¿Cómo crear un polígono circular en las capas abiertas 3?

Así que realmente me gustaría modificar este ejemplo: http://openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

El problema es que mientras trato de aplicarlo a mi mapa no funciona, probablemente porque uso el estilo OSM que no es esférico:

var map = new ol.Map({
  layers: [
    new ol.layer.Tile({
        source: new ol.source.OSM()
      }),
    new ol.layer.Vector({
      source: vectorSource
    })
  ],
  renderer: 'canvas',
  target: 'map',
  view: new ol.View({
    center: ol.proj.transform([2.1833, 41.3833], 'EPSG:4326', 'EPSG:3857'),
    zoom: 2
  })
});

Y para la pregunta: ¿cómo crear un polígono circular? Como puedo ver, hay dos opciones: 1. Convertir de alguna manera el círculo en un polígono, lo cual no puedo hacer, basado en mi nivel de novato. 2. Crear mi propia función para hacer eso, algo como "Openlayers 2":

OpenLayers.Geometry.Polygon.createRegularPolygon = function(origin, radius, sides, rotation) {  
    var angle = Math.PI * ((1/sides) - (1/2));
    if(rotation) {
        angle += (rotation / 180) * Math.PI;
    }
    var rotatedAngle, x, y;
    var points = [];
    for(var i=0; i<sides; ++i) {
        rotatedAngle = angle + (i * 2 * Math.PI / sides);
        x = origin.x + (radius * Math.cos(rotatedAngle));
        y = origin.y + (radius * Math.sin(rotatedAngle));
        points.push(new OpenLayers.Geometry.Point(x, y));
    }
    var ring = new OpenLayers.Geometry.LinearRing(points);
    return new OpenLayers.Geometry.Polygon([ring]);
};

¿Alguien ha llegado al mismo punto en su vida de maestro de SIG? ¿Cuál es mejor? ¿O hay un camino oculto, que sólo los Sabios y los Fuertes pueden ver? ¡Ayúdame por favor!

14voto

nagytech Puntos 2872

Como otros han señalado correctamente, los formatos GeoJSON y WKT no admiten geometrías circulares de ninguna manera. Los círculos tampoco figuran en la especificación KML. Esto hace que sea un dolor cuando se trata de escribir un marco de mapa a KML, GeoJSON o WKT.

OpenLayers v3 tiene una manera de aproximar un círculo con un polígono, pero no es bonito, ya que implica la conversión a distancia ortodrómica. Consulte la referencia de la API para el ol.geom.Polygon.circular método aquí: http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

Un ejemplo ol.geom.Polygon.circular se muestra a continuación, pero también puede verse en este OpenLayers tissot indicatrix ejemplo .

 var lowpoly = ol.geom.Polygon.circular(
  /* WGS84 Sphere */
  new ol.Sphere(6378137),
  circle.getCenter(),
  circle.getRadius(),
  /* Number of verticies */
  12);

También puede utilizar fromCircle que, en el momento de escribir este post, es experimental.

var lowpoly = ol.geom.Polygon.fromCircle(
  circle,
  /* Number of verticies (optional) */
  12,
  /* Start angle (optional) */
  90
);

Para algo con lo que puedas jugar, mira mi jsFiddle aquí: https://jsfiddle.net/a1syw4od/9/

0 votos

Podría proponer una edición, pero quizá sea más fácil si lo arreglas tú: el último ejemplo debería usar ol.geom.Polygon.fromCircle en lugar de ol.geom.Polygon.circular . ¡Salud!

0voto

Regina Santos Puntos 11

Si está interesado en crear un polígono circular simple, utilice:

new ol.geom.Circle(
            ol.proj.transform([longitude, latitude], 'EPSG:4326', 'EPSG:3857'),
            radius_meters),
            'XY'
        )

Fuente: http://openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (elimine la marca estable de la parte superior de la página)

0 votos

Esto es válido, pero actualmente tiene problemas si pretende intentar convertir la característica en GeoJSON. Véase github.com/openlayers/ol3/pull/3237#issuecomment-78475413

0 votos

También cuando intentas extraer geometría en wkt usando writeWKT.

1 votos

ol.geom.Circle no es un polígono, es una geometría simple representada por un radio y un centro. (véase la clase base de ol.geom.Circle es ol.geom.SimpleGeometry no ol.geom.Polygon ) GeoJSON, WKT y KML no tienen geometrías circulares en su especificación y requieren conversión antes del formateo. Por favor, vea mi respuesta para una manera de aproximar un ol.geom.Circle por un polígono verdadero.

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