Suite

Ajouter une couche WFS externe au géoserveur à l'aide de l'API REST

Ajouter une couche WFS externe au géoserveur à l'aide de l'API REST


J'essaie d'ajouter un WFS externe en tant que source de données à mon géoserveur via l'API REST. J'ai déjà ajouté un nouvel espace de travail et une source de données WFS.

Maintenant, je veux publier une couche de ce WFS sur le géoserveur. La même chose fonctionne pour WMS, mais semble être un peu différent et mal documenté pour les services WFS.

j'ai essayé de demander

METTRE http://myhost.com/geoserver/rest/workspaces/my_workspace/datastores/my_datastore/layers

le contenu suivant tel que proposé dans cet article :

 ma_couche VECTEUR  point  maFonction

Cela ne fonctionne pas pour moi, j'obtiens un 500 : Impossible de convertir org.geoserver.catalog.impl.LayerInfoImpl en org.geoserver.catalog.DataStoreInfo.

Maintenant, je ne sais pas s'il est nécessaire de créer à l'avance un FeatureType pour la couche. J'ai ajouté la couche manuellement via l'interface utilisateur du géoserveur où elle détecte automatiquement le type d'entité à partir de la couche WFS. J'aimerais le même comportement via l'API REST.

Quelqu'un peut-il me guider vers la bonne approche?

ÉDITER:

Peut-être que cela fonctionnera, une fois que j'aurai créé le featuretype. J'ai juste essayé d'obtenir la description featureType de ma couche créée manuellement pour l'adapter. Mais il y a beaucoup d'informations que je devrais mettre manuellement dans le fichier featuretype.xml à partir du WFS d'origine. J'ai essayé d'insérer la sortie DescribeFeatureType du WFS d'origine dans cette requête :

POST /geoserver/rest/workspaces/my_workspace/datastores/my_datastore/featuretypes

Mais il se plaint de la syntaxe car les balises xsd:schema

Vous ne savez pas s'il s'agit de la syntaxe FeatureType attendue ?


Vous devez créer un FeatureType avant de pouvoir créer une couche (c'est-à-dire la publier). Si vous avez déjà créé une couche de test, récupérez le type d'entité de celle-ci (comme http://geoserver.ianturton.com/rest/workspaces/topp/datastores/bgs/featuretypes/test_uk_625k_mapped_feature.xml) mais vous devriez pouvoir supprimez-en beaucoup et laissez GeoServer le remplir.

 test_uk_625k_mapped_feature test_uk_625k_mapped_feature  haut  uk_625k_mapped_feature [email protected] (valeur : Juste pour tester, lang : )  uk_625k_mapped_feature fonctionnalités PROJCS["OSGB 1936 / British National Grid", GEOGCS["OSGB 1936", DATUM["OSGB 1936", SPHEROID["Airy 1830", 6377563.396, 299.3249646, AUTHORITY["EPSG","7001"]], TOWGS84[ 446.448, -125.157, 542.06, 0.15, 0.247, 0.842, -20,489], AUTORITE["EPSG","6277"]], PRIMEM["Greenwich", 0.0, AUTORITE["EPSG","8901"]], UNITÉ ["degré", 0.017453292519943295], AXIS["Longitude géodésique", EST], AXIS["Latitude géodésique", NORD], AUTORITE["EPSG","4277"]], PROJECTION["Transverse_Mercator", AUTORITE["EPSG ","9807"]], PARAMETRE["central_meridian", -2.0], PARAMETER["latitude_of_origin", 49.0], PARAMETER["scale_factor", 0.9996012717], PARAMETER["false_easting", 400000.0], PARAMETER["false_northing" , -100000.0], UNIT["m", 1.0], AXIS["Est", EST], AXIS["Nord", NORD], AUTORITE["EPSG","27700"]] EPSG : 27700  -132576.78915711527 743466.6249987332 -15669.960592884949 1248847.1762802668 EPSG : 27700  -11.801005644638966 4.349696858682689 49.5245056714837 61.11839723246307 GEOGCS["WGS84(DD)", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degré", 0.017453292519943295], AXIS["Longitude géodésique ", EST], AXIS["Latitude géodésique", NORD]] FORCE_DECLARED vrai  bg  0 0 faux faux faux   uuid 1 1 vrai java.lang.String  lex 1 1 vrai java.lang.String  rc 1 1 vrai java.lang.String  lex_rcs 1 1 vrai java.lang.String  le_geom 0 1 vrai com.vividsolutions.jts.geom.Geometry

Expérimentez et quand cela fonctionne, mettez à jour la documentation pour la personne suivante.


Finalement, la réponse de iant m'a conduit au but. Pour être complet je poste ce que j'ai fait :

Après avoir créé la source de données, les principales informations sur les couches WFS sont connues du géoserveur. Alors je n'avais qu'à faire

POST /geoserver/rest/workspaces/my_workspace/datastores/my_datastore/featuretypes

avec le nom de la couche WFS, je voulais publier

layer_name_from_remote_wfs

Toutes les informations supplémentaires sont créées par le géoserveur lui-même, même la couche correspondante est créée automatiquement, nous avons donc terminé à ce stade.

C'était assez déroutant pour moi, car la sortie du géoserveur DescribeFeatureType de la nouvelle couche trouvée à

http://host/geoserver/my_workspace/wfs?service=WFS&version=1.1.0&request=DescribeFeatureType&featureType

répond avec un schéma xsd, qui semble être le résultat attendu. Mais je peux aussi demander

http://host/geoserver/rest/workspaces/my_workspace/datastores/my_datastore/featuretypes/my_layername.xml

qui renvoie la description du type de fonctionnalité au format xml, y compris des informations supplémentaires sur la source de données.