Come creare un poligono circolare in openlayers 3?


10

Quindi vorrei davvero modificare questo esempio: http://openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

Il problema è che quando provo ad applicarlo alla mia mappa non funziona, probabilmente perché uso uno stile OSM che non è sferico:

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
  })
});

E per la domanda: come creare un poligono circolare? Come posso vedere, ci sono due scelte:

  1. In qualche modo converti geom.Circle in geom.Polygon, cosa che non posso fare, in base al mio livello di noob

  2. Crea la mia funzione per farlo, qualcosa come openlayers 2:

    OpenLayers.Geometry.Polygon.createRegularPolygon = funzione (origine, raggio, lati, rotazione) {
    var angle = Math.PI * ((1 / lati) - (1/2)); if (rotazione) {angolo + = (rotazione / 180) * Math.PI; } var rotatedAngle, x, y; var points = []; per (var i = 0; i

Qualcuno è arrivato allo stesso punto nella loro vita da maestro GIS? Qual è il migliore? o c'è un sentiero nascosto, che solo i saggi e i forti possono vedere? Aiutami per favore!

Risposte:


13

Come altri hanno correttamente sottolineato, i formati GeoJSON e WKT non supportano in alcun modo le geometrie circolari. I cerchi non sono nemmeno nella specifica KML. Questo è un problema quando si tenta di scrivere un frame della mappa su KML, GeoJSON o WKT.

OpenLayers v3 ha un modo per approssimare un cerchio con un poligono, ma non è carino in quanto comporta la conversione in una grande distanza del cerchio. Vedi il riferimento API per il ol.geom.Polygon.circularmetodo qui: http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

Un esempio del ol.geom.Polygon.circularmetodo è mostrato sotto, ma può anche essere visto in questo esempio indicatrix tissot di OpenLayers .

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

In alternativa, puoi usare ciò fromCircleche, al momento di questo post, è sperimentale.

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

Per qualcosa con cui puoi giocare, guarda il mio jsFiddle qui: https://jsfiddle.net/a1syw4od/9/


Potrei proporre una modifica, ma forse è più facile se la risolvi: l'ultimo esempio dovrebbe usare ol.geom.Polygon.fromCircle piuttosto che ol.geom.Polygon.circular. Saluti!
— Arjan,

0

Se sei interessato a creare un semplice poligono circolare, utilizza:

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

Fonte: http://openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (rimuovi il segno di spunta stabile nella parte superiore della pagina)


Questo è valido, ma attualmente ha problemi se si intende provare a convertire la funzione in GeoJSON. Vedi github.com/openlayers/ol3/pull/3237#issuecomment-78475413
— Darren Reid

anche quando si tenta di estrarre la geometria in wkt usando writeWKT.
— Suraj,

1
ol.geom.Circlenon è un poligono, è una semplice geometria rappresentata da un raggio e un centro. (vedere la classe base ol.geom.Circleè ol.geom.SimpleGeometrynon ol.geom.Polygon) GeoJSON, WKT, e KML non hanno geometrie circolari in loro specifica e richiedono la conversione prima della formattazione. Si prega di vedere la mia risposta per un modo per approssimare un ol.geom.Circledi un vero poligono.
— nagytech,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.