Openlayers 3'te dairesel çokgen nasıl oluşturulur?


10

Bu yüzden bu örneği gerçekten değiştirmek istiyorum: http://openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

Sorun şu ki, haritama uygulamaya çalıştığımda, muhtemelen küresel olmayan OSM stilini kullandığım için çalışmıyor:

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

Ve soru için: dairesel çokgen nasıl oluşturulur? Gördüğüm gibi iki seçenek var:

  1. Bir şekilde geom dönüştürün. Geom'deki döngü. Yapamadığım poligon, noob seviyeme dayanarak

  2. Bunu yapmak için kendi işlevimi oluştur, openlayers 2 gibi bir şey:

    OpenLayers.Geometry.Polygon.createRegularPolygon = fonksiyon (başlangıç ​​noktası, yarıçap, taraflar, dönüş) {
    var angle = Math.PI * ((1 / taraf) - (1/2)); eğer (döndürme) {açı + = (döndürme / 180) * Math.PI; } var rotatedAngle, x, y; var puan = []; için (var i = 0; i

CBS ana hayatında aynı noktaya sahip olan var mı? Hangisi daha iyi? ya da sadece Akil ve Güçlü olanların görebileceği gizli bir yol var mı? Bana yardım et lütfen!

Yanıtlar:


13

Diğerlerinin de belirttiği gibi, GeoJSON ve WKT formatları dairesel geometrileri hiçbir şekilde desteklemez. Çevreler de KML spesifikasyonunda değil. Bu, KML, GeoJSON veya WKT'ye bir harita çerçevesi yazmaya çalışırken bir acı haline getirir.

OpenLayers v3'ün bir daireye çokgen içeren bir yaklaşımı vardır, ancak büyük daire mesafesine dönüştürmeyi gerektirdiği için hoş değildir. ol.geom.Polygon.circularBuradaki yöntem için API referansına bakın : http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

ol.geom.Polygon.circularYöntemin bir örneği aşağıda gösterilmiştir, ancak bu OpenLayers doku belirtisi örneğinde de görülebilir .

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

Alternatif olarak, fromCirclebu yazı sırasında deneysel olanı kullanabilirsiniz.

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

Oynayabileceğiniz bir şey için jsFiddle'ım bölümüne bakın: https://jsfiddle.net/a1syw4od/9/


Bir düzenleme önerebilirim, ancak düzeltirseniz belki daha kolaydır: son örnek ol.geom.Polygon.fromCircle yerine kullanmalıdır ol.geom.Polygon.circular. Şerefe!
Arjan

0

Basit bir dairesel çokgen oluşturmak istiyorsanız o zaman kullanın:

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

Kaynak: http://openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (sayfanın üst kısmındaki sabit onay işaretini kaldırın)


Bu geçerlidir, ancak özelliği GeoJSON'a dönüştürmeyi denemek istiyorsanız şu anda sorun yaşamaktadır. Bkz. Github.com/openlayers/ol3/pull/3237#issuecomment-78475413
Darren Reid

Ayrıca writeWKT kullanarak wkt içinde geometri ayıklamaya çalıştığınızda.
Suraj

1
ol.geom.Circleçokgen değildir, yarıçap ve merkezle temsil edilen basit bir geometridir. (baz sınıfına bakın ol.geom.Circleolan ol.geom.SimpleGeometrydeğil ol.geom.Polygon) GeoJSON WKT ve KML kendi tarifnamede dairesel geometrilere sahip ve biçimlendirmeden önce dönüşüm gerekli değildir. ol.geom.CircleGerçek bir çokgene yaklaşmak için lütfen cevabıma bakın.
nagytech
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.