2013-12-10 3 views
1

난이 :OpenLayers.Protocol.HTTP를 사용하여 커밋 레이어를 변경하는 방법은 무엇입니까?

내가 사용 GeoExt.MapPanel에 (... 생성, 삭제)이 레이어 편집
 var saveStrategy = new OpenLayers.Strategy.Save(); 
    var vector = new OpenLayers.Layer.Vector("vector", { 
       projection: mercator, 
       strategies: [new OpenLayers.Strategy.Fixed(), saveStrategy], 
       protocol: new OpenLayers.Protocol.HTTP({ 
        url: "/test/dtp_json.php", 
        format: new OpenLayers.Format.GeoJSON() 
       }) 
      }); 


     var store = new GeoExt.data.FeatureStore({ 
      fields: [ 
       {name: "dtp", type: "string", convert: dtpname}, 
       {name: "date", type: "date"}, 
       {name: "fio", type: "string"}, 
       {name: "human", type: "long", defaultValue: 0}, 
       {name: "place", type: "string"}, 
       {name: "opisanie", type: "string"} 
      ], 
      layer: vector, 
      addFeatureFilter: function(feature) { 
       return feature.state !== OpenLayers.State.DELETE; 
       } 

     }); 

:

 var modifyControl = new OpenLayers.Control.ModifyFeature(vector); 

     var drawControl = new OpenLayers.Control.DrawFeature(
           vector, 
           OpenLayers.Handler.Point, 
           {handlerOptions: {multi: false}} 
          ); 

       ..........(new GeoExt.MapPanel) 
       id: "mapPanel", 
       bbar: [ 
         new GeoExt.Action({ 
           control: drawControl, 
           text: "Create", 
           enableToggle: true, 
         }, 
         handler: function() { 
          var gV = gridPanel.getView(); 
          gV.on('rowsinserted', function(view,firstRow,lastRow) 
          { 
           gridPanel.getSelectionModel().selectLastRow(); 
           gridPanel.startEditing(lastRow,0); 
          }); 
         } 
        }), 
        { 
        text: "Delete", 
        handler: function() { 
          gridPanel.getSelectionModel().each(function(rec) { 
          var feature = rec.get("feature"); 
          modifyControl.unselectFeature(feature); 
          gridPanel.store.remove(rec); 
          if (feature.state !== OpenLayers.State.INSERT) { 
          feature.state = OpenLayers.State.DELETE; 
          vector.addFeatures([feature]); 
          }; 
         }) 
         }}, 
        ............ 

방법 (커밋) 모든 변경 사항 저장을? 이 저장하지 :

  store.commitChanges(); 
      saveStrategy.save(); 

내가 protocol.WFS (Geoserver)없이 수행 할 수 있습니다. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

답변

1

그래서, 매우 간단합니다 :

 var vector = new OpenLayers.Layer.Vector("vector", { 
       projection: mercator, 
       strategies: [new OpenLayers.Strategy.Fixed(), saveStrategy], 
       protocol: new OpenLayers.Protocol.HTTP({ 
        url: "/test/dtp_json.php", 
        format: new OpenLayers.Format.GeoJSON(), 
        update: function(feature) { 
               xmlhttp.open('GET', /test/dtp_pg_query.php?level=1&osm_id='+feature.attributes.osm_id, false); 
               xmlhttp.send(null); 
               if(xmlhttp.status == 200) { 
                      Ext.Msg.alert('Статус обновления',xmlhttp.responseText); 
               }; 
               }, 
        delete: function(feature) { 
               xmlhttp.open('GET', '/test/dtp_pg_query.php?level=2&osm_id='+feature.attributes.osm_id,false); 
               xmlhttp.send(null); 
               if(xmlhttp.status == 200) { 
                      Ext.Msg.alert('Статус удаления',xmlhttp.responseText); 
               }; 
               }, 
        create: function(feature) { 
               for (var i=0; i<feature.length; i++) //> 
                { 
                xmlhttp.open('GET', '/test/dtp_pg_query.php?level=3&osm_id='+feature[i].attributes.osm_id,false); 
                xmlhttp.send(null); 
                if(xmlhttp.status == 200) { 
                       Ext.Msg.alert('Статус создания',xmlhttp.responseText); 
                }; 
                }; 
               }, 
       }) 
      }); 

하고 만 새로 고침 벡터 레이어 :

  store.commitChanges(); 
      saveStrategy.save(); 
      vector.refresh({force: true}); 
관련 문제