Add and Delete Features¶
Note¶
The endpoint for the API is https://localhost:8080/hub.
Add data¶
There are basically two ways of adding features to your space. And their only difference is the way the existing data in your space is handled: Use POST and any pre-existing data is retained; use PUT and the only data that is left in your space is the one you just uploaded with the PUT request.
There is a convenience request for modifying features, but that is a subject for another example.
Note¶
Think about what tags to use before uploading and add them via the addTags query parameter. There is no method to add tags to all features without specifying IDs, yet.
Request¶
Try in your local Swagger
POST /spaces/{spaceId}/features
with the corresponding body:
Request body¶
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"featureclass": "River"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
...
], ... [
...
]
]
}
}
]
}
Response¶
{
"features": [
{
"geometry": {
"type": "LineString",
"coordinates": [
[
...
], ... [
...
]
]
},
"id": "NTvvEciZlE",
"type": "Feature",
"properties": {
"featureclass": "River",
"@ns:com:here:xyz": {
"createdAt": 1528461230706,
"space": "{spaceId}",
"tags": [
"river"
],
"updatedAt": 1528461230706
}
},
"bbox": [
44.41260826914623,
31.5295270854107,
45.66944420664623,
32.563421942181535
]
}
],
"type": "FeatureCollection"
}
Request¶
Try in your local Swagger
You can achieve the same with the following PUT request:
PUT /spaces/{spaceId}/features
with the same body:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"featureclass": "River"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
...
], ... [
...
]
]
}
}
]
}
and you will get the same response:
Response¶
{
"features": [
{
"geometry": {
"type": "LineString",
"coordinates": [
[
...
], ... [
...
]
]
},
"id": "NTvvEciZlE",
"type": "Feature",
"properties": {
"featureclass": "River",
"@ns:com:here:xyz": {
"createdAt": 1528461230706,
"space": "{spaceId}",
"tags": [
"river"
],
"updatedAt": 1528461230706
}
},
"bbox": [
44.41260826914623,
31.5295270854107,
45.66944420664623,
32.563421942181535
]
}
],
"type": "FeatureCollection"
}
So, it is just a matter of taste and keeping the previous uploaded features.
Validation Errors¶
If you are using the validation feature, you sometimes will get an error message when adding or modifying features, such as this one:
{
"type": "FeatureCollection",
...
"features": [],
"failed": [
{
"id": null,
"position": 0,
"message": "Feature on position 0 has JSON schema validations errors/warnings.\n[[1,151][/properties] The object must have a property whose name is \"city\"., [1,151][/properties] The object must have a property whose name is \"employees\"., [1,151][/properties] The object must have a property whose name is \"name\"., [1,151][/properties] The object must have a property whose name is \"country\".]"
}
]
}
The failed property contains all the features that schema validation rejected.
The id is the id you sent. If you did not send one, the id will be null as in the example.
Position is the position (zero-based) in the uploaded feature collection.
The message contains the schema validation errors with a detailed description of what does not confirm to your schema.
Delete Features¶
Of course, you can also delete any of the features you added previously. This is the request for it:
Request¶
Try in your local Swagger
DELETE /spaces/{spaceId}/features/id={featureId1},{featureId2}
Response¶
HTTP/1.1 204 No Content
If you want to delete any features tagged the same, you can also do this like so:
Request¶
Try in your local Swagger
DELETE /spaces/{spaceId}/features?tags=oldFeatures
The response here should be the same as it was with the delete by ID.
You can even delete all of your features by using the following request:
Request¶
Try in your local Swagger
DELETE /spaces/{spaceId}/features?tags=*