Commit c2cffa75d7ef7549f98d302cee3cc45bfdff4f42

Authored by Edmar Moretti
1 parent 28cecf2e

Conversão do editor vetorial de OL2 para OL3

Showing 1 changed file with 144 additions and 143 deletions   Show diff stats
ferramentas/editorol/editorol.js
@@ -60,7 +60,7 @@ i3GEO.editorOL = @@ -60,7 +60,7 @@ i3GEO.editorOL =
60 opacidade : 0.8, 60 opacidade : 0.8,
61 texto : "", 61 texto : "",
62 fillColor : "250,180,15", 62 fillColor : "250,180,15",
63 - strokeWidth : 2, 63 + strokeWidth : 5,
64 strokeColor : "250,150,0", 64 strokeColor : "250,150,0",
65 pointRadius : 4, 65 pointRadius : 4,
66 graphicName : "square", 66 graphicName : "square",
@@ -80,6 +80,8 @@ i3GEO.editorOL = @@ -80,6 +80,8 @@ i3GEO.editorOL =
80 map : i3geoOL 80 map : i3geoOL
81 }), 81 }),
82 nomeFuncaoSalvar : "i3GEO.editorOL.salvaGeo()", 82 nomeFuncaoSalvar : "i3GEO.editorOL.salvaGeo()",
  83 + //substituir por i3GEO.Interface.openlayers.fundoDefault()
  84 + /*
83 e_oce : new ol.layer.Tile( 85 e_oce : new ol.layer.Tile(
84 { 86 {
85 title : "ESRI Ocean Basemap", 87 title : "ESRI Ocean Basemap",
@@ -163,6 +165,7 @@ i3GEO.editorOL = @@ -163,6 +165,7 @@ i3GEO.editorOL =
163 }) 165 })
164 }), 166 }),
165 fundo : "e_ims,e_wsm,ol_mma,ol_wms,top_wms", 167 fundo : "e_ims,e_wsm,ol_mma,ol_wms,top_wms",
  168 + */
166 kml : [], 169 kml : [],
167 layersIniciais : [], 170 layersIniciais : [],
168 //essa configuracao dos botoes afeta apenas o mashup 171 //essa configuracao dos botoes afeta apenas o mashup
@@ -976,35 +979,34 @@ i3GEO.editorOL = @@ -976,35 +979,34 @@ i3GEO.editorOL =
976 i3GEO.util.comboTemas("editorOLcomboTemaEditavel", funcaoCombo, "editorOLondeComboTemaEditavel", "", false, "editavel"); 979 i3GEO.util.comboTemas("editorOLcomboTemaEditavel", funcaoCombo, "editorOLondeComboTemaEditavel", "", false, "editavel");
977 } 980 }
978 }, 981 },
  982 + //muda a classe do botao para marca-lo como ativo
  983 + marcaBotao : function(classeBotao){
  984 + //desmarca todos os botoes
  985 + var i, n, botoes = $i("i3GEObarraEdicao").getElementsByTagName("div");
  986 + n = botoes.length;
  987 + for(i = 0; i < n; i++){
  988 + botoes[i].className = botoes[i].className.replace("ItemActive","ItemInactive");
  989 + botoes[i].className = botoes[i].className.replace(classeBotao+"ItemInactive",classeBotao+"ItemActive");
  990 + }
  991 + i3GEO.editorOL.removeInteracoes();
  992 + },
  993 + //interacoes criadas ao ativar algum botao
  994 + //usado para remover as interacoes
  995 + interacoes : [],
  996 + removeInteracoes: function(){
  997 + var i, n;
  998 + n = i3GEO.editorOL.interacoes.length;
  999 + for(i = 0; i < n; i++){
  1000 + i3geoOL.removeInteraction(i3GEO.editorOL.interacoes[i]);
  1001 + }
  1002 + i3GEO.editorOL.interacoes = [];
  1003 + },
979 criaBotoes : function(botoes) { 1004 criaBotoes : function(botoes) {
980 if($i("i3GEObarraEdicao")){ 1005 if($i("i3GEObarraEdicao")){
981 $i("i3GEObarraEdicao").style.display = "block"; 1006 $i("i3GEObarraEdicao").style.display = "block";
982 return; 1007 return;
983 } 1008 }
984 - var largura = 30, temp, controles = [], adiciona = true, sketchSymbolizers = {  
985 - "Point" : {  
986 - pointRadius : 4,  
987 - graphicName : "square",  
988 - fillColor : "white",  
989 - fillOpacity : 1,  
990 - strokeWidth : 1,  
991 - strokeOpacity : 1,  
992 - strokeColor : "#333333"  
993 - },  
994 - "Line" : {  
995 - strokeWidth : 3,  
996 - strokeOpacity : 1,  
997 - strokeColor : "#666666",  
998 - strokeDashstyle : "dash"  
999 - },  
1000 - "Polygon" : {  
1001 - strokeWidth : 2,  
1002 - strokeOpacity : 1,  
1003 - strokeColor : "#666666",  
1004 - fillColor : "white",  
1005 - fillOpacity : 0.3  
1006 - }  
1007 - }; 1009 + var temp, controles = [], adiciona = true;
1008 //cria o painel onde entrarão os icones 1010 //cria o painel onde entrarão os icones
1009 i3GEOpanelEditor = document.createElement("div"); 1011 i3GEOpanelEditor = document.createElement("div");
1010 i3GEOpanelEditor.id = "i3GEObarraEdicao"; 1012 i3GEOpanelEditor.id = "i3GEObarraEdicao";
@@ -1018,24 +1020,24 @@ i3GEO.editorOL = @@ -1018,24 +1020,24 @@ i3GEO.editorOL =
1018 YAHOO.procura.container.panel.show(); 1020 YAHOO.procura.container.panel.show();
1019 }; 1021 };
1020 i3GEOpanelEditor.appendChild(temp); 1022 i3GEOpanelEditor.appendChild(temp);
1021 - largura += 30;  
1022 } 1023 }
1023 if (botoes.pan === true) { 1024 if (botoes.pan === true) {
1024 temp = document.createElement("div"); 1025 temp = document.createElement("div");
1025 temp.className = "editorOLpanItemInactive olButton"; 1026 temp.className = "editorOLpanItemInactive olButton";
1026 temp.title = "pan"; 1027 temp.title = "pan";
1027 temp.onclick = function(){ 1028 temp.onclick = function(){
  1029 + i3GEO.editorOL.marcaBotao("editorOLpan");
1028 }; 1030 };
1029 i3GEOpanelEditor.appendChild(temp); 1031 i3GEOpanelEditor.appendChild(temp);
1030 - largura += 30;  
1031 } 1032 }
1032 if (botoes.zoombox === true) { 1033 if (botoes.zoombox === true) {
1033 temp = document.createElement("div"); 1034 temp = document.createElement("div");
1034 temp.className = "editorOLzoomboxItemInactive olButton"; 1035 temp.className = "editorOLzoomboxItemInactive olButton";
1035 temp.title = "zoombox"; 1036 temp.title = "zoombox";
1036 - temp.onclick = i3GEO.barraDeBotoes.defBotao("zoomli").funcaoonclick; 1037 + temp.onclick = function(){
  1038 + i3GEO.barraDeBotoes.defBotao("zoomli").funcaoonclick;
  1039 + };
1037 i3GEOpanelEditor.appendChild(temp); 1040 i3GEOpanelEditor.appendChild(temp);
1038 - largura += 30;  
1039 } 1041 }
1040 if (botoes.zoomtot === true) { 1042 if (botoes.zoomtot === true) {
1041 temp = document.createElement("div"); 1043 temp = document.createElement("div");
@@ -1049,7 +1051,6 @@ i3GEO.editorOL = @@ -1049,7 +1051,6 @@ i3GEO.editorOL =
1049 } 1051 }
1050 }; 1052 };
1051 i3GEOpanelEditor.appendChild(temp); 1053 i3GEOpanelEditor.appendChild(temp);
1052 - largura += 30;  
1053 } 1054 }
1054 if (botoes.zoomin === true) { 1055 if (botoes.zoomin === true) {
1055 temp = document.createElement("div"); 1056 temp = document.createElement("div");
@@ -1060,7 +1061,6 @@ i3GEO.editorOL = @@ -1060,7 +1061,6 @@ i3GEO.editorOL =
1060 v.setZoom(v.getZoom() + 1); 1061 v.setZoom(v.getZoom() + 1);
1061 }; 1062 };
1062 i3GEOpanelEditor.appendChild(temp); 1063 i3GEOpanelEditor.appendChild(temp);
1063 - largura += 30;  
1064 } 1064 }
1065 if (botoes.zoomout === true) { 1065 if (botoes.zoomout === true) {
1066 temp = document.createElement("div"); 1066 temp = document.createElement("div");
@@ -1071,7 +1071,6 @@ i3GEO.editorOL = @@ -1071,7 +1071,6 @@ i3GEO.editorOL =
1071 v.setZoom(v.getZoom() - 1); 1071 v.setZoom(v.getZoom() - 1);
1072 }; 1072 };
1073 i3GEOpanelEditor.appendChild(temp); 1073 i3GEOpanelEditor.appendChild(temp);
1074 - largura += 30;  
1075 } 1074 }
1076 if (botoes.legenda === true) { 1075 if (botoes.legenda === true) {
1077 temp = document.createElement("div"); 1076 temp = document.createElement("div");
@@ -1081,139 +1080,141 @@ i3GEO.editorOL = @@ -1081,139 +1080,141 @@ i3GEO.editorOL =
1081 i3GEO.editorOL.mostraLegenda(); 1080 i3GEO.editorOL.mostraLegenda();
1082 }; 1081 };
1083 i3GEOpanelEditor.appendChild(temp); 1082 i3GEOpanelEditor.appendChild(temp);
1084 - largura += 30;  
1085 } 1083 }
1086 if (botoes.distancia === true) { 1084 if (botoes.distancia === true) {
1087 temp = document.createElement("div"); 1085 temp = document.createElement("div");
1088 temp.className = "editorOLdistanciaItemInactive olButton"; 1086 temp.className = "editorOLdistanciaItemInactive olButton";
1089 temp.title = $trad("d21t"); 1087 temp.title = $trad("d21t");
1090 - temp.onclick = i3GEO.barraDeBotoes.defBotao("mede").funcaoonclick; 1088 + temp.onclick = function(){
  1089 + i3GEO.editorOL.marcaBotao("editorOLdistancia");
  1090 + i3GEO.barraDeBotoes.defBotao("mede").funcaoonclick;
  1091 + };
1091 i3GEOpanelEditor.appendChild(temp); 1092 i3GEOpanelEditor.appendChild(temp);
1092 - largura += 30;  
1093 } 1093 }
1094 if (botoes.area === true) { 1094 if (botoes.area === true) {
1095 temp = document.createElement("div"); 1095 temp = document.createElement("div");
1096 temp.className = "editorOLareaItemInactive olButton"; 1096 temp.className = "editorOLareaItemInactive olButton";
1097 temp.title = $trad("d21at"); 1097 temp.title = $trad("d21at");
1098 - temp.onclick = i3GEO.barraDeBotoes.defBotao("area").funcaoonclick; 1098 + temp.onclick = function(){
  1099 + i3GEO.editorOL.marcaBotao("editorOLarea");
  1100 + i3GEO.barraDeBotoes.defBotao("area").funcaoonclick;
  1101 + }
1099 i3GEOpanelEditor.appendChild(temp); 1102 i3GEOpanelEditor.appendChild(temp);
1100 - largura += 30;  
1101 } 1103 }
1102 - i3GEOpanelEditor.style.width = largura + "px";  
1103 - i3GEO.editorOL.mapa.getViewport().getElementsByClassName("ol-overlaycontainer-stopevent")[0].appendChild(i3GEOpanelEditor);  
1104 -  
1105 - /*  
1106 -  
1107 if (botoes.linha === true) { 1104 if (botoes.linha === true) {
1108 -  
1109 - button = new OpenLayers.Control.DrawFeature(i3GEO.desenho.layergrafico, OpenLayers.Handler.Path, {  
1110 - displayClass : "editorOLlinha",  
1111 - title : $trad("dlinha"),  
1112 - type : OpenLayers.Control.TYPE_TOOL,  
1113 - callbacks : {  
1114 - done : function(feature) {  
1115 - var f = new OpenLayers.Feature.Vector(feature);  
1116 - f["attributes"] = {  
1117 - opacidade : i3GEO.editorOL.simbologia.opacidade,  
1118 - texto : i3GEO.editorOL.simbologia.texto,  
1119 - fillColor : i3GEO.editorOL.simbologia.fillColor,  
1120 - strokeWidth : i3GEO.editorOL.simbologia.strokeWidth,  
1121 - strokeColor : i3GEO.editorOL.simbologia.strokeColor,  
1122 - pointRadius : i3GEO.editorOL.simbologia.pointRadius,  
1123 - graphicName : i3GEO.editorOL.simbologia.graphicName  
1124 - };  
1125 - i3GEO.desenho.layergrafico.addFeatures([  
1126 - f  
1127 - ]);  
1128 - if (document.getElementById("panellistagEditor")) {  
1129 - i3GEO.editorOL.listaGeometrias();  
1130 - }  
1131 - i3GEO.editorOL.sobeLayersGraficos(); 1105 + temp = document.createElement("div");
  1106 + temp.className = "editorOLlinhaItemInactive olButton";
  1107 + temp.title = $trad("dlinha");
  1108 + temp.onclick = function(){
  1109 + i3GEO.editorOL.marcaBotao("editorOLlinha");
  1110 + var draw = new ol.interaction.Draw({
  1111 + type : "LineString"
  1112 + });
  1113 + //adiciona a interacao para poder ser removida
  1114 + i3GEO.editorOL.interacoes.push(draw);
  1115 + i3GEO.Interface.openlayers.interacoes[0].setActive(false);
  1116 + draw.on("drawend", function(evt) {
  1117 + evt.feature.setStyle(
  1118 + new ol.style.Style({
  1119 + stroke: new ol.style.Stroke({
  1120 + color: 'rgba(' + i3GEO.editorOL.simbologia.strokeColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')',
  1121 + width: i3GEO.editorOL.simbologia.strokeWidth
  1122 + }),
  1123 + fill: new ol.style.Fill({
  1124 + color: 'rgba(' + i3GEO.editorOL.simbologia.fillColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')'
  1125 + })
  1126 + })
  1127 + );
  1128 + i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);
  1129 + draw.setActive(false);
  1130 + draw.setActive(true);
  1131 + if (document.getElementById("panellistagEditor")) {
  1132 + i3GEO.editorOL.listaGeometrias();
1132 } 1133 }
1133 - }  
1134 - });  
1135 - controles.push(button);  
1136 - adiciona = true;  
1137 - 1134 + });
  1135 + i3geoOL.addInteraction(draw);
  1136 + };
  1137 + i3GEOpanelEditor.appendChild(temp);
1138 } 1138 }
  1139 + //TODO falta definir imagem
1139 if (botoes.ponto === true) { 1140 if (botoes.ponto === true) {
1140 -  
1141 - button = new OpenLayers.Control.DrawFeature(i3GEO.desenho.layergrafico, OpenLayers.Handler.Point, {  
1142 - displayClass : "editorOLponto",  
1143 - title : $trad("dponto"),  
1144 - type : OpenLayers.Control.TYPE_TOOL,  
1145 - callbacks : {  
1146 - done : function(feature) {  
1147 - var f, style_mark;  
1148 - if (i3GEO.editorOL.simbologia.externalGraphic != "") {  
1149 - style_mark = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);  
1150 - style_mark.externalGraphic = i3GEO.editorOL.simbologia.externalGraphic;  
1151 - style_mark.graphicWidth = i3GEO.editorOL.simbologia.graphicWidth;  
1152 - style_mark.graphicHeight = i3GEO.editorOL.simbologia.graphicHeight;  
1153 - style_mark.fillOpacity = i3GEO.editorOL.simbologia.opacidade;  
1154 - f = new OpenLayers.Feature.Vector(feature, null, style_mark);  
1155 - } else {  
1156 - f = new OpenLayers.Feature.Vector(feature);  
1157 - }  
1158 - f["attributes"] = {  
1159 - opacidade : i3GEO.editorOL.simbologia.opacidade,  
1160 - texto : i3GEO.editorOL.simbologia.texto,  
1161 - fillColor : i3GEO.editorOL.simbologia.fillColor,  
1162 - strokeWidth : i3GEO.editorOL.simbologia.strokeWidth,  
1163 - strokeColor : i3GEO.editorOL.simbologia.strokeColor,  
1164 - pointRadius : i3GEO.editorOL.simbologia.pointRadius,  
1165 - graphicName : i3GEO.editorOL.simbologia.graphicName,  
1166 - externalGraphic : i3GEO.editorOL.simbologia.externalGraphic,  
1167 - graphicHeight : i3GEO.editorOL.simbologia.graphicHeight,  
1168 - graphicWidth : i3GEO.editorOL.simbologia.graphicWidth  
1169 - };  
1170 - i3GEO.desenho.layergrafico.addFeatures([  
1171 - f  
1172 - ]);  
1173 - if (document.getElementById("panellistagEditor")) {  
1174 - i3GEO.editorOL.listaGeometrias();  
1175 - }  
1176 - i3GEO.editorOL.sobeLayersGraficos(); 1141 + temp = document.createElement("div");
  1142 + temp.className = "editorOLpontoItemInactive olButton";
  1143 + temp.title = $trad("dponto");
  1144 + temp.onclick = function(){
  1145 + i3GEO.editorOL.marcaBotao("editorOLponto");
  1146 + var draw = new ol.interaction.Draw({
  1147 + type : "Point"
  1148 + });
  1149 + //adiciona a interacao para poder ser removida
  1150 + i3GEO.editorOL.interacoes.push(draw);
  1151 + i3GEO.Interface.openlayers.interacoes[0].setActive(false);
  1152 + draw.on("drawend", function(evt) {
  1153 + evt.feature.setStyle(
  1154 + new ol.style.Style({
  1155 + image: new ol.style.Circle({
  1156 + radius: i3GEO.editorOL.simbologia.pointRadius,
  1157 + fill: new ol.style.Fill({
  1158 + color: 'rgba(' + i3GEO.editorOL.simbologia.fillColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')'
  1159 + }),
  1160 + stroke: new ol.style.Stroke({
  1161 + color: 'rgba(' + i3GEO.editorOL.simbologia.strokeColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')',
  1162 + width: i3GEO.editorOL.simbologia.pointRadius / 3
  1163 + })
  1164 + })
  1165 + })
  1166 + );
  1167 + i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);
  1168 + draw.setActive(false);
  1169 + draw.setActive(true);
  1170 + if (document.getElementById("panellistagEditor")) {
  1171 + i3GEO.editorOL.listaGeometrias();
1177 } 1172 }
1178 - }  
1179 - });  
1180 - controles.push(button);  
1181 - adiciona = true;  
1182 - 1173 + });
  1174 + i3geoOL.addInteraction(draw);
  1175 + };
  1176 + i3GEOpanelEditor.appendChild(temp);
1183 } 1177 }
1184 if (botoes.poligono === true) { 1178 if (botoes.poligono === true) {
1185 -  
1186 - button = new OpenLayers.Control.DrawFeature(i3GEO.desenho.layergrafico, OpenLayers.Handler.Polygon, {  
1187 - displayClass : "editorOLpoligono",  
1188 - title : $trad("dpol"),  
1189 - type : OpenLayers.Control.TYPE_TOOL,  
1190 - // handlerOptions: {holeModifier: "altKey"},  
1191 - callbacks : {  
1192 - done : function(feature) {  
1193 - var f = new OpenLayers.Feature.Vector(feature);  
1194 - f["attributes"] = {  
1195 - opacidade : i3GEO.editorOL.simbologia.opacidade,  
1196 - texto : i3GEO.editorOL.simbologia.texto,  
1197 - fillColor : i3GEO.editorOL.simbologia.fillColor,  
1198 - strokeWidth : i3GEO.editorOL.simbologia.strokeWidth,  
1199 - strokeColor : i3GEO.editorOL.simbologia.strokeColor,  
1200 - pointRadius : i3GEO.editorOL.simbologia.pointRadius,  
1201 - graphicName : i3GEO.editorOL.simbologia.graphicName  
1202 - };  
1203 - i3GEO.desenho.layergrafico.addFeatures([  
1204 - f  
1205 - ]);  
1206 - if (document.getElementById("panellistagEditor")) {  
1207 - i3GEO.editorOL.listaGeometrias();  
1208 - }  
1209 - i3GEO.editorOL.sobeLayersGraficos(); 1179 + temp = document.createElement("div");
  1180 + temp.className = "editorOLpoligonoItemInactive olButton";
  1181 + temp.title = $trad("dpoligono");
  1182 + temp.onclick = function(){
  1183 + i3GEO.editorOL.marcaBotao("editorOLpoligono");
  1184 + var draw = new ol.interaction.Draw({
  1185 + type : "Polygon"
  1186 + });
  1187 + //adiciona a interacao para poder ser removida
  1188 + i3GEO.editorOL.interacoes.push(draw);
  1189 + i3GEO.Interface.openlayers.interacoes[0].setActive(false);
  1190 + draw.on("drawend", function(evt) {
  1191 + evt.feature.setStyle(
  1192 + new ol.style.Style({
  1193 + stroke: new ol.style.Stroke({
  1194 + color: 'rgba(' + i3GEO.editorOL.simbologia.strokeColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')',
  1195 + width: i3GEO.editorOL.simbologia.strokeWidth
  1196 + }),
  1197 + fill: new ol.style.Fill({
  1198 + color: 'rgba(' + i3GEO.editorOL.simbologia.fillColor + ',' + i3GEO.editorOL.simbologia.opacidade + ')'
  1199 + })
  1200 + })
  1201 + );
  1202 + i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);
  1203 + draw.setActive(false);
  1204 + draw.setActive(true);
  1205 + if (document.getElementById("panellistagEditor")) {
  1206 + i3GEO.editorOL.listaGeometrias();
1210 } 1207 }
1211 - }  
1212 - });  
1213 - controles.push(button);  
1214 - adiciona = true;  
1215 - 1208 + });
  1209 + i3geoOL.addInteraction(draw);
  1210 + };
  1211 + i3GEOpanelEditor.appendChild(temp);
1216 } 1212 }
  1213 +
  1214 + i3GEOpanelEditor.style.width = i3GEOpanelEditor.getElementsByTagName("div").length * 33 + "px";
  1215 + i3GEO.editorOL.mapa.getViewport().getElementsByClassName("ol-overlaycontainer-stopevent")[0].appendChild(i3GEOpanelEditor);
  1216 +
  1217 + /*
1217 if (botoes.texto === true) { 1218 if (botoes.texto === true) {
1218 1219
1219 button = new OpenLayers.Control.DrawFeature(i3GEO.desenho.layergrafico, OpenLayers.Handler.Point, { 1220 button = new OpenLayers.Control.DrawFeature(i3GEO.desenho.layergrafico, OpenLayers.Handler.Point, {