如何在openlayers 3中创建圆形多边形?


10

所以我真的很想修改这个例子:http : //openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

问题是,当我尝试将其应用于地图时,它不起作用,可能是因为我使用了非球形的OSM样式:

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

还有一个问题:如何创建圆形多边形?如我所见,有两种选择:

  1. 根据我的菜鸟级别,以某种方式转换geom.Circle到geom.Polygon中,这是我做不到的

  2. 创建我自己的函数来执行此操作,例如openlayers 2:

    OpenLayers.Geometry.Polygon.createRegularPolygon = function(原点,半径,边,旋转){
    var angle = Math.PI *((1 / sides)-(1/2)); if(rotation){angle + =(rotation / 180)* Math.PI; } var rotationAngle,x,y; var points = []; for(var i = 0; i

有没有人在他们的GIS主人生活中遇到过同样的问题?哪一个更好?还是有一条隐藏的道路,只有明智和坚强的人才能看到?请帮帮我!

Answers:


13

正如其他人正确指出的那样,GeoJSON和WKT格式绝不支持圆形几何。圆也不在KML规范中。尝试将地图框架写出到KML,GeoJSON或WKT时,这很麻烦。

OpenLayers v3确实提供了一种用多边形近似圆的方法,但是它并不漂亮,因为它涉及到转换为较大的圆距离。参见API参考以获取有关此ol.geom.Polygon.circular方法的信息:http : //openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

ol.geom.Polygon.circular下面显示了该方法的一个示例,但是在此OpenLayers tissot indicatrix示例中也可以看到该方法的示例

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

或者,您可以使用fromCircle本文撰写时仍处于试验阶段的方法。

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

对于您可以玩的东西,请在这里查看我的jsFiddle:https ://jsfiddle.net/a1syw4od/9/


我可以提出一个修改,但是如果您进行修改,可能会更容易:最后一个示例应使用ol.geom.Polygon.fromCircle 而不是ol.geom.Polygon.circular。干杯!
Arjan

0

如果您对创建简单的圆形多边形感兴趣,请使用:

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

来源:http : //openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (删除页面顶部的稳定刻度)


这是有效的,但是如果您打算尝试将该功能转换为GeoJSON,则目前存在问题。参见github.com/openlayers/ol3/pull/3237#issuecomment-78475413
达伦·里德

当您尝试使用writeWKT在wkt中提取几何图形时。
Suraj 2015年

1
ol.geom.Circle不是多边形,而是由半径和中心表示的简单几何形状。(见的基类ol.geom.Circleol.geom.SimpleGeometryol.geom.Polygon)以GeoJSON,WKT,和KML没有在它们的规范圆形几何形状和格式化之前需要转换。请参阅我的答案,以一种近似逼近ol.geom.Circle真实多边形的方法。
nagytech,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.