gis.map.drawboat.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. gis.script.clickDrawFillMarker = function (treeNode){
  2. boatLayer.removeAllFeatures();
  3. gis.script.drawFillMarker(boatLayer,treeNode);
  4. }
  5. /*
  6. * 绘画船舶
  7. */
  8. gis.script.drawFillMarker = function (layer,ship){
  9. if(layer&&ship){
  10. //x:LON;y:LAT;c:COURSE;l:LENGTH;w:WIDTH;s:SPEED;
  11. var x = ship.LON||parseFloat(ship.lon);
  12. var y = ship.LAT||parseFloat(ship.lat);
  13. var c = ship.COURSE||parseFloat(ship.course)||90.0;
  14. var l = ship.LENGTH||parseFloat(ship.length);
  15. var w = ship.WIDTH||parseFloat(ship.width);
  16. var s = ship.SPEED||parseFloat(ship.speed);
  17. //先以中心点为原点
  18. var jd = parseInt(c); //后期考虑转换异常,异常方向取0度
  19. jd = -(jd/180) * Math.PI;//弧度 顺时针旋转
  20. //20公里:1厘米比例尺
  21. var c_x=0.000075;//船舶单位长度,按照长、宽系数同比例缩放,150米长度
  22. //if(w>1)
  23. //c_x=c_x*w/100;
  24. var c_y=0.00015;//船舶单位长度,按照长、宽系数同比例缩放,300米长度
  25. //if(l>1)
  26. //c_y=c_y*l/100;
  27. var _o_x=0;//船舶顶点
  28. var _o_y=c_y*2;
  29. var v_o_x=x+_o_x*Math.cos(jd)-_o_y*Math.sin(jd);
  30. var v_o_y=y+_o_x*Math.sin(jd)+_o_y*Math.cos(jd);
  31. var _1_x=c_x;//船舶角点1
  32. var _1_y=c_y;
  33. var v_1_x=x+_1_x*Math.cos(jd)-_1_y*Math.sin(jd);
  34. var v_1_y=y+_1_x*Math.sin(jd)+_1_y*Math.cos(jd);
  35. var _2_x=c_x;//船舶角点2
  36. var _2_y=-c_y;
  37. var v_2_x=x+_2_x*Math.cos(jd)-_2_y*Math.sin(jd);
  38. var v_2_y=y+_2_x*Math.sin(jd)+_2_y*Math.cos(jd);
  39. var _3_x=-c_x;//船舶角点3
  40. var _3_y=-c_y;
  41. var v_3_x=x+_3_x*Math.cos(jd)-_3_y*Math.sin(jd);
  42. var v_3_y=y+_3_x*Math.sin(jd)+_3_y*Math.cos(jd);
  43. var _4_x=-c_x;//船舶角点4
  44. var _4_y=c_y;
  45. var v_4_x=x+_4_x*Math.cos(jd)-_4_y*Math.sin(jd);
  46. var v_4_y=y+_4_x*Math.sin(jd)+_4_y*Math.cos(jd);
  47. var points =[new SuperMap.Geometry.Point(v_o_x,v_o_y),
  48. new SuperMap.Geometry.Point(v_1_x,v_1_y),
  49. new SuperMap.Geometry.Point(v_2_x,v_2_y),
  50. new SuperMap.Geometry.Point(v_3_x,v_3_y),
  51. new SuperMap.Geometry.Point(v_4_x,v_4_y)];
  52. linearRings = new SuperMap.Geometry.LinearRing(points);
  53. region = new SuperMap.Geometry.Polygon([linearRings]);
  54. //船首线与船速成正比
  55. if(gis.script.isNum(s)&&s>0)
  56. {
  57. //console.log('>1>ship:',ship);
  58. var c_j = 0.0004500;
  59. c_j=c_j*s/10+0.0003000;
  60. var v_j_x=x+0*Math.cos(jd)-c_j*Math.sin(jd);
  61. var v_j_y=y+0*Math.sin(jd)+c_j*Math.cos(jd);
  62. var pointst =[new SuperMap.Geometry.Point(v_o_x,v_o_y),
  63. new SuperMap.Geometry.Point(v_j_x,v_j_y),
  64. new SuperMap.Geometry.Point(v_o_x,v_o_y),
  65. ];
  66. //console.log('>1>pointst:',pointst);
  67. var linearRingst = new SuperMap.Geometry.LinearRing(pointst);
  68. region = new SuperMap.Geometry.Polygon([linearRingst,linearRings]);
  69. }
  70. var pointFeature = new SuperMap.Feature.Vector(region);
  71. var colerStyle = shipColor(ship);
  72. /*
  73. pointFeature.style={
  74. fillColor:colerStyle,
  75. strokeColor:"yellow",
  76. pointRadius:7
  77. };
  78. */
  79. pointFeature.attributes.onSelectOpenPopkey="openPop_Boat";
  80. pointFeature.attributes.onID=ship.name;
  81. pointFeature.attributes.onMMSI=ship.mmsi;
  82. pointFeature.attributes.onCname=ship.hscname;
  83. pointFeature.attributes.shipLON=x;
  84. pointFeature.attributes.shipLAT=y;
  85. layer.addFeatures(pointFeature);
  86. }
  87. }
  88. gis.script.drawFillMarkerToMultiPolygon = function (layer,ship){
  89. if(ship){
  90. //x:LON;y:LAT;c:COURSE;l:LENGTH;w:WIDTH;s:SPEED;
  91. var x = ship.LON||parseFloat(ship.lon);
  92. var y = ship.LAT||parseFloat(ship.lat);
  93. var c = ship.COURSE||parseFloat(ship.course)||90.0;
  94. var l = ship.LENGTH||parseFloat(ship.length);
  95. var w = ship.WIDTH||parseFloat(ship.width);
  96. var s = ship.SPEED||parseFloat(ship.speed);
  97. //先以中心点为原点
  98. var jd = parseInt(c); //后期考虑转换异常,异常方向取0度
  99. jd = -(jd/180) * Math.PI;//弧度 顺时针旋转
  100. //20公里:1厘米比例尺
  101. var c_x=0.000075;//船舶单位长度,按照长、宽系数同比例缩放,150米长度
  102. //if(w>1)
  103. //c_x=c_x*w/100;
  104. var c_y=0.00015;//船舶单位长度,按照长、宽系数同比例缩放,300米长度
  105. //if(l>1)
  106. //c_y=c_y*l/100;
  107. var _o_x=0;//船舶顶点
  108. var _o_y=c_y*2;
  109. var v_o_x=x+_o_x*Math.cos(jd)-_o_y*Math.sin(jd);
  110. var v_o_y=y+_o_x*Math.sin(jd)+_o_y*Math.cos(jd);
  111. var _1_x=c_x;//船舶角点1
  112. var _1_y=c_y;
  113. var v_1_x=x+_1_x*Math.cos(jd)-_1_y*Math.sin(jd);
  114. var v_1_y=y+_1_x*Math.sin(jd)+_1_y*Math.cos(jd);
  115. var _2_x=c_x;//船舶角点2
  116. var _2_y=-c_y;
  117. var v_2_x=x+_2_x*Math.cos(jd)-_2_y*Math.sin(jd);
  118. var v_2_y=y+_2_x*Math.sin(jd)+_2_y*Math.cos(jd);
  119. var _3_x=-c_x;//船舶角点3
  120. var _3_y=-c_y;
  121. var v_3_x=x+_3_x*Math.cos(jd)-_3_y*Math.sin(jd);
  122. var v_3_y=y+_3_x*Math.sin(jd)+_3_y*Math.cos(jd);
  123. var _4_x=-c_x;//船舶角点4
  124. var _4_y=c_y;
  125. var v_4_x=x+_4_x*Math.cos(jd)-_4_y*Math.sin(jd);
  126. var v_4_y=y+_4_x*Math.sin(jd)+_4_y*Math.cos(jd);
  127. var points =[new SuperMap.Geometry.Point(v_o_x,v_o_y),
  128. new SuperMap.Geometry.Point(v_1_x,v_1_y),
  129. new SuperMap.Geometry.Point(v_2_x,v_2_y),
  130. new SuperMap.Geometry.Point(v_3_x,v_3_y),
  131. new SuperMap.Geometry.Point(v_4_x,v_4_y)];
  132. linearRings = new SuperMap.Geometry.LinearRing(points);
  133. region = new SuperMap.Geometry.Polygon([linearRings]);
  134. return region;
  135. }
  136. return null;
  137. }
  138. /**
  139. * 返还船只颜色
  140. * */
  141. function shipColor(ship){
  142. if(this.currentState=="danger"){
  143. return getColorByDanger(ship);
  144. }else if(this.currentState=="shiptype"){
  145. return getColorByShipType(ship);
  146. }else if(this.currentState=="sailstate"){
  147. return getColorBySailState(ship);
  148. }
  149. //return '#ffffff' ;
  150. return '#0004FF' ;
  151. }
  152. function getColorByDanger(ship){
  153. var fc='#00FF00';//默认绿色
  154. if(ship.DANGER=="1")
  155. fc='#FF0000';//危险船舶显示红色
  156. return fc ;
  157. }
  158. function getColorByShipType(ship){
  159. var allShiptype = ship.SHIP_TYPE;
  160. var shiptype = allShiptype.charAt(0);
  161. if(shiptype=="8")
  162. return '#ff0012' ;
  163. if(shiptype=="7")
  164. return '#00FF00' ;
  165. if(shiptype=="3")
  166. return '#00FFFE';
  167. if(shiptype=="6")
  168. return '#0004FF' ;
  169. return '#C0C0C0' ;
  170. }
  171. function getColorBySailState(ship){
  172. if(ship.STATUS=="5")
  173. return '#FC010A';
  174. if(ship.STATUS=="1")
  175. return '#595E40';
  176. if(ship.STATUS=="0"||ship.STATUS=="8")
  177. return '#00FF00';
  178. if(ship.STATUS=="6")
  179. return '#F29554';
  180. //其它
  181. return '#C0C0C0' ;
  182. }
  183. gis.script.loadboatLayer2=function(layer,o){
  184. if(layer&&
  185. o&&o.length){
  186. for(var i=0;i<o.length;i++){
  187. var obj=o[i];
  188. var point= new SuperMap.Geometry.Point(obj.lon,obj.lat);
  189. point.arrt=obj;
  190. gis.script.cbpointInfo.push(point);
  191. var pointFeature = new SuperMap.Feature.Vector(point);
  192. pointFeature.style={
  193. fillColor:"red",
  194. strokeColor:"yellow",
  195. pointRadius:7
  196. };
  197. pointFeature.attributes.onSelectOpenPopkey="openPop_Boat";
  198. pointFeature.attributes.onID=obj.id;
  199. layer.addFeatures(pointFeature);
  200. /*
  201. var geoText = new SuperMap.Geometry.GeoText(obj.lon,obj.lat,"中华人民共和国");
  202. var geotextFeature = new SuperMap.Feature.Vector(geoText);
  203. layer.addFeatures(geotextFeature);
  204. */
  205. }
  206. //x:LON;y:LAT;c:COURSE;l:LENGTH;w:WIDTH;s:SPEED
  207. gis.script.drawFillMarker(layer,{DANGER:'1',LON:119.66,LAT:32.97,COURSE:'90',LENGTH:1,WIDTH:1,SPEED:0});
  208. // var points =[new SuperMap.Geometry.Point(119.66,32.97),
  209. // new SuperMap.Geometry.Point(119.56,32.97),
  210. // new SuperMap.Geometry.Point(119.56,32.87),
  211. // new SuperMap.Geometry.Point(119.66,32.87),
  212. // new SuperMap.Geometry.Point(119.76,32.92)
  213. // ],
  214. // linearRings = new SuperMap.Geometry.LinearRing(points),
  215. // region = new SuperMap.Geometry.Polygon([linearRings]);
  216. // gis.script.cbpointInfo.push(region);
  217. // var pointFeature = new SuperMap.Feature.Vector(region);
  218. // pointFeature.style={
  219. // fillColor:"blue",
  220. // strokeColor:"yellow",
  221. // pointRadius:7
  222. // };
  223. //
  224. // pointFeature.attributes.onSelectOpenPopkey="openPop_Boat";
  225. // pointFeature.attributes.onID='333';
  226. //
  227. // layer.addFeatures(pointFeature);
  228. }
  229. /*
  230. */
  231. }