Bagaimana cara membuat poligon melingkar di openlayers 3?

10

Jadi saya benar-benar ingin mengubah contoh ini: http://openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

Masalahnya adalah ketika saya mencoba menerapkannya pada peta saya tidak berfungsi, mungkin karena saya menggunakan gaya OSM yang tidak berbentuk bola:

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

Dan untuk pertanyaan: bagaimana cara membuat poligon melingkar? Seperti yang saya lihat, ada dua pilihan:

  1. Entah bagaimana mengkonversi geom.Circle di geom.Polygon, yang tidak bisa saya lakukan, berdasarkan level noob saya

  2. Buat fungsi saya sendiri untuk melakukan itu, sesuatu seperti openlayers 2:

    OpenLayers.Geometry.Polygon.createRegularPolygon = fungsi (asal, jari-jari, sisi, rotasi) {
    var angle = Math.PI * ((1 / sisi) - (1/2)); if (rotasi) {angle + = (rotasi / 180) * Math.PI; } var rotatedAngle, x, y; var points = []; untuk (var i = 0; i

Adakah yang sampai pada titik yang sama dalam kehidupan master GIS mereka? Mana yang lebih baik? atau adakah jalan tersembunyi, yang hanya bisa dilihat oleh Orang Bijak dan Kuat? Tolong bantu aku!

pengguna1929437
sumber

Jawaban:

13

Seperti yang telah ditunjukkan orang lain dengan benar, format GeoJSON dan WKT tidak mendukung geometri lingkaran dengan cara apa pun. Lingkaran juga tidak ada dalam spesifikasi KML. Ini menyulitkan ketika mencoba menulis bingkai peta ke KML, GeoJSON atau WKT.

OpenLayers v3 memang memiliki cara untuk memperkirakan lingkaran dengan poligon, tetapi tidak cantik karena melibatkan konversi ke jarak lingkaran yang hebat. Lihat referensi API untuk ol.geom.Polygon.circularmetode di sini: http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

Contoh dari ol.geom.Polygon.circularmetode ini ditunjukkan di bawah ini, tetapi juga dapat dilihat pada contoh OpenLayers tissot indicatrix ini .

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

Atau, Anda dapat menggunakan fromCircleyang mana, pada saat posting ini, bersifat eksperimental.

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

Untuk sesuatu yang dapat Anda mainkan, lihat jsFiddle saya di sini: https://jsfiddle.net/a1syw4od/9/

nagytech
sumber
Saya bisa mengusulkan pengeditan, tetapi mungkin lebih mudah jika Anda memperbaikinya: contoh terakhir harus digunakan ol.geom.Polygon.fromCircle daripada ol.geom.Polygon.circular. Bersulang!
Arjan
0

Jika Anda tertarik untuk membuat poligon melingkar sederhana, maka gunakan:

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

Sumber: http://openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (hilangkan centang stabil di bagian atas halaman)

Mubaryus
sumber
Ini valid, tetapi saat ini memiliki masalah jika Anda berniat untuk mencoba dan mengubah fitur menjadi GeoJSON. Lihat github.com/openlayers/ol3/pull/3237#issuecomment-78475413
Darren Reid
juga ketika Anda mencoba untuk mengekstrak geometri di wkt menggunakan writeWKT.
Suraj
1
ol.geom.Circlebukan poligon, itu adalah geometri sederhana yang diwakili oleh jari-jari dan pusat. (lihat kelas dasar dari ol.geom.Circleini ol.geom.SimpleGeometrytidak ol.geom.Polygon) GeoJSON, WKT, dan KML tidak memiliki geometri melingkar dalam spesifikasi mereka dan memerlukan konversi sebelum memformat. Silakan lihat jawaban saya untuk cara memperkirakan ol.geom.Circledengan poligon benar.
nagytech