为了账号安全,请及时绑定邮箱和手机立即绑定

OpenLayers - 创建多边形Polygon

标签:
AngularJS


OpenLayers版本:4.6.4

叨叨:

本来这不应该成为一个问题,也不值得专门写一篇文章,尤其是对一个已经用过各种MapAPI(Google、百度、高德、SmartEarth...)的人来说,但就是这个本来以为3分钟解决的问题我却用了至少30分钟才把坑填完,最后发现OpenLayers的好多设计理念、思路都和之前用过的API大不相同。

需求:

需求很简单,其实就是用代码把一串经纬度坐标表示的Polygon添加在Map上,注意这里不是创建地图交互工具来用鼠标画Polygon,也不是用GeoJSON或WKT作为数据源,而是用代码手动实现,因为后者OL官网都有示例,前者我并没有找到(可能是因为我英文太烂,如果哪位发现有这样的示例请告诉我)

正题:

我先把最后的代码贴出来,再来分析我踩的那些坑

<script>

    var map = OLU.createBaseMap('mapDiv');

    var polygon = new ol.geom.Polygon([[[110, 39], [116, 39], [116, 33], [110, 33], [110, 39]]]);

    polygon.applyTransform(ol.proj.getTransform('EPSG:4326', 'EPSG:3857'));

    var feature = new ol.Feature(polygon);

    var vectorSource = new ol.source.Vector();

    vectorSource.addFeature(feature);

    var vectorLayer = new ol.layer.Vector({

        source: vectorSource

    });

    map.addLayer(vectorLayer);

</script>

创建Map的过程我封装了一下,基本是最简化的配置,没什么特殊的

坑1:Polygon的构造函数,按照过往经验给一个Point的数组就好了,但是在OL中是一个Point的数组的数组,这还好,最起码在API中能看到,最坑的就是下面的坑;

坑2:一定要做坐标转换,其实折腾了半天我就是缺这一句代码,至于投影坐标系这些东西我还晕着呢,大家自己悟吧。

polygon.applyTransform(ol.proj.getTransform('EPSG:4326', 'EPSG:3857'));

最后要把polygon显示出来需要这样一个流程:

polygon封装到Feature --> feature添加到source --> 通过source创建vector layer --> 把layer添加到map上。

这就是为什么我开始说OL在设计理念上和之前接触的大不相同,之前的大部分API直接通过map.addxxx 函数就可以添加覆盖物,也许要用OL就得把之前自己想当然的那些经验都扔掉。

OpenLayers - 创建多边形Polygon

©著作权归作者所有:来自51CTO博客作者一念之間_的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消