Suite

ArcGIS Server JavaScript : copiez l'attribut de l'entité capturée sur

ArcGIS Server JavaScript : copiez l'attribut de l'entité capturée sur


J'ai une application qui permet à l'utilisateur d'ajouter un point (dans ce cas, des ruptures de tuyaux) et de s'accrocher à une ligne (conduite d'eau). On m'a demandé de pré-remplir l'un des attributs de l'entité ponctuelle avec le même attribut de la ligne sur laquelle il est accroché. Assez simple, théoriquement, mais compliqué, je crois, programmatiquement. Je dois aussi mentionner que je ne suis pas un bon programmeur. J'utilise également le modèle GitHub CMV, mais comme c'est tellement en dehors du domaine de CMV, je n'y ai pas posté. Alors, est-ce que quelqu'un a fait ça ?


Vous allez probablement vouloir trouver un bon programmeur ou commencer à lire et à comprendre JS.

Le moyen de base pour le faire serait de trouver l'entité sur laquelle l'alignement est effectué (peut être une propriété de l'événement) ou d'exécuter une requête spatiale à partir de l'entité que vous avez ajoutée pour trouver l'entité la plus proche dans l'autre couche (supposez la distance = 0) . Je fais cela dans une application .NET et voici mon processus. En pseudocode/charabia complet, soit dit en passant.

//généralement, j'ajoute des éléments en cliquant sur un point ou quelque chose //Je gère mon événement de clic de souris, j'obtiens le x/y (coordonnées de la carte ou de l'écran) //crée la nouvelle entité… vous l'avez peut-être déjà bien que newFeature = new Point( x, y); //trouver la ou les fonctionnalités les plus proches -- en fonction de l'API de requête si elle renvoie un //single ou une collection de fonctionnalités nearFeatures = myJoiningLayer.GetFeaturesNearest(newFeature); //collection nearFeature = myJoiningLayer.GetNearestFeature(newFeature);//single //s'il y a une collection, vous devrez la parcourir pour trouver le //il pourrait y avoir un ajout de colonne de distance le plus proche (certains outils ESRI le font it) //ou il peut être nécessaire de comparer individuellement chaque fonctionnalité à la source myJoiningFeature = ;//quel que soit le processus nécessaire pour obtenir une fonctionnalité //puis vous prenez votre fonctionnalité et déplacez les valeurs de champ de l'une à l'autre pour chaque (objet valeur dans myJoiningFeature.fieldValues){ newFeature.valueField = value ; // vous devrez déterminer comment accéder au mutateur de cet objet } // enregistrez votre fonctionnalité et c'est fait

Cela peut être beaucoup de charabia, mais cela devrait vous donner une idée du processus que vous devez suivre pour arriver à la fin. J'ai vu différentes API coder les choses de manière très différente. Vous trouverez probablement plus facile de configurer un service de géotraitement sur votre serveur (si vous hébergez les données) et de renvoyer soit une nouvelle entité avec les valeurs transférées, soit du JSON qui est analysé et de nouvelles valeurs extraites de là et déplacées le côté client.

Il existe également de nombreuses options pour y parvenir. En écrivant, j'ai pensé à prendre la géométrie de votre nouveau point et à la renvoyer comme unIdentifierTâchede toutes sortes et intercepter le retour JSON (ou un autre ensemble de données) à interpréter manuellement.

Dans l'ensemble, vous ne pourrez peut-être pas le comprendre et vous trouverez peut-être plus facile de simplement post-traiter les données (jointure spatiale) pour saisir les attributs que vous souhaitez. Je le fais à la volée dans mon programme de collecte parce que nous devons établir cette relation dès le départ au lieu d'attendre, mais votre cas peut être différent.


Voir la vidéo: Урок 3. Javascript. Dojo, ArcGIS API for Javascript