2016-06-08 1 views
0

i`m essayant de arcgis javascript FeatureLayer Eidting ...arcgis javascript erreur Base de données: Linestring ou poly limite est auto-intersection

Mais ... souvent la fonction d'édition ne fonctionne pas correctement.

La modification n'est pas appliquée à la base de données.

J'ai testé comme suit.

  1. featurelayer charge
  2. Modifier commencer
  3. Modifier arrêt

enter image description here

je sais ... pourquoi don`t cette erreur est survenue ...

I` J'attends les réponses ..

+0

Pouvez-vous poster du code sur la façon dont vous soumettez les modifications? Utilisez-vous le jsapi featurelayer.applyEdits? Si tel est le cas, vous pouvez passer la géométrie à un service de géométrie et appeler la méthode simplify pour la rendre topologiquement légale, ce qui peut aider. (https://developers.arcgis.com/javascript/3/jsapi/geometryservice-amd.html#simplify ou https://developers.arcgis.com/javascript/3/jsapi/esri.geometry.geometryengine-amd.html #simplify) –

+0

Eh bien, l'erreur dit à peu près tout - votre géométrie s'auto-recoupe donc pas correcte. Si vous êtes sûr que votre géométrie est correcte, pouvez-vous poster une photo de celle-ci? – andree

Répondre

0

Mon code est le suivant:

esriConfig.defaults.geometryService = new esri.tasks.GeometryService ("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");

map.on ("layers-add-result", initEditing);

var SIDO = new FeatureLayer("http://dev.smui.co.kr:26080/arcgis/rest/services/kios/FEATURE_LP_AA/FeatureServer/0", {`enter code here` 
     mode: FeatureLayer.MODE_SNAPSHOT, 
     outFields: ["*"] 
    }); 


    map.addLayers(SIDO); 

    function initEditing(evt) { 
     console.log("initEditing", evt); 
     // var map = this; 
     var currentLayer = null; 
     var layers = arrayUtils.map(evt.layers, function(result) { 
     return result.layer; 
     console.log("result ==== "+result); 
     }); 
     console.log("layers", layers); 

     editToolbar = new Edit(map); 
     editToolbar.on("deactivate", function(evt) { 
      console.log("deactivate !!!! "); 
     currentLayer.applyEdits(null, [evt.graphic], null); 
     }); 

     arrayUtils.forEach(layers, function(layer) { 
     var editingEnabled = false; 
     layer.on("dbl-click", function(evt) { 
      event.stop(evt); 
      if (editingEnabled === false) { 
      editingEnabled = true; 
      editToolbar.activate(Edit.EDIT_VERTICES , evt.graphic); 
      pre_evt = evt.graphic; 

      console.log("dbl-click & eidt true"); 
      } else { 
      currentLayer = this; 
      editToolbar.deactivate(); 
      editingEnabled = false; 
      console.log("dbl-click & eidt false "); 
      } 
     }); 
+0

Vous pouvez être en mesure de modifier le code à quelque chose comme ici, notez que ce n'est pas testé, il suffit de considérer le pseudocode: 'editToolbar.on (" désactiver ", fonction (evt) {console.log (" désactiver !!!! "); var newGeometry = geometryEngine.simplify (evt.graphic.geometry); evt.graphic.geometry = newGeometry; currentLayer.applyEdits (null, [evt.graphic], null);}); ' Vous devrez ajouter" esri/geometry/geometryEngine "à votre besoin/définir –

+0

Merci ~! Je vais essayer de tester – BingBingPa