"Vous devrez écrire un connecteur". C'est ce que les gens disaient autrefois lorsqu'il fallait créer une intégration entre ArcGIS et un autre système. De nos jours cependant, le paysage des technologies de l'information a mûri et la façon dont les applications communiquent entre elles s'est centrée sur quelques modèles que tout le monde (qui veut rester pertinent) utilise. ArcGIS Data Interoperability évolue et fonctionne dans cet espace.<\/P>
Un gagnant clair s'appelle REST<\/A>, et comme je ne suis pas informaticien, je ne vais pas entrer dans les détails que vous pouvez lire vous-même, tout ce qui m'importe c'est que pratiquement tout sur le web peut envoyer et recevoir des données d'une manière que je peux facilement utiliser (principalement JSON, avec quelques exceptions utilisant encore XML et quelques-uns poussant l'utilisabilité avec des charges utiles en protocol buffer mais je vais les surveiller pour vous, je pense que cela passera 😉<\/span>.) avec ArcGIS Data Interoperability.<\/P>Je dois ajouter un graphique avant que les moteurs de recherche ne se lassent de moi et que je ne sois pas indexé. Voici un workspace (StubOutAPIJSONReading.fmw<\/STRONG> dans le téléchargement du post) que j'ai utilisé pour explorer initialement une API (détails à suivre) :<\/P>Exploring an API<\/span><\/span><\/P>Mon API d'exemple est publiée par les bonnes personnes de Clarity Movement.<\/A><\/P>Clarity a été fondée en 2014 pour s'attaquer à la crise mondiale de la pollution de l'air et fournit désormais une surveillance de la qualité de l'air rentable, évolutive et fiable à des clients dans plus de 60 pays à travers le monde. La solution de Clarity permet aux gouvernements et aux communautés de collecter des données de qualité de l'air à plus haute résolution en complétant les moniteurs réglementaires existants par des réseaux denses de capteurs de qualité de l'air continuellement calibrés.<\/P>J'aime le point d'accès Measurements<\/A> de Clarity comme un bon exemple du modèle le plus courant que vous rencontrerez, à savoir la gestion des données JSON<\/STRONG> retournées par un appel HTTP<\/STRONG>. Avant de paniquer à propos des protocoles de transport et du parsing JSON, détendez-vous ! Data Interoperability gère tout cela pour vous, ce qui est bien car sinon vous devriez lire des choses comme ceci :<\/P> <\/P> <\/P> <\/P> <\/P>{ "_id": "6137a995cd42fd51fcda7083", "device": "609935dcc9348052e0c5d917", "deviceCode": "AY989QV6", "time": "2021-09-07T17:00:00.000Z", "location": { "coordinates": [ -120.90439519586954, 36.01958888490562 ], "type": "Point" }, "recId": "averaged:AY989QV6:hour:2021-09-07T18:00:00", "characteristics": { "relHumid": { "value": 30.428397178649904, "weight": 4, "raw": 30.428397178649904 }, "temperature": { "value": 30.882064819335939, "weight": 4, "raw": 30.882064819335939 }, "pm2_5ConcNum": { "value": 24.072547912597658, "weight": 4, "raw": 24.072547912597658 }, "pm2_5ConcMass": { "value": 13.646130166709775, "weight": 4, "raw": 21.126213550567628, "calibratedValue": 13.646130166709775, "epaNowCast": 15.097605519225573 }, "pm1ConcNum": { "value": 22.670581817626954, "weight": 4, "raw": 22.670581817626954 }, "pm1ConcMass": { "value": 12.186892986297608, "weight": 4, "raw": 12.186892986297608 }, "pm10ConcNum": { ... (le reste du JSON reste inchangé) ...}<\/>code><\/>pre> <\/>P> <\/>P> <\/>P> <\/>P>Le travail consiste transformer ces donnes en un service d'entits hberg, et automatiser la maintenance du service.<\/>STRONG><\/>P>Un avantage d'avoir une exprience en SIG est que vous connaissez probablement un peu Python, et les charges utiles JSON comme ci-dessus ressemblent des dictionnaires et listes Python. Vous n'avez besoin d'apprendre que quelques astuces avant de pouvoir aborder pratiquement n'importe quelle API REST.<\/>P>Astuce n 1 : Utiliser HTTPCaller.<\/>STRONG><\/>P>HTTPCaller<\/>SPAN><\/>SPAN><\/>P> <\/>P> HTTPCaller<\/>A> vous permet simplement de remplir un formulaire pour effectuer un appel web et recevoir une rponse (JSON dans ce cas). D'abord, vous devez lire votre documentation API <\/>A > et dterminer les paramtres requis, ainsi que ceux optionnels que vous souhaitez, et si vous devez utiliser une mthode GET<\/>STRONG> ou POST<\/>STRONG>. GET est habituellement pour des URL plus courtes, POST supporte des URL plus longues ainsi que des tlversements fournis dans un corps. Un autre aspect est l'authentification. De nombreuses APIs requirent une cl API (comme celle vue ici) ou un jeton. Typiquement, les cls n'expirent pas tandis que les jetons oui, en plus les jetons requirent une tape de gnration (qui peut tre effectue9e sparment via HTTP ou via OAuth2 dans une connexion web <\/>A ><\/>STRONG> configure9e pour votre compte). Mon exemple requiert une cl. Mon appel demande un tableau JSON de 10 mesures de qualit d'air et le retourne dans un attribut nomm _response_body<\/>STRONG>.<\/>P>Astuce n 2 : Dballage JSON<\/>STRONG><\/>P>Je m'apprête ingérer un nombre arbitraire de mesures de qualité d'air mais d'abord je dois comprendre comment extraire les données du JSON. J'ai demandé 10 mesures donc le JSON retourné sera un tableau. Chaque mesure dans le tableau aura le même schéma utilisé par les champs de mes entités - le JSON ci-dessus est une entité mesure. Je dois comprendre comment extraire les valeurs des champs. La façon la plus simple est d'écrire le JSON d'une entité du tableau dans un fichier et utiliser la capacité data-aware du JSONExtractor <\/>A > pour me permettre de construire des requêtes sans coder aucune requête JSON.<\/> P >Si je < STRONG > temporairement < \ / STRONG > < \ / EM > configure JSONExtractor pour lire depuis un fichier JSON alors j'obtiens un sélecteur pratique pour construire mes requêtes JSON.& nbsp ; Ensuite je peux copier-coller le JSONExtractor dans un outil en production, le configurer pour lire depuis l'attribut JSON entrant de l'entité qu'il extraira et exposera toutes les valeurs disponibles des champs.& nbsp ; C'est facile non !< \ / P >Voici mon JSONExtractor pendant que je lis depuis un fichier et construis mes requêtes :< \ / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-center " image-alt = "JSONExtractor " style = " width : 264px ; ">< img src = " https : \/ \/ us.v-cdn.net \/6038851 \/uploads \/images \/22552iA96BD3CEBA182135 \/JSONExtractor.jpg " role = " button " title = "JSONExtractor.jpg " alt = "JSONExtractor">< span class = " lia-inline-image-caption " onclick = " event.preventDefault();">JSONExtractor< \ / span >< \ / span >< \ / P >< P >& nbsp ;< \ / P >Maintenant c'est tout droit vers la création et la maintenance de mon service d'entités.< \ / P >< P >< STRONG > Clarity2GDB.fmw < \ / STRONG > utilise l'exploration JSON faite ci-dessus pour écrire une classe d'entités dans la géodatabase principale de mon projet Pro - il y a quelques renommages d'attributs effectués, et bien sûr ils obtiennent leurs types désirés lors de l'écriture.< \ / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-center " image-alt = "Clarity2GDB " style = " width : 400px ; ">< img src = " https : \/ \/ us.v-cdn.net \/6038851 \/uploads \/images \/22553i362FCC8C1C342D35 \/Clarity2GDB.jpg " role = " button " title = "Clarity2GDB.jpg " alt = "Clarity2GDB">< span class = " lia-inline-image-caption " onclick = " event.preventDefault();">Clarity2GDB< \ / span >< \ / span >< \ / P >< P >Ensuite après avoir créé mon service d'entités à partir de la classe d'entités géodatabase je peux recycler le travail pour maintenir le service d'entités avec < STRONG > RefreshClarityService.fmw < \ / STRONG >, qui ne diffère qu'à l'étape writer. Vous remarquerez que seules les entités modifiées sont écrites vers le service cible, l'espace de travail a un paramètre qui définit l'intervalle historique pour mes entités, les entités dans le service plus vieux que cela sont éliminés.<\/P>RefreshClarityService<\/span><\/span><\/P> Cet outil final peut être programmé ou exécuté à la demande.<\/P>Voilà ! J'ai maîtrisé les complexités de l'intégration web et j'ai un feature service que je peux utiliser pour alimenter mes cartes, applications et tableaux de bord.<\/P>Feature Service<\/span><\/span><\/P>Le téléchargement du blog contient les outils ETL que j'ai utilisés, moins une clé API fonctionnelle, veuillez contacter Clarity si vous souhaitez tester et mettre en œuvre une intégration.<\/P> <\/P>
Clarity a été fondée en 2014 pour s'attaquer à la crise mondiale de la pollution de l'air et fournit désormais une surveillance de la qualité de l'air rentable, évolutive et fiable à des clients dans plus de 60 pays à travers le monde. La solution de Clarity permet aux gouvernements et aux communautés de collecter des données de qualité de l'air à plus haute résolution en complétant les moniteurs réglementaires existants par des réseaux denses de capteurs de qualité de l'air continuellement calibrés.<\/P>
J'aime le point d'accès
{ "_id": "6137a995cd42fd51fcda7083", "device": "609935dcc9348052e0c5d917", "deviceCode": "AY989QV6", "time": "2021-09-07T17:00:00.000Z", "location": { "coordinates": [ -120.90439519586954, 36.01958888490562 ], "type": "Point" }, "recId": "averaged:AY989QV6:hour:2021-09-07T18:00:00", "characteristics": { "relHumid": { "value": 30.428397178649904, "weight": 4, "raw": 30.428397178649904 }, "temperature": { "value": 30.882064819335939, "weight": 4, "raw": 30.882064819335939 }, "pm2_5ConcNum": { "value": 24.072547912597658, "weight": 4, "raw": 24.072547912597658 }, "pm2_5ConcMass": { "value": 13.646130166709775, "weight": 4, "raw": 21.126213550567628, "calibratedValue": 13.646130166709775, "epaNowCast": 15.097605519225573 }, "pm1ConcNum": { "value": 22.670581817626954, "weight": 4, "raw": 22.670581817626954 }, "pm1ConcMass": { "value": 12.186892986297608, "weight": 4, "raw": 12.186892986297608 }, "pm10ConcNum": { ... (le reste du JSON reste inchangé) ...}<\/>code><\/>pre> <\/>P> <\/>P> <\/>P> <\/>P>Le travail consiste transformer ces donnes en un service d'entits hberg, et automatiser la maintenance du service.<\/>STRONG><\/>P>Un avantage d'avoir une exprience en SIG est que vous connaissez probablement un peu Python, et les charges utiles JSON comme ci-dessus ressemblent des dictionnaires et listes Python. Vous n'avez besoin d'apprendre que quelques astuces avant de pouvoir aborder pratiquement n'importe quelle API REST.<\/>P>Astuce n 1 : Utiliser HTTPCaller.<\/>STRONG><\/>P>HTTPCaller<\/>SPAN><\/>SPAN><\/>P> <\/>P>
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.