Les actions par défaut de JMap Web

 

Le modèle d'application JMap Web offre plusieurs actions par défaut afin de faciliter les interactions avec JMap Serveur. Cette section va en présenter quelques-unes et va démontrer comment vous pouvez les utiliser.

Note: La majorité des actions nécessitent des paramètres décrivant l'état de la carte. Pour la plus grande partie, ces informations peuvent être obtenues en utilisant l'API d'OpenLayers.

Tous les exemples de cette section font référence à un déploiement basé sur le projet The World. Le déploiement couvre la totalité de l'étendue du projet et contient les couches "Base" et "Cities". Référez-vous aux captures d'écran suivantes afin de créer un déploiement similaire.

 

Couches configurées

Couches configurées

 

Propriétés géographiques, partie 1.

Propriétés géographiques, partie 1.

 

Propriétés géographiques, partie 2.

Propriétés géographiques, partie 2.

 

Configuration de la couche Base

Configuration de la couche Base

 

 

Configuration de la couche Cities

Configuration de la couche Cities

Action 'extractelements'

L'action extractelements retourne une liste d'éléments d'une couche JMap.

Le type de requête 'geometry'

La requête geometry fait une extraction des éléments qui intersectent ou sont contenus dans une géométrie fournie.

Paramètres

Le tableau suivant indique la liste des paramètres qui peuvent être acheminés à l'action extractelements.

Paramètres de extractelements

Description

request

{String} "geometry" requis

Cette chaîne identifie le type de requête qui est acheminée à l'action. D'autres types de requêtes seront possiblement supportés par cette action dans le futur.

geometry

{String} required

Une géométrie WKT qui définie la région pour laquelle le processus d'extraction d'éléments sera exécuté.

res

{Number} requis

La résolution actuelle de la carte.

bbox

{String} requis

L'étendue pour la quelle vous voulez faire l'extraction d'éléments dans un format bounding box (exemple: "-100,-50,100,50").

drill

{Boolean} défaut: false Indique si vous voulez continuer l'analyse de la pile de couches après qu'un premier élément correspondant soit trouvé.

layers

{String} requis

Spécifie pour quelle(s) couche(s) vous voulez faire l'extraction d'éléments.

Plusieurs couches peuvent être demandées à la fois. Dans ce cas, vous devez séparer les éléments de la liste en utilisant des virgules. Utilisez le paramètre drill de manière à obtenir les éléments pour plusieurs couches.

 

Exemple

Cet exemple fait une requête d'extraction d'éléments pour la couche «Cities» autour de l'écosse.

$.ajax(JMap.app.ajaxDispatcher, {data: {
 'action': 'extractelements',
 'request': 'geometry',
 'geometry': 'POLYGON((-6.378882 54.903806,-1.336158 54.903806,-1.336158 59.540037,-6.378882 59.540037,-6.378882 54.903806))',
 'res': JMap.app.map.getResolution(),
 'bbox': JMap.app.map.getExtent().toBBOX(),
 'layers': 'Cities'
}}).success(function(data, textStatus, jqXHR) {
 console.log(data);
});

 

Réponse

L'identifiant, la géométrie (sous la forme d'une chaîne WKT), les valeurs d'attributs, l'étendue et le point centré pour chacun des éléments sont retournés. Les attributs liés ainsi que leur type SQL sont également inclus. L'index des valeurs d'attributs de l'élément correspond à l'index des attributs configurés sur la couche dans JMap Admin. Si des éléments de plusieurs couches correspondent aux critères de la requête, un tableau de ces objets sera retourné.

{
   "layerId": 7,
   "elementAttributes": [
       {
           "sqlType": 12,
           "name": "CITY"
       },
       {
           "sqlType": 12,
           "name": "COUNTRY"
       },
       {
           "sqlType": 12,
           "name": "CAP"
       },
       {
           "sqlType": 4,
           "name": "POP2000"
       }
   ],
   "elements": [
       {
           "centeredPoint": {
               "x": -1.3899999735879476,
               "y": 54.910001831054686
           },
           "bounds": {
               "x": -1.3899999735879476,
               "width": 0,
               "y": 54.910001831054686,
               "height": 0
           },
           "attributeValues": [
               "Sunderland",
               "UK - England and Wales",
               "0",
               181100
           ],
           "geometry": "POINT(-1.3899999735879476 54.910001831054686)",
           "id": 622
       },
       {
           "centeredPoint": {
               "x": -4.2699998496102864,
               "y": 55.87000091552734
           },
           "bounds": {
               "x": -4.2699998496102864,
               "width": 0,
               "y": 55.87000091552734,
               "height": 0
           },
           "attributeValues": [
               "Glasgow",
               "Scotland",
               "0",
               610700
           ],
           "geometry": "POINT(-4.2699998496102864 55.87000091552734)",
           "id": 624
       },
       {
           "centeredPoint": {
               "x": -3.2200001357125814,
               "y": 55.949998931884764
           },
           "bounds": {
               "x": -3.2200001357125814,
               "width": 0,
               "y": 55.949998931884764,
               "height": 0
           },
           "attributeValues": [
               "Edinburgh",
               "UK - England and Wales",
               "0",
               382600
           ],
           "geometry": "POINT(-3.2200001357125814 55.949998931884764)",
           "id": 625
       },
       {
           "centeredPoint": {
               "x": -2.9999998686837728,
               "y": 56.469999389648436
           },
           "bounds": {
               "x": -2.9999998686837728,
               "width": 0,
               "y": 56.469999389648436,
               "height": 0
           },
           "attributeValues": [
               "Dundee",
               "Scotland",
               "0",
               148900
           ],
           "geometry": "POINT(-2.9999998686837728 56.469999389648436)",
           "id": 627
       },
       {
           "centeredPoint": {
               "x": -2.1000000117349202,
               "y": 57.14999969482422
           },
           "bounds": {
               "x": -2.1000000117349202,
               "width": 0,
               "y": 57.14999969482422,
               "height": 0
           },
           "attributeValues": [
               "Aberdeen",
               "Scotland",
               "0",
               188500
           ],
           "geometry": "POINT(-2.1000000117349202 57.14999969482422)",
           "id": 628
       },
       {
           "centeredPoint": {
               "x": -1.6000000117349202,
               "y": 54.99999816894531
           },
           "bounds": {
               "x": -1.6000000117349202,
               "width": 0,
               "y": 54.99999816894531,
               "height": 0
           },
           "attributeValues": [
               "Newcastle upon Tyne",
               "UK - England and Wales",
               "0",
               980000
           ],
           "geometry": "POINT(-1.6000000117349202 54.99999816894531)",
           "id": 1899
       }
   ]
}

 

Action 'layerinfo'

L'action layerinfo offre des détails au sujet des couche du projet associé au déploiement courant.

Le type de requête 'geteditablelayers'

Le type de requête geteditablelayers offre des détails au sujet des couches sur lesquelles l'utilisateur courant peut faire des tâches d'édition.

Paramètres

Cette action ne nécessite aucun paramètre. À la place, elle utilise l'information de la session courante afin d'effectuer cette opération.

Example

$.ajax(JMap.app.ajaxDispatcher, {data: {
 'action': 'layerinfo',
 'request': 'geteditablelayers'
}}).success(function(data, textStatus, jqXHR) {
 console.log(data);
});

 

Réponse

La réponse du serveur comprend un tableau d'objets (editableLayers). Chacun des objets du tableau contient les clefs de propriétés suivantes:

Clefs de propriétés d'une réponse geteditablelayers

Description

fields

{Array} Tableau d'objets qui exposent le nom des attributs liés ainsi que leur type de donnée SQL.

forms

{Array} Les formulaires configurés de la couche.

id

{Number} L'identifiant de la couche.

idFieldName

{String} Le nom de l'attribut de la couche qui sert d'identifiant.

offset

{Object} Un objet qui contient le décalage actuel de la couche.

permissions

{Number} Un entier entre 0 et 15 (inclusif) qui décris les permissions envers la couche de l'utilisateur courant. Les masques de bits suivant signifient différentes permissions.

0x0000: Aucune.

0x0001: Peut ajouter des éléments à la couche.

0x0010: Peut modifier les éléments de la couche.

0x0100: Peut détruire les éléments de la couche.

0x1000: Peut modifier les valeurs d'attributs des éléments de la couche.

Les formulaires sont retournés sous la forme d'un tableau d'objets. Ils ont la structure suivante:

Clefs de propriétés des formulaires de la réponse

Description

id

{Number} L'identifiant unique du formulaire.

json

{String} Une représentation JSON d'une configuration de formulaire.

name

{String} Le nom du formulaire tel que défini dans JMap Admin.

permissions

{Number} Un entier entre 0 et 7 (inclusif) qui décris les permissions envers le formulaire de l'utilisateur courant. Les permissions d'un formulaire ne concerne que les formulaires externes. Les permissions d'un formulaire d'attributs de couche sont définis dans les permissions de la couche.

0x000: Aucune.

0x001: Peut ajouter des données dans un formulaire externe.

0x010: Peut modifier des données dans un formulaire externe.

0x100: Peut supprimer des données dans un formulaire externe.

type

{String} Identifie le type de formulaire. Un parmi les suivants:

LAYER_ATTRIBUTES_FORM

LAYER_ATTRIBUTES_SUB_FORM

EXTERNAL_ATTRIBUTES_FORM

EXTERNAL_ATTRIBUTES_SUB_FORM

uidAttributeName

{String} Ne concerne que les formulaires externes. Correspond au nom de l'attribut de la couche qui sera utilisé comme clef étrangère afin d'établir le lien parent-enfant.

 

Exemple

Ceci est un exemple d'une réponse geteditablelayers. Il est possible que vous ayez des résultats différents. Dans tous les cas, la réponse devrait refléter vos permissions envers les couches et les formulaires.

{
   "editableLayers": [
       {
           "offset": {
               "x": 9.5367431640625e-7,
               "y": -3.186320304870577
           },
           "permissions": 0,
           "id": 4,
           "fields": [
               {
                   "name": "COUNTRY",
                   "serverDataType": 12
               },
               {
                   "name": "CONTINENT",
                   "serverDataType": 12
               },
               {
                   "name": "POP_1994",
                   "serverDataType": 8
               },
               {
                   "name": "POP_GRW_RT",
                   "serverDataType": 8
               },
               {
                   "name": "POP_0_14",
                   "serverDataType": 8
               },
               {
                   "name": "POP_15_64",
                   "serverDataType": 8
               },
               {
                   "name": "POP_65PLUS",
                   "serverDataType": 8
               },
               {
                   "name": "POP_AREA",
                   "serverDataType": 8
               }
           ],
           "idFieldName": "JMAP_ID",
           "forms": []
       },
       {
           "offset": {
               "x": 0.56195068359375,
               "y": 13.687942504882812
           },
           "permissions": 0,
           "id": 6,
           "fields": [
               {
                   "name": "LAKE_NAME",
                   "serverDataType": 12
               },
               {
                   "name": "VOLUME_CKM",
                   "serverDataType": 8
               },
               {
                   "name": "AREA_SKM",
                   "serverDataType": 8
               }
           ],
           "idFieldName": "JMAP_ID",
           "forms": []
       },
       {
           "offset": {
               "x": 20.934576233500025,
               "y": 10.050437668683657
           },
           "permissions": 0,
           "id": 5,
           "fields": [],
           "idFieldName": "JMAP_ID",
           "forms": []
       },
       {
           "offset": {
               "x": 16.215000694478334,
               "y": 16.463705277985326
           },
           "permissions": 0,
           "id": 3,
           "fields": [
               {
                   "name": "HYD_NAME",
                   "serverDataType": 12
               },
               {
                   "name": "LENGTH_KM",
                   "serverDataType": 4
               }
           ],
           "idFieldName": "JMAP_ID",
           "forms": []
       },
       {
           "offset": {
               "x": 31.452202349999993,
               "y": -14.421794805000005
           },
           "permissions": 0,
           "id": 2,
           "fields": [
               {
                   "name": "CONTINENTNAME",
                   "serverDataType": 12
               }
           ],
           "idFieldName": "JMAP_ID",
           "forms": []
       },
       {
           "offset": {
               "x": 1.6169597031546061,
               "y": 8.079999999999998
           },
           "permissions": 15,
           "id": 7,
           "fields": [
               {
                   "name": "CITY",
                   "serverDataType": 12
               },
               {
                   "name": "COUNTRY",
                   "serverDataType": 12
               },
               {
                   "name": "CAP",
                   "serverDataType": 12
               },
               {
                   "name": "POP2000",
                   "serverDataType": 4
               }
           ],
           "idFieldName": "JMAP_ID",
           "forms": [
               {
                   "permissions": 0,
                   "name": "Form",
                   "json": "{\"formSections\":[{\"name\":\"Section 1\",\"nbRows\":3,\"fields\":[{\"$ATTRIBUTE_NAME\":\"CITY\",\"$ROW\":0,\"$MASKFORMATTER\":\"\",\"$COL\":0,\"$INPUT_TYPE\":\"$INPUT\",\"$MULTILINE\":false,\"$PREFIX\":\"CITY\",\"$ALIGNMENT\":\"LEFT\",\"$REQUIRED\":true,\"$MAX_NUMBER_CHARACTERS\":255,\"$COLSPAN\":1,\"$WIDTH\":100,\"$TOOLTIP\":\"\",\"$ATTRIBUTE_SQL_TYPE\":12,\"$READ_ONLY\":false}]}",
                   "id": 1,
                   "type": "LAYER_ATTRIBUTES_FORM",
                   "uidAttributeName": null
               }
           ]
       }
   ]
}

 

Action 'loadformdata'

L'action loadformdata offre les données des formulaires externes pour un élément d'une couche demandée.

Paramètres

loadformdata attends les paramètres suivants:

Paramètres de loadformdata

Description

data

{String} requis

Chaîne JSON qui représente un littéral objet JavaScript composé des propriétés suivantes:

elementId: {Number} L'identifiant unique de l'élément pour lequel on fait la demande de données.

formId: {Number} L'identifiant du formulaire externe.

layerId: {Number} L'identifiant de la couche sur laquelle l'élément existe/le formulaire est configuré.

listFields: {Array[Strings]} Une liste de noms de champs du formulaire pour lesquels vous voulez des valeurs. Un tableau vide va retourner les données pour tous les champs du formulaire.

mapValues: Littéral objet JavaScript qui contient les valeurs des champs du formulaire d'attributs de la couche.

 

Exemple

Exemple de requête loadformdata. Cet exemple fait référence à un autre projet JMap sur lequel des formulaires externes sont configurés.

var data = {
  elementId: 6,
  formId: 2,
  layerId: 1,
  listFields: [],
  "mapValues": {
    "MOBILE_JMAP_ID": 6,
    "MOBILE_JMAP_GEOMETRY": "POINT(-8189010.0 5701129.5)",
    "AUTHOR": "jrhaddad",
    "CREATION_TIME": 1415767972000,
    "MODIFICATION_TIME": 1418400517000,
    "ABR_CODE": "342",
    "ABR_NAME": "ES34F",
    "ABR_LOC_TYPE": "Arrêt bus",
    "ABR_WHEEL_CHAIR": "Non accessible",
    "ABR_DATE_INSP": null,
    "ABR_STATUS": null
  }
};
 
$.ajax(JMap.app.ajaxDispatcher, {data: {
  'action': 'loadformdata',
  'data': JSON.stringify(data)
}}).success(function(data, textStatus, jqXHR) {
  console.log(data);
});

 

Réponse

Le serveur répond à l'aide d'un tableau à deux dimensions de littéraux objets JavaScript représentant les valeurs des champs du formulaire. Chaque item dans le tableau rows correspond à une rangée de données. Plusieurs rangées seront retournées lorsque l'on demande des données pour un formulaire de type EXTERNAL_ATTRIBUTES_SUB_FORM.

Le nom du champs du formulaire, sa valeur et le type SQL de la donnée seront retournés.

{
    "rows": [
        [
            {
                "name": "insp_abribus.id_inspection",
                "value": 5,
                "type": 4
            },
            {
                "name": "insp_abribus.id_abribus",
                "value": 6,
                "type": 4
            },
            {
                "name": "insp_abribus.date_inspection",
                "value": 1415854800000,
                "type": 93
            },
            {
                "name": "insp_abribus.etat",
                "value": "Bon état",
                "type": 12
            },
            {
                "name": "insp_abribus.observations",
                "value": "Tout est ok",
                "type": 12
            }
        ]
    ]
}