gis.script.clickDrawFillMarker = function (treeNode){ boatLayer.removeAllFeatures(); gis.script.drawFillMarker(boatLayer,treeNode); } /* * 绘画船舶 */ gis.script.drawFillMarker = function (layer,ship){ if(layer&&ship){ //x:LON;y:LAT;c:COURSE;l:LENGTH;w:WIDTH;s:SPEED; var x = ship.LON||parseFloat(ship.lon); var y = ship.LAT||parseFloat(ship.lat); var c = ship.COURSE||parseFloat(ship.course)||90.0; var l = ship.LENGTH||parseFloat(ship.length); var w = ship.WIDTH||parseFloat(ship.width); var s = ship.SPEED||parseFloat(ship.speed); //先以中心点为原点 var jd = parseInt(c); //后期考虑转换异常,异常方向取0度 jd = -(jd/180) * Math.PI;//弧度 顺时针旋转 //20公里:1厘米比例尺 var c_x=0.000075;//船舶单位长度,按照长、宽系数同比例缩放,150米长度 //if(w>1) //c_x=c_x*w/100; var c_y=0.00015;//船舶单位长度,按照长、宽系数同比例缩放,300米长度 //if(l>1) //c_y=c_y*l/100; var _o_x=0;//船舶顶点 var _o_y=c_y*2; var v_o_x=x+_o_x*Math.cos(jd)-_o_y*Math.sin(jd); var v_o_y=y+_o_x*Math.sin(jd)+_o_y*Math.cos(jd); var _1_x=c_x;//船舶角点1 var _1_y=c_y; var v_1_x=x+_1_x*Math.cos(jd)-_1_y*Math.sin(jd); var v_1_y=y+_1_x*Math.sin(jd)+_1_y*Math.cos(jd); var _2_x=c_x;//船舶角点2 var _2_y=-c_y; var v_2_x=x+_2_x*Math.cos(jd)-_2_y*Math.sin(jd); var v_2_y=y+_2_x*Math.sin(jd)+_2_y*Math.cos(jd); var _3_x=-c_x;//船舶角点3 var _3_y=-c_y; var v_3_x=x+_3_x*Math.cos(jd)-_3_y*Math.sin(jd); var v_3_y=y+_3_x*Math.sin(jd)+_3_y*Math.cos(jd); var _4_x=-c_x;//船舶角点4 var _4_y=c_y; var v_4_x=x+_4_x*Math.cos(jd)-_4_y*Math.sin(jd); var v_4_y=y+_4_x*Math.sin(jd)+_4_y*Math.cos(jd); var points =[new SuperMap.Geometry.Point(v_o_x,v_o_y), new SuperMap.Geometry.Point(v_1_x,v_1_y), new SuperMap.Geometry.Point(v_2_x,v_2_y), new SuperMap.Geometry.Point(v_3_x,v_3_y), new SuperMap.Geometry.Point(v_4_x,v_4_y)]; linearRings = new SuperMap.Geometry.LinearRing(points); region = new SuperMap.Geometry.Polygon([linearRings]); //船首线与船速成正比 if(gis.script.isNum(s)&&s>0) { //console.log('>1>ship:',ship); var c_j = 0.0004500; c_j=c_j*s/10+0.0003000; var v_j_x=x+0*Math.cos(jd)-c_j*Math.sin(jd); var v_j_y=y+0*Math.sin(jd)+c_j*Math.cos(jd); var pointst =[new SuperMap.Geometry.Point(v_o_x,v_o_y), new SuperMap.Geometry.Point(v_j_x,v_j_y), new SuperMap.Geometry.Point(v_o_x,v_o_y), ]; //console.log('>1>pointst:',pointst); var linearRingst = new SuperMap.Geometry.LinearRing(pointst); region = new SuperMap.Geometry.Polygon([linearRingst,linearRings]); } var pointFeature = new SuperMap.Feature.Vector(region); var colerStyle = shipColor(ship); /* pointFeature.style={ fillColor:colerStyle, strokeColor:"yellow", pointRadius:7 }; */ pointFeature.attributes.onSelectOpenPopkey="openPop_Boat"; pointFeature.attributes.onID=ship.name; pointFeature.attributes.onMMSI=ship.mmsi; pointFeature.attributes.onCname=ship.hscname; pointFeature.attributes.shipLON=x; pointFeature.attributes.shipLAT=y; layer.addFeatures(pointFeature); } } gis.script.drawFillMarkerToMultiPolygon = function (layer,ship){ if(ship){ //x:LON;y:LAT;c:COURSE;l:LENGTH;w:WIDTH;s:SPEED; var x = ship.LON||parseFloat(ship.lon); var y = ship.LAT||parseFloat(ship.lat); var c = ship.COURSE||parseFloat(ship.course)||90.0; var l = ship.LENGTH||parseFloat(ship.length); var w = ship.WIDTH||parseFloat(ship.width); var s = ship.SPEED||parseFloat(ship.speed); //先以中心点为原点 var jd = parseInt(c); //后期考虑转换异常,异常方向取0度 jd = -(jd/180) * Math.PI;//弧度 顺时针旋转 //20公里:1厘米比例尺 var c_x=0.000075;//船舶单位长度,按照长、宽系数同比例缩放,150米长度 //if(w>1) //c_x=c_x*w/100; var c_y=0.00015;//船舶单位长度,按照长、宽系数同比例缩放,300米长度 //if(l>1) //c_y=c_y*l/100; var _o_x=0;//船舶顶点 var _o_y=c_y*2; var v_o_x=x+_o_x*Math.cos(jd)-_o_y*Math.sin(jd); var v_o_y=y+_o_x*Math.sin(jd)+_o_y*Math.cos(jd); var _1_x=c_x;//船舶角点1 var _1_y=c_y; var v_1_x=x+_1_x*Math.cos(jd)-_1_y*Math.sin(jd); var v_1_y=y+_1_x*Math.sin(jd)+_1_y*Math.cos(jd); var _2_x=c_x;//船舶角点2 var _2_y=-c_y; var v_2_x=x+_2_x*Math.cos(jd)-_2_y*Math.sin(jd); var v_2_y=y+_2_x*Math.sin(jd)+_2_y*Math.cos(jd); var _3_x=-c_x;//船舶角点3 var _3_y=-c_y; var v_3_x=x+_3_x*Math.cos(jd)-_3_y*Math.sin(jd); var v_3_y=y+_3_x*Math.sin(jd)+_3_y*Math.cos(jd); var _4_x=-c_x;//船舶角点4 var _4_y=c_y; var v_4_x=x+_4_x*Math.cos(jd)-_4_y*Math.sin(jd); var v_4_y=y+_4_x*Math.sin(jd)+_4_y*Math.cos(jd); var points =[new SuperMap.Geometry.Point(v_o_x,v_o_y), new SuperMap.Geometry.Point(v_1_x,v_1_y), new SuperMap.Geometry.Point(v_2_x,v_2_y), new SuperMap.Geometry.Point(v_3_x,v_3_y), new SuperMap.Geometry.Point(v_4_x,v_4_y)]; linearRings = new SuperMap.Geometry.LinearRing(points); region = new SuperMap.Geometry.Polygon([linearRings]); return region; } return null; } /** * 返还船只颜色 * */ function shipColor(ship){ if(this.currentState=="danger"){ return getColorByDanger(ship); }else if(this.currentState=="shiptype"){ return getColorByShipType(ship); }else if(this.currentState=="sailstate"){ return getColorBySailState(ship); } //return '#ffffff' ; return '#0004FF' ; } function getColorByDanger(ship){ var fc='#00FF00';//默认绿色 if(ship.DANGER=="1") fc='#FF0000';//危险船舶显示红色 return fc ; } function getColorByShipType(ship){ var allShiptype = ship.SHIP_TYPE; var shiptype = allShiptype.charAt(0); if(shiptype=="8") return '#ff0012' ; if(shiptype=="7") return '#00FF00' ; if(shiptype=="3") return '#00FFFE'; if(shiptype=="6") return '#0004FF' ; return '#C0C0C0' ; } function getColorBySailState(ship){ if(ship.STATUS=="5") return '#FC010A'; if(ship.STATUS=="1") return '#595E40'; if(ship.STATUS=="0"||ship.STATUS=="8") return '#00FF00'; if(ship.STATUS=="6") return '#F29554'; //其它 return '#C0C0C0' ; } gis.script.loadboatLayer2=function(layer,o){ if(layer&& o&&o.length){ for(var i=0;i