轉自:https://blog.csdn.net/leftfist/article/details/78984533#commentBoxspa
arcgis for js裏面,畫一個圓不是什麼難事。小的能夠用SimpleMarkerSymbol
,"style": "esriSMSCircle"
;
大的話,直接就來一個new Circle
.net
可是,若是是相似颱風風圈這類的呢?3d
似圓非圓,該咋畫?
答案是畫多邊形。如圖所示的風圈,正是3個多邊形。其實所謂的圓,不就是多邊形無限逼近的結果嗎?好像微積分裏有說到這個?code
畫颱風風圈的原理以下:以圓心爲原點,以正北方向爲0度,順時針畫點,1度爲1個點,並連成線,並最終回到正北方向,造成封閉的多邊形;而後再加以填充。因爲颱風半徑分爲東北、東南、西南、西北四個方向,每一個方向距離圓心可能長度不一,因而就造成了有四個鋸齒狀的風圈。blog
代碼以下:get
function getAirRing(c, center, index) {//風圈;level風力級數,center原點 var arColor; switch (c.level) { case 7: arColor = [83, 168, 113]; break;//7級風圈 case 10: arColor = [175, 192, 130]; break; case 12: arColor = [185, 121, 96]; break; default: arColor = [83, 168, 113]; break; } //算出全部的點 var points = new Array(); getPoints(center, c.EN, 0);//東北方向 getPoints(center, c.ES, 90); getPoints(center, c.WS, 180); getPoints(center, c.WN, 270); points[points.length] = points[0];//首尾鏈接 //設置填充symbol var bColor = arColor; bColor.push(0.5);//透明度 var sfl = new esri.symbol.SimpleFillSymbol( esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol( esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color(arColor), 2 ), new dojo.Color(bColor) ); //將點連成多邊形 var polygon = new esri.geometry.Polygon(points); //並填充,還附帶上各類風圈數據 var gr = new esri.Graphic(polygon, sfl, { "level": c.level, "wn": c.WN, "en": c.EN, "es": c.ES, "ws": c.WS, "attrtype": "airRing", "index": index, }, new esri.InfoTemplate("風圈:${level}", tplAirRing)); return gr; //此方法照抄來的,1度1個點 function getPoints(center, cradius, startAngle) { var radius = cradius / 100; var pointNum = 90; var endAngle = startAngle + 90; var sin; var cos; var x; var y; var angle; for (var i = 0; i <= pointNum; i++) { angle = startAngle + (endAngle - startAngle) * i / pointNum; sin = Math.sin(angle * Math.PI / 180); cos = Math.cos(angle * Math.PI / 180); x = center[0] + radius * sin; y = center[1] + radius * cos; points.push([x, y]); } } }