Widget de dessin de parcelles porté de Web AppBuilder vers Experience Builder
Le widget Parcel Drafter de WAB n’a pas d’équivalent dans Experience Builder. Je l’ai porté sous forme de widget personnalisé pour ExB Developer Edition 1.21. Je le publie ici pour des tests communautaires.
GitHub : https://github.com/brianmcleer/parcel-drafter-widget (code source et versions téléchargeables). Le fichier ZIP d’installation est également joint à cette publication.
Contexte
Cette demande est en suspens depuis des années :
- Le fil de discussion sur les widgets personnalisés ouvert en décembre 2023 décrivait Parcel Drafter comme la seule raison pour laquelle les organisations restaient sur WAB. La matrice des fonctionnalités de WAB/ExB indique que cette capacité est prévue pour « un futur produit Web axé sur l’édition » — rien n’a été livré.
- La proposition ExB Ideas (avril 2024) compte 37 votes positifs et est toujours ouverte. Des commentaires ont été publiés jusqu’en juillet 2026 par des comtés, des villes ainsi que des services militaires et de génie civil, décrivant des processus d’évaluation foncière, d’audit, d’urbanisme et de gestion des biens immobiliers qui en dépendent. Les exigences mentionnées : accrochage aux points et aux sommets, relèvements par rayon/tangente/corde, longueur d’arc et de corde, ainsi que paramètres d’erreur de fermeture — tous traités ci-dessous.
- Dans le billet de blogue sur la feuille de route ExB 2026, le chef de produit a confirmé en juin 2026 qu’il n’y avait aucune nouvelle concernant ce widget et que des demandes continuaient d’être publiées dans les commentaires.
Un commentaire récent sur la proposition résume bien la situation : un widget personnalisé temporaire est nécessaire pour combler le manque. Voici ce widget.
Fonctionnalités
- Nouveau cheminement : point de départ défini par clic sur la carte ou saisie de coordonnées ; saisie du relèvement, de la longueur ou du rayon avec tracé en temps réel
- Formats de relèvement : S20-25-25W, 20-25-25-3, dd.mmss, degrés décimaux ; * reprend la ligne précédente ; *tb prolonge la tangente à la ligne ou à la courbe précédente
- Types de lignes de limite et de liaison, avec valeur par défaut configurable
- Relèvement, distance, rapport et superficie calculée de l’erreur de fermeture ; règle de la boussole appliquée dans la distance ou le rapport d’accrochage configuré
- Rotation et mise à l’échelle par saisie de texte ou déplacement sur la carte autour d’un point d’ancrage
- Réorganisation des segments du cheminement par glisser-déposer ou avec les touches fléchées
- Le point de départ et les clics de numérisation s’accrochent aux couches configurées dans la tolérance définie
- Modification d’un cheminement : les parcelles fermées sont sélectionnées par leur emprise polygonale ; les parcours ouverts, par suivi de connectivité à partir de la ligne cliquée ; les lignes sont ordonnées de bout en bout
- L’enregistrement des modifications met à jour l’entité polygonale existante et remplace ses lignes (suppression et ajout dans un seul appel à applyEdits) ; l’enregistrement d’un nouveau tracé crée des entités
- Paramètres : sélection de la carte, trois couches cibles avec détection automatique des couches de lignes et de points associées à partir du service de la couche polygonale, menus déroulants des champs COGO tirés du schéma de la couche, paramètres d’attributs (champs fixes, champs de fenêtres contextuelles de la carte Web ou liste personnalisée avec alias), configuration de l’erreur de fermeture et de l’accrochage
Notes techniques
- Calculs topographiques (géodésiques de Vincenty, arcs, erreur de fermeture, règle de la boussole) repris directement du code source WAB
- Les services de géométrie sont chargés à l’exécution via loadArcGISJSAPIModules : d’abord les modules d’opérateurs modernes (projectOperator, geodeticAreaOperator, etc.), puis les modules classiques de projection/geometryEngine en solution de repli pour les anciens SDK. Les modules classiques ont été supprimés des versions du SDK actuellement fournies avec ExB
- La reprojection fonctionne avec le système de référence spatiale de n’importe quelle organisation ; la rotation et la mise à l’échelle par glissement ne sont pas limitées à Web Mercator, contrairement à WAB
- WCAG 2.1 AA : noms programmatiques pour tous les contrôles, grille du cheminement exposée sous forme de tableau avec étiquettes pour chaque ligne, erreurs signalées par role=alert et aria-describedby, région dynamique pour les mises à jour de l’erreur de fermeture, touche Échap pour quitter les outils cartographiques, réorganisation au clavier, info-bulles sur chaque paramètre et mesure, jetons de thème jimu harmonisés avec Calcite
Limites connues
- Chaînes en anglais uniquement (WAB était fourni dans plus de 30 langues)
- Pas de sélecteur de symbole par type de ligne dans les paramètres ; les symboles se configurent dans config.json
- Lors de l’enregistrement des modifications, les points nodaux existants ne sont pas modifiés (les points ne sont pas suivis par ID d’objet) ; les points sont créés uniquement au premier enregistrement
Tests souhaités
- Descriptions comportant beaucoup de courbes : arcs majeurs, longueurs de corde négatives, courbes *tb consécutives
- Systèmes de référence spatiale autres que Web Mercator
- Modification puis enregistrement sur des couches de parcelles en production : vérifier que l’ID d’objet du polygone reste inchangé et que le nombre de lignes est correct
- Comportement de l’erreur de fermeture près des seuils d’accrochage configurés
Signalez les erreurs d’analyse, les problèmes de placement géométrique ou les erreurs de console dans les commentaires, ou ouvrez un ticket GitHub.
Journal des modifications
12/10/2026 : Le widget suit désormais la langue de l’application (?locale=, le sélecteur de langue, le profil ArcGIS ou le navigateur) dans 39 langues ; le guide d’aide est inclus.
Vous avez vos propres widgets personnalisés ? Le même outil gratuit, exb-i18n-kit, peut les traduire en une seule commande : localize. Voici comment il traduit chaque expression :
- Esri d’abord. Il lit les traductions déjà présentes dans votre installation d’Experience Builder. Ainsi, une expression comme « Zoom to » reprend le libellé utilisé par les widgets Esri eux-mêmes.
- Termes standard. Les noms d’unités, comme pieds et acres, proviennent d’Unicode CLDR, la même base de données qu’utilisent les navigateurs.
- Mémoire de traduction partagée. Le reste provient d’un dictionnaire partagé créé avec LibreTranslate, un traducteur libre, ainsi que les modèles Opus-MT de Helsinki-NLP pour le bosniaque, le croate et le serbe. L’outil fonctionne gratuitement sur GitHub : vous n’avez donc besoin ni de clé API ni de compte.
- Intégration. Il repère aussi le texte anglais codé en dur en dehors du fichier de traduction du widget, par exemple un paramètre par défaut ou un guide d’aide, et le relie au système de traduction.
Les corrections faites à la main sont toujours prioritaires sur les traductions automatiques et ne sont jamais écrasées. Certaines traductions sont générées automatiquement ; si vous en repérez une qui ne convient pas, répondez ici en proposant une meilleure formulation.
16/09/26 :
- Nouveautés sous Étiquettes de segment dans les paramètres : position de l’étiquette (à côté de la ligne ou dessus) et distance par rapport à la ligne. Une distance négative inverse le côté.
- La modification d’une parcelle sur une couche d’entités hébergée ajoutait un deuxième polygone par-dessus l’original au lieu de le mettre à jour. Le widget repère le polygone de la parcelle à partir du point sur lequel vous cliquez. Comme vous cliquez sur une ligne de limite, ce point se trouve juste sur le bord du polygone. Une couche hébergée ne considère pas ce point comme une intersection avec le polygone : aucun polygone n’était donc trouvé et l’enregistrement en ajoutait un nouveau. Un service cartographique, lui, le considère comme une intersection, ce qui explique pourquoi le problème ne se produisait que sur les couches hébergées. Les lignes étaient toujours correctement remplacées ; seul le polygone était superposé.
- La recherche crée désormais une zone tampon autour du clic, avec la même tolérance que celle utilisée pour la sélection de ligne, puis, en dernier recours, cherche un point situé à l’intérieur de la limite formée par les lignes sélectionnées. Le chargement d’un cheminement vous indique aussi si aucun polygone existant n’a été trouvé, afin que vous sachiez avant l’enregistrement qu’un nouveau sera créé.
- La grille du cheminement s’adapte désormais aux panneaux de widget étroits. Le rayon et le type de ligne passent sur une deuxième ligne, sous le relèvement et la longueur : le widget n’a donc plus besoin d’un panneau large.
11/09/26 :
- Le polygone de la parcelle est désormais créé lors de l’enregistrement. Les nouvelles lignes sont de type Ligne de limite par défaut, comme dans Parcel Drafter de Web AppBuilder.
- Vous pouvez désormais choisir entre tracer une Ligne de limite et une Ligne de liaison : un menu déroulant Type de ligne se trouve dans la barre d’outils et dans la ligne de saisie, et toute ligne de la grille peut être modifiée après son ajout.
- Les messages d’enregistrement indiquent désormais si le polygone de la parcelle a été créé ou mis à jour, et avertissent si aucune ligne n’est marquée comme Ligne de limite.
- Nouveau guide d’aide intégré : cliquez sur le bouton avec le point d’interrogation pour consulter un guide court et consultable sur la saisie des lignes, le dessin sur la carte, l’erreur de fermeture, l’enregistrement et l’exportation.
Si le widget est déjà intégré à une application, ouvrez ses paramètres et définissez Ligne de limite comme type de ligne par défaut, ou ajoutez de nouveau le widget. Les nouvelles applications utiliseront automatiquement la nouvelle valeur par défaut.
Collaboration
Le comté de Polk, en Oregon, a créé son propre widget Traverse pour Experience Builder (Nicholas Cramer @ncramer11 et Eric McAvoy @polkor_mcavoye). Publication communautaire :
https://community.esri.com/t5/experience-builder-custom-widgets/traverse-widget-1-0/m-p/1706412
et dépôt : https://github.com/ncramer11/traverse
Leur widget sert de bloc-notes pour réaliser rapidement des tracés précis et les exporter. Celui-ci sert à maintenir une source de données de parcelles existante.
Fonctionnalités reprises de leur widget Traverse :
- Suffixes chaînes et rods (ch, rd) pour les descriptions de propriété en unités mixtes
- Étiquettes de relèvement et de distance sur chaque ligne, activables ou désactivables
- Accrochage à toutes les couches d’entités visibles via SketchViewModel, activable ou désactivable
- Fenêtres contextuelles masquées lorsqu’un outil cartographique est actif
- Exportation GeoJSON avec densification des courbes
- Remplacement de la couleur pendant la session
- Saisie au pavé numérique. La touche + fait passer du relèvement à la longueur et valide la ligne ; la touche / ouvre le champ du rayon ; le focus revient au relèvement
Prise en charge des descriptions légales (Assessors' Handbook 215) :
- Suffixes links et varas (lk, va)
- Les relèvements peuvent être collés directement depuis les documents officiels. N45°30'00"E est interprété comme N45-30-00E
- Exportation d’un projet de description légale par limites et distances. Liaison de départ, point de départ, parcours successifs, description du rayon/de l’arc/de la corde, superficie de fermeture. Projet marqué comme tel, à réviser
Correction issue des tests du comté de Polk : lorsqu’on effaçait un cheminement, les étiquettes restaient sur la carte. Problème corrigé.
Tests souhaités
- Accrochage sur des réseaux de parcelles denses
- Saisie au pavé numérique pour les entrées à grand volume
- Résultats des descriptions légales comparés au libellé réel des actes, en particulier pour les courbes
- Chaînes, links, rods et varas comparés aux descriptions historiques
Signalez les problèmes dans les commentaires ou sur GitHub.