Làm thế nào để tạo đa giác tròn trong openlayers 3?


9

Vì vậy, tôi thực sự muốn sửa đổi ví dụ này: http://openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

Vấn đề là khi tôi cố gắng áp dụng nó vào bản đồ của mình thì nó không hoạt động, có lẽ vì tôi sử dụng kiểu OSM không phải hình cầu:

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

Và cho câu hỏi: làm thế nào để tạo đa giác tròn? Như tôi có thể thấy, có hai sự lựa chọn:

  1. Bằng cách nào đó chuyển đổi geom.Circle trong geom.Polygon, điều mà tôi không thể làm, dựa trên cấp độ noob của tôi

  2. Tạo chức năng của riêng tôi để làm điều đó, một cái gì đó như openlayers 2:

    OpenLayers.Geometry.Polygon.createRegularPolygon = function (gốc, bán kính, cạnh, xoay) {
    var angle = Math.PI * ((1 / side) - (1/2)); if (rotation) {angle + = (rotation / 180) * Math.PI; } var rotatedAngle, x, y; điểm var = []; cho (var i = 0; i

Có ai đã đến cùng một điểm trong cuộc sống bậc thầy về GIS của họ chưa? Cái nào tốt hơn? hoặc có một con đường ẩn, mà chỉ những người khôn ngoan và mạnh mẽ mới có thể nhìn thấy? Làm ơn giúp tôi với!

Câu trả lời:


11

Như những người khác đã chỉ ra một cách chính xác, các định dạng GeoJSON và WKT không hỗ trợ hình học tròn theo bất kỳ cách nào. Các vòng kết nối cũng không có trong đặc tả KML. Điều này làm cho nó trở nên khó khăn khi cố gắng viết ra một khung bản đồ thành KML, GeoJSON hoặc WKT.

OpenLayers v3 không có cách nào để xấp xỉ một vòng tròn với đa giác, nhưng nó không đẹp vì nó liên quan đến việc chuyển đổi thành khoảng cách vòng tròn lớn. Xem tài liệu tham khảo API cho ol.geom.Polygon.circularphương pháp tại đây: http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

Một ví dụ về ol.geom.Polygon.circularphương thức này được hiển thị bên dưới, nhưng cũng có thể được nhìn thấy trong ví dụ này về ví dụ chỉ dẫn của OpenLayers .

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

Ngoài ra, bạn có thể sử dụng fromCircle, tại thời điểm của bài đăng này, là thử nghiệm.

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

Đối với một cái gì đó mà bạn có thể chơi với, xem jsFiddle của tôi ở đây: https://jsfiddle.net/a1syw4od/9/


Tôi có thể đề xuất một chỉnh sửa, nhưng có lẽ sẽ dễ dàng hơn nếu bạn sửa nó: ví dụ cuối cùng nên sử dụng ol.geom.Polygon.fromCircle hơn là ol.geom.Polygon.circular. Chúc mừng!
Arjan

0

Nếu bạn quan tâm đến việc tạo một đa giác tròn đơn giản thì hãy sử dụng:

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

Nguồn: http://openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (xóa đánh dấu ổn định ở đầu trang)


Điều này là hợp lệ, nhưng hiện tại có vấn đề nếu bạn có ý định thử và chuyển đổi tính năng thành GeoJSON. Xem github.com/openlayers/ol3/pull/3237#issuecomment-78475413
Darren Reid

cũng như khi bạn cố gắng giải nén hình học trong wkt bằng writeWKT.
Suraj

1
ol.geom.Circlekhông phải là một đa giác, nó là một hình học đơn giản được biểu thị bằng bán kính và tâm. (xem lớp cơ sở không phải ol.geom.Circlelà ) GeoJSON, WKT và KML không có hình học tròn trong đặc tả của chúng và yêu cầu chuyển đổi trước khi định dạng. Xin vui lòng xem câu trả lời của tôi để biết cách tính gần đúng bởi một đa giác thực sự. ol.geom.SimpleGeometryol.geom.Polygonol.geom.Circle
nagytech
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.