<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我在網上看了很多說是繪製扇形的方法,但是我用的時候都不是很好玩,所以說呢,我自己整理了一下,符合了我想要的效果,儘管我能力有限,還是決定分享一下,因為找資料太難了!
我比較懶,就不廢話了,直接上程式碼!
包我就不復制了,根據官網提供的API自己參照吧!
建立地圖
// 範例化Map map = new Map({ // 建立一個地圖 layers: [new TileLayer({ source: new OSM(), }),], target: 'map', view: new View({ center: fromLonLat([116.400819, 39.916263]), zoom: 15, constrainResolution: true, // 設定縮放級別為整數 smoothResolutionConstraint: false, // 關閉無級縮放地圖 }), });
上面程式碼大體就這個樣子。
到這兒應該沒什麼問題。我用的就是預設的 3857 座標系,不是4326的。
繪製扇形方法就很簡單了,比如繪製兩個。
// 繪製扇形 addCurve() { let origi_point = fromLonLat([116.410819, 39.916263]); // 繪製扇形的頂點 let circle = this.createRegularPolygonCurve(origi_point, 500, 100, 30, 90) // 呼叫繪製扇形的方法得到扇形 let feature = new Feature(circle); // 把扇形加入 feature feature.setStyle( // 設定一下這個扇形的樣式 new Style({ fill: new Fill({ color: 'rgba(32, 157, 230, 0.3)' }), stroke: new Stroke({ color: 'rgba(255, 205, 67, 0.3)', width: 2 }), }) ) feature.set('type', 'Curve') // 這是給這個扇形新增額外的引數 , 如果是設定id 用 setId方法 feature.set('curve', { // 這是給這個扇形新增額外的引數,這裡的id和 setId的id沒關係 id: 1, title: '測試001', msg: '測試001-1', msg2: '測試001-2', }) // 建立第二個扇形,和第一個一樣 let circle1 = this.createRegularPolygonCurve(origi_point, 500, 100, 30, 45) let feature1 = new Feature(circle1); feature1.setStyle( new Style({ fill: new Fill({ color: 'rgba(32, 157, 230, 0.3)' }), stroke: new Stroke({ color: 'rgba(255, 205, 67, 0.3)', width: 2 }), }) ) feature1.set('type', 'Curve') feature1.set('curve', { id: 2, title: '超級無敵炫酷爆龍戰神', msg: '超級無敵炫酷爆龍戰神 描述001', msg2: '超級無敵炫酷爆龍戰神 描述002', }) let vectorSource = new VectorSource(); // 建立一個資料來源 vectorSource.addFeatures([feature, feature1]); // 把兩個扇形加進資料來源 let vectorLayer = new VectorLayer({ // 建立一個圖層,把資料來源加進圖層 source: vectorSource }); map.addLayer(vectorLayer); // 把圖層加進地圖 },
接下來就是最重要的, 怎麼繪製的扇形,也就是上邊程式碼呼叫的方法。
/** * APIMethod:OpenLayers繪製扇形的介面擴充套件 * @param origin 圓心 * @param radius 半徑 * @param sides 邊數 * @param r 弧度 * @param angel 旋轉角度(扇形右邊半徑與x正向軸的角度) * @returns {OpenLayers.Geometry.Polygon} */ createRegularPolygonCurve(origin, radius, sides, r, angel) { let rotation = 360 - r; let angle = Math.PI * ((1 / sides) - (1 / 2)); if (rotation) { angle += (rotation / 180) * Math.PI; } let rotatedAngle, x, y; let points = []; for (let i = 0; i < sides; ++i) { let an = i * ((360 - rotation) / 360); rotatedAngle = angle + (an * 2 * Math.PI / sides); x = origin[0] + (radius * Math.cos(rotatedAngle)); y = origin[1] + (radius * Math.sin(rotatedAngle)); points.push([x, y]); } if (rotation != 0) { points.push(origin); } var ring = new LinearRing(points); ring.rotate(angel / 57.3, origin); let list = ring.getCoordinates() return new Polygon([list]); },
好了,就這樣,我是可以了,看你們了!
到此這篇關於利用OpenLayer繪製扇形的範例程式碼 的文章就介紹到這了,更多相關OpenLayer繪製扇形內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45