From c67c707a1e742cfd88b80d948567a2036711ac0c Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Tue, 24 Oct 2017 16:34:28 -0600 Subject: [PATCH 01/10] changes implementations to non-standard implementations, now that we have an actual spec and implementations --- .../digitalglobe/overview.md | 0 .../hexgeo/apollo/overview.md | 0 .../hexgeo/apollo/spec.json | 0 {implementations => non-standard-implementations}/oam/overview.md | 0 {implementations => non-standard-implementations}/oam/spec.json | 0 {implementations => non-standard-implementations}/overview.md | 0 {implementations => non-standard-implementations}/pixia/README.md | 0 .../pixia/catalog-api.yaml | 0 .../planet/old-catalog/overview.md | 0 .../planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml | 0 .../planet/old-catalog/v1-catalog.yaml | 0 .../planet/overview.md | 0 .../planet/spec.json | 0 .../radiant/overview.md | 0 .../raster-foundry/overview.md | 0 .../raster-foundry/spec.json | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename {implementations => non-standard-implementations}/digitalglobe/overview.md (100%) rename {implementations => non-standard-implementations}/hexgeo/apollo/overview.md (100%) rename {implementations => non-standard-implementations}/hexgeo/apollo/spec.json (100%) rename {implementations => non-standard-implementations}/oam/overview.md (100%) rename {implementations => non-standard-implementations}/oam/spec.json (100%) rename {implementations => non-standard-implementations}/overview.md (100%) rename {implementations => non-standard-implementations}/pixia/README.md (100%) rename {implementations => non-standard-implementations}/pixia/catalog-api.yaml (100%) rename {implementations => non-standard-implementations}/planet/old-catalog/overview.md (100%) rename {implementations => non-standard-implementations}/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml (100%) rename {implementations => non-standard-implementations}/planet/old-catalog/v1-catalog.yaml (100%) rename {implementations => non-standard-implementations}/planet/overview.md (100%) rename {implementations => non-standard-implementations}/planet/spec.json (100%) rename {implementations => non-standard-implementations}/radiant/overview.md (100%) rename {implementations => non-standard-implementations}/raster-foundry/overview.md (100%) rename {implementations => non-standard-implementations}/raster-foundry/spec.json (100%) diff --git a/implementations/digitalglobe/overview.md b/non-standard-implementations/digitalglobe/overview.md similarity index 100% rename from implementations/digitalglobe/overview.md rename to non-standard-implementations/digitalglobe/overview.md diff --git a/implementations/hexgeo/apollo/overview.md b/non-standard-implementations/hexgeo/apollo/overview.md similarity index 100% rename from implementations/hexgeo/apollo/overview.md rename to non-standard-implementations/hexgeo/apollo/overview.md diff --git a/implementations/hexgeo/apollo/spec.json b/non-standard-implementations/hexgeo/apollo/spec.json similarity index 100% rename from implementations/hexgeo/apollo/spec.json rename to non-standard-implementations/hexgeo/apollo/spec.json diff --git a/implementations/oam/overview.md b/non-standard-implementations/oam/overview.md similarity index 100% rename from implementations/oam/overview.md rename to non-standard-implementations/oam/overview.md diff --git a/implementations/oam/spec.json b/non-standard-implementations/oam/spec.json similarity index 100% rename from implementations/oam/spec.json rename to non-standard-implementations/oam/spec.json diff --git a/implementations/overview.md b/non-standard-implementations/overview.md similarity index 100% rename from implementations/overview.md rename to non-standard-implementations/overview.md diff --git a/implementations/pixia/README.md b/non-standard-implementations/pixia/README.md similarity index 100% rename from implementations/pixia/README.md rename to non-standard-implementations/pixia/README.md diff --git a/implementations/pixia/catalog-api.yaml b/non-standard-implementations/pixia/catalog-api.yaml similarity index 100% rename from implementations/pixia/catalog-api.yaml rename to non-standard-implementations/pixia/catalog-api.yaml diff --git a/implementations/planet/old-catalog/overview.md b/non-standard-implementations/planet/old-catalog/overview.md similarity index 100% rename from implementations/planet/old-catalog/overview.md rename to non-standard-implementations/planet/old-catalog/overview.md diff --git a/implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml b/non-standard-implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml similarity index 100% rename from implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml rename to non-standard-implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml diff --git a/implementations/planet/old-catalog/v1-catalog.yaml b/non-standard-implementations/planet/old-catalog/v1-catalog.yaml similarity index 100% rename from implementations/planet/old-catalog/v1-catalog.yaml rename to non-standard-implementations/planet/old-catalog/v1-catalog.yaml diff --git a/implementations/planet/overview.md b/non-standard-implementations/planet/overview.md similarity index 100% rename from implementations/planet/overview.md rename to non-standard-implementations/planet/overview.md diff --git a/implementations/planet/spec.json b/non-standard-implementations/planet/spec.json similarity index 100% rename from implementations/planet/spec.json rename to non-standard-implementations/planet/spec.json diff --git a/implementations/radiant/overview.md b/non-standard-implementations/radiant/overview.md similarity index 100% rename from implementations/radiant/overview.md rename to non-standard-implementations/radiant/overview.md diff --git a/implementations/raster-foundry/overview.md b/non-standard-implementations/raster-foundry/overview.md similarity index 100% rename from implementations/raster-foundry/overview.md rename to non-standard-implementations/raster-foundry/overview.md diff --git a/implementations/raster-foundry/spec.json b/non-standard-implementations/raster-foundry/spec.json similarity index 100% rename from implementations/raster-foundry/spec.json rename to non-standard-implementations/raster-foundry/spec.json From 27c3100c53a431f1549dca36c8b0bf7509add442 Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Wed, 1 Nov 2017 15:12:29 -0700 Subject: [PATCH 02/10] removed implementations folder and replaced it with a markdown file with links. The E84 clojure implementation can be found at https://github.com/Element84/catalog-api-spec/tree/dev/implementations/e84 --- implementations.md | 41 ++++ implementations/e84/.gitignore | 11 - implementations/e84/LICENSE | 214 ------------------ implementations/e84/README.md | 38 ---- implementations/e84/dev/user.clj | 25 -- implementations/e84/project.clj | 18 -- .../e84/src/e84_api_impl/api/jetty_server.clj | 56 ----- .../e84/src/e84_api_impl/api/routes.clj | 64 ------ .../e84/src/e84_api_impl/cmr_api.clj | 36 --- implementations/e84/src/e84_api_impl/core.clj | 6 - implementations/e84/src/e84_api_impl/main.clj | 10 - .../e84/src/e84_api_impl/search_service.clj | 136 ----------- .../e84/src/e84_api_impl/system.clj | 14 -- .../e84/test/e84_api_impl/core_test.clj | 7 - 14 files changed, 41 insertions(+), 635 deletions(-) create mode 100644 implementations.md delete mode 100644 implementations/e84/.gitignore delete mode 100644 implementations/e84/LICENSE delete mode 100644 implementations/e84/README.md delete mode 100644 implementations/e84/dev/user.clj delete mode 100644 implementations/e84/project.clj delete mode 100644 implementations/e84/src/e84_api_impl/api/jetty_server.clj delete mode 100644 implementations/e84/src/e84_api_impl/api/routes.clj delete mode 100644 implementations/e84/src/e84_api_impl/cmr_api.clj delete mode 100644 implementations/e84/src/e84_api_impl/core.clj delete mode 100644 implementations/e84/src/e84_api_impl/main.clj delete mode 100644 implementations/e84/src/e84_api_impl/search_service.clj delete mode 100644 implementations/e84/src/e84_api_impl/system.clj delete mode 100644 implementations/e84/test/e84_api_impl/core_test.clj diff --git a/implementations.md b/implementations.md new file mode 100644 index 000000000..73c8d6129 --- /dev/null +++ b/implementations.md @@ -0,0 +1,41 @@ +# Implementations + +This document lists the various implementations of the Spatio-Temporal Asset Catalog specification. Contributions +to the spec should be based on experience building API's for imagery and other geo-asset catalogs, so suggested +changes / improvements to the spec should be based on some software listed here. All listed implementations +should have a link to a live server or static catalog that indexes real data, though they do not have to +production ready or have any guarantee of uptime. If a live server is not possible then a link to open source code +is also acceptable. + +## Catalog Links +This section is links to live catalogs (both static and active) that have data. + +* None available yet - spec is too new. + +#### Proto-catalogs +[Open Imagery Network](https://openimagerynetwork.github.io/) was the first attempt at a static catalog. The OpenAerialMap +bucket is in active use. It is planned to evolve OIN and OAM architectures to use static catalogs. + +[AWS Public Datasets](aws.amazon.com/public-datasets/), particularly [Landsat](aws.amazon.com/public-datasets/landsat/), +[NAIP](https://aws.amazon.com/public-datasets/naip/) and [Sentinel](http://sentinel-pds.s3-website.eu-central-1.amazonaws.com/) all +get close to the ideas of STAC static catalogs, and hopefully will evolve to implement the standard. + + +## Static Catalog Implementations + +These are pieces of software that can crawl and/or produce static catalogs. + +The [Catalog Crawler](https://github.com/radiantearth/boulder-sprint/tree/master/catalog-crawler) was done during the +[Boulder Sprint](https://github.com/radiantearth/boulder-sprint/), as an early proof of concept. + +## Active Catalog Implementations + +Element84 made a [clojure implementation](https://github.com/Element84/catalog-api-spec/tree/dev/implementations/e84) of the spec +that serves as a lightweight proxy to NASA's CMR, constrained to just data in USGS EROS. + +Josh Fix's [open-catalog](https://github.com/joshfix/open-catalog) demonstrates generating code from the core swagger spec. + +### Proto-software + +Information about the software implementations that have been informing the evolution of the specification can be found at +https://github.com/radiantearth/catalog-implementor-survey \ No newline at end of file diff --git a/implementations/e84/.gitignore b/implementations/e84/.gitignore deleted file mode 100644 index c53038ec0..000000000 --- a/implementations/e84/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -/target -/classes -/checkouts -pom.xml -pom.xml.asc -*.jar -*.class -/.lein-* -/.nrepl-port -.hgignore -.hg/ diff --git a/implementations/e84/LICENSE b/implementations/e84/LICENSE deleted file mode 100644 index 7689f30ef..000000000 --- a/implementations/e84/LICENSE +++ /dev/null @@ -1,214 +0,0 @@ -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC -LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM -CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and -documentation distributed under this Agreement, and - -b) in the case of each subsequent Contributor: - -i) changes to the Program, and - -ii) additions to the Program; - -where such changes and/or additions to the Program originate from and are -distributed by that particular Contributor. A Contribution 'originates' from -a Contributor if it was added to the Program by such Contributor itself or -anyone acting on such Contributor's behalf. Contributions do not include -additions to the Program which: (i) are separate modules of software -distributed in conjunction with the Program under their own license -agreement, and (ii) are not derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which are -necessarily infringed by the use or sale of its Contribution alone or when -combined with the Program. - -"Program" means the Contributions distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free copyright license to -reproduce, prepare derivative works of, publicly display, publicly perform, -distribute and sublicense the Contribution of such Contributor, if any, and -such derivative works, in source code and object code form. - -b) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free patent license under -Licensed Patents to make, use, sell, offer to sell, import and otherwise -transfer the Contribution of such Contributor, if any, in source code and -object code form. This patent license shall apply to the combination of the -Contribution and the Program if, at the time the Contribution is added by the -Contributor, such addition of the Contribution causes such combination to be -covered by the Licensed Patents. The patent license shall not apply to any -other combinations which include the Contribution. No hardware per se is -licensed hereunder. - -c) Recipient understands that although each Contributor grants the licenses -to its Contributions set forth herein, no assurances are provided by any -Contributor that the Program does not infringe the patent or other -intellectual property rights of any other entity. Each Contributor disclaims -any liability to Recipient for claims brought by any other entity based on -infringement of intellectual property rights or otherwise. As a condition to -exercising the rights and licenses granted hereunder, each Recipient hereby -assumes sole responsibility to secure any other intellectual property rights -needed, if any. For example, if a third party patent license is required to -allow Recipient to distribute the Program, it is Recipient's responsibility -to acquire that license before distributing the Program. - -d) Each Contributor represents that to its knowledge it has sufficient -copyright rights in its Contribution, if any, to grant the copyright license -set forth in this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under -its own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and - -b) its license agreement: - -i) effectively disclaims on behalf of all Contributors all warranties and -conditions, express and implied, including warranties or conditions of title -and non-infringement, and implied warranties or conditions of merchantability -and fitness for a particular purpose; - -ii) effectively excludes on behalf of all Contributors all liability for -damages, including direct, indirect, special, incidental and consequential -damages, such as lost profits; - -iii) states that any provisions which differ from this Agreement are offered -by that Contributor alone and not by any other party; and - -iv) states that source code for the Program is available from such -Contributor, and informs licensees how to obtain it in a reasonable manner on -or through a medium customarily used for software exchange. - -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and - -b) a copy of this Agreement must be included with each copy of the Program. - -Contributors may not remove or alter any copyright notices contained within -the Program. - -Each Contributor must identify itself as the originator of its Contribution, -if any, in a manner that reasonably allows subsequent Recipients to identify -the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with -respect to end users, business partners and the like. While this license is -intended to facilitate the commercial use of the Program, the Contributor who -includes the Program in a commercial product offering should do so in a -manner which does not create potential liability for other Contributors. -Therefore, if a Contributor includes the Program in a commercial product -offering, such Contributor ("Commercial Contributor") hereby agrees to defend -and indemnify every other Contributor ("Indemnified Contributor") against any -losses, damages and costs (collectively "Losses") arising from claims, -lawsuits and other legal actions brought by a third party against the -Indemnified Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program in -a commercial product offering. The obligations in this section do not apply -to any claims or Losses relating to any actual or alleged intellectual -property infringement. In order to qualify, an Indemnified Contributor must: -a) promptly notify the Commercial Contributor in writing of such claim, and -b) allow the Commercial Contributor tocontrol, and cooperate with the -Commercial Contributor in, the defense and any related settlement -negotiations. The Indemnified Contributor may participate in any such claim -at its own expense. - -For example, a Contributor might include the Program in a commercial product -offering, Product X. That Contributor is then a Commercial Contributor. If -that Commercial Contributor then makes performance claims, or offers -warranties related to Product X, those performance claims and warranties are -such Commercial Contributor's responsibility alone. Under this section, the -Commercial Contributor would have to defend claims against the other -Contributors related to those performance claims and warranties, and if a -court requires any other Contributor to pay any damages as a result, the -Commercial Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON -AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER -EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR -CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A -PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all risks -associated with its exercise of rights under this Agreement , including but -not limited to the risks and costs of program errors, compliance with -applicable laws, damage to or loss of data, programs or equipment, and -unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY -CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION -LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this Agreement, and without further action by the -parties hereto, such provision shall be reformed to the minimum extent -necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Program itself -(excluding combinations of the Program with other software or hardware) -infringes such Recipient's patent(s), then such Recipient's rights granted -under Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to -comply with any of the material terms or conditions of this Agreement and -does not cure such failure in a reasonable period of time after becoming -aware of such noncompliance. If all Recipient's rights under this Agreement -terminate, Recipient agrees to cease use and distribution of the Program as -soon as reasonably practicable. However, Recipient's obligations under this -Agreement and any licenses granted by Recipient relating to the Program shall -continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in -order to avoid inconsistency the Agreement is copyrighted and may only be -modified in the following manner. The Agreement Steward reserves the right to -publish new versions (including revisions) of this Agreement from time to -time. No one other than the Agreement Steward has the right to modify this -Agreement. The Eclipse Foundation is the initial Agreement Steward. The -Eclipse Foundation may assign the responsibility to serve as the Agreement -Steward to a suitable separate entity. Each new version of the Agreement will -be given a distinguishing version number. The Program (including -Contributions) may always be distributed subject to the version of the -Agreement under which it was received. In addition, after a new version of -the Agreement is published, Contributor may elect to distribute the Program -(including its Contributions) under the new version. Except as expressly -stated in Sections 2(a) and 2(b) above, Recipient receives no rights or -licenses to the intellectual property of any Contributor under this -Agreement, whether expressly, by implication, estoppel or otherwise. All -rights in the Program not expressly granted under this Agreement are -reserved. - -This Agreement is governed by the laws of the State of New York and the -intellectual property laws of the United States of America. No party to this -Agreement will bring a legal action under this Agreement more than one year -after the cause of action arose. Each party waives its rights to a jury trial -in any resulting litigation. diff --git a/implementations/e84/README.md b/implementations/e84/README.md deleted file mode 100644 index f542cdfcd..000000000 --- a/implementations/e84/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# e84-api-impl - -An implementation of the Catalog API in Clojure overtop of the NASA EOSDIS Common Metadata Repository API. Currently hard coded to limit it to data in USGS EROS. - -## Prerequisites - -* Java -* Leiningen - -## Building - -`lein uberjar` - -## Running - -`java -cp target/e84-api-impl-0.1.0-SNAPSHOT-standalone.jar e84_api_impl.main` - -## Usage - -It supports the following API endpoints - -* http://localhost:3000/collections - - Implements a feature style API across collections. This is off-standard. Follow the "granules" link within a collection to get to features just in that collection -* http://localhost:3000/features - - Query for features - - params - - bbox - - time - - limit -* http://localhost:3000/features/:id - - Returns one feature by id. - -## License - -Copyright © 2017 Element 84 - -Distributed under the Eclipse Public License either version 1.0 or (at -your option) any later version. diff --git a/implementations/e84/dev/user.clj b/implementations/e84/dev/user.clj deleted file mode 100644 index 49141db1c..000000000 --- a/implementations/e84/dev/user.clj +++ /dev/null @@ -1,25 +0,0 @@ -(ns user - (require [clojure.tools.namespace.repl :as tnr] - [clojure.repl :refer :all] - [proto-repl.saved-values] - [com.stuartsierra.component :as c] - [e84-api-impl.system :as s])) - -(def system nil) - -(defn start [] - (set! *print-length* 5000) - (let [the-system (s/create-system)] - (alter-var-root #'system - (constantly (c/start the-system)))) - nil) - -(defn stop [] - (alter-var-root #'system #(when % (c/stop %))) - nil) - -(defn reset [] - (stop) - (tnr/refresh :after 'user/start)) - -(println "E84 API Impl user.clj loaded") diff --git a/implementations/e84/project.clj b/implementations/e84/project.clj deleted file mode 100644 index 7b8483030..000000000 --- a/implementations/e84/project.clj +++ /dev/null @@ -1,18 +0,0 @@ -(defproject e84-api-impl "0.1.0-SNAPSHOT" - :description "FIXME: write description" - :url "http://example.com/FIXME" - :license {:name "Eclipse Public License" - :url "http://www.eclipse.org/legal/epl-v10.html"} - :dependencies [[org.clojure/clojure "1.8.0"] - [ring "1.3.2"] - [ring/ring-json "0.4.0"] - [compojure "1.5.1"] - [com.stuartsierra/component "0.3.1"] - [clj-time "0.12.2"] - [com.rpl/specter "0.13.1"] - [clj-http "2.3.0"]] - - :profiles {:dev {:source-paths ["src" "dev" "test"] - :dependencies [[proto-repl "0.3.1"]]} - :uberjar {:main e84-api-impl.main - :aot :all}}) diff --git a/implementations/e84/src/e84_api_impl/api/jetty_server.clj b/implementations/e84/src/e84_api_impl/api/jetty_server.clj deleted file mode 100644 index dcaaf0d07..000000000 --- a/implementations/e84/src/e84_api_impl/api/jetty_server.clj +++ /dev/null @@ -1,56 +0,0 @@ -(ns e84-api-impl.api.jetty-server - (:require [ring.middleware.json :as ring-json] - [com.stuartsierra.component :as c] - [compojure.handler :as handler] - [ring.adapter.jetty :as jetty])) - -(defn exception-handler - [f] - (fn [request] - (try - (f request) - (catch Throwable t - (.printStackTrace t) - {:status 500 - :content-type :json - :body "[\"An internal error occurred\"]"})))) - -;; A Component that represents the API to a web application. -(defrecord JettyServer - [ - ;; The port the application listens - port - - ;; A functions that will create the routes. It should accept the app component as an argument - ;; and return the routes - routes-fn - - ;; The instance of the jetty server started and serving HTTP request - jetty - - ;; The app component represents the a component that will contain all of the components needed - ;; to service requests that were received. - app] - - c/Lifecycle - (start - [api] - (let [ring-handler (-> (routes-fn app) ;; Temporarily remove app argument for demo - ; (routes-fn) - ring-json/wrap-json-response - ring-json/wrap-json-params - exception-handler - handler/site) - jetty (jetty/run-jetty ring-handler {:port port :join? false})] - (println "Jetty running on port" port) - (assoc api :jetty jetty))) - - (stop - [api] - (when jetty (.stop jetty)) - (dissoc api :jetty))) - -(defn create-web-api - "Creates an instance of the api component." - [port routes-fn] - (map->JettyServer {:port port :routes-fn routes-fn})) diff --git a/implementations/e84/src/e84_api_impl/api/routes.clj b/implementations/e84/src/e84_api_impl/api/routes.clj deleted file mode 100644 index 20f41e5f7..000000000 --- a/implementations/e84/src/e84_api_impl/api/routes.clj +++ /dev/null @@ -1,64 +0,0 @@ -(ns e84-api-impl.api.routes - (:require - [compojure.route :as route] - [compojure.core :refer :all] - [e84-api-impl.search-service :as search-service] - [com.rpl.specter :as s] - [cheshire.core :as json])) - -(defmulti parse-resp - "Handles converting a business api response into a ring response. Business api response should be - a map containing at least a :status key. The other contents of the map will be different depending - on the status" - (fn [{:keys [status]}] - status)) - -(defmethod parse-resp :invalid - [{:keys [errors]}] - {:status 400 - :content-type :json - :body errors}) - -(defmethod parse-resp :not-found - [{:keys [errors]}] - {:status 404 - :content-type :json - :body errors}) - -(defmethod parse-resp :ok - [{:keys [content]}] - {:status 200 - :content-type :json - :body content}) - -(defmethod parse-resp :created - [{:keys [content]}] - {:status 201 - :content-type :json - :body content}) - -(defn define-routes - [app] - (routes - ;; TODO implement /api - (context "/collections" [] - (GET "/" request - {:status 200 - :body (json/encode (search-service/find-features - :collection (:params request)) - {:pretty true})})) - (context "/features" [] - (GET "/" request - {:status 200 - :body (json/encode (search-service/find-features - :granule (:params request)) - {:pretty true})}) - ;; TODO implement POST - (POST "/" request - {:status 200 :body "OK"}) - (context "/:id" [id] - (GET "/" request - {:status 200 - :body (json/encode (search-service/get-feature id) - {:pretty true})}))) - (route/not-found "Not Found"))) diff --git a/implementations/e84/src/e84_api_impl/cmr_api.clj b/implementations/e84/src/e84_api_impl/cmr_api.clj deleted file mode 100644 index af145cf90..000000000 --- a/implementations/e84/src/e84_api_impl/cmr_api.clj +++ /dev/null @@ -1,36 +0,0 @@ -(ns e84-api-impl.cmr-api - (:require - [clj-http.client :as http] - [cheshire.core :as json])) - -(def short-name - "Landsat_8_OLI_TIRS") - -(def version - "1") - -(def item-type->prov-params - {:granule {:provider "USGS_EROS" - :sort_key "granule_ur"} - :collection {:provider "USGS_EROS" - :has_granules true - :sort_key "entry_title"}}) - - -(def default-params - {}) - -(defn find-items - [item-type params] - (let [query-params (merge default-params - params - (item-type->prov-params item-type)) - _ (println "Searching for" (name item-type) - "with" (pr-str query-params)) - resp (http/get - (format "https://cmr.earthdata.nasa.gov/search/%ss.json" - (name item-type)) - {:query-params query-params}) - {:keys [body]} resp - results (json/decode body true)] - (get-in results [:feed :entry]))) diff --git a/implementations/e84/src/e84_api_impl/core.clj b/implementations/e84/src/e84_api_impl/core.clj deleted file mode 100644 index 34e6087f4..000000000 --- a/implementations/e84/src/e84_api_impl/core.clj +++ /dev/null @@ -1,6 +0,0 @@ -(ns e84-api-impl.core) - -(defn foo - "I don't do a whole lot." - [x] - (println x "Hello, World!")) diff --git a/implementations/e84/src/e84_api_impl/main.clj b/implementations/e84/src/e84_api_impl/main.clj deleted file mode 100644 index 8a6393a81..000000000 --- a/implementations/e84/src/e84_api_impl/main.clj +++ /dev/null @@ -1,10 +0,0 @@ -(ns e84-api-impl.main - (:require [e84-api-impl.system :as s] - [com.stuartsierra.component :as c]) - (:gen-class)) - -(defn -main - [& args] - (let [s (s/create-system)] - (c/start s) - (println "Running api"))) diff --git a/implementations/e84/src/e84_api_impl/search_service.clj b/implementations/e84/src/e84_api_impl/search_service.clj deleted file mode 100644 index 74599dd67..000000000 --- a/implementations/e84/src/e84_api_impl/search_service.clj +++ /dev/null @@ -1,136 +0,0 @@ -(ns e84-api-impl.search-service - (:require - [clojure.string :as str] - [e84-api-impl.cmr-api :as cmr] - [ring.util.codec :as codec])) - -(defmulti item->geometry - (fn [{:keys [polygons boxes] :as item}] - (cond - polygons :polygons - boxes :boxes - :else (throw (Exception. (str "Unknown geometry " (pr-str item))))))) - -(defn coord-string->points - [coord-str] - (partition-all 2 (map #(Double. ^String %) (str/split coord-str #" ")))) - -(defn cmr-polygon->geojson-polygon - [polygon] - (map coord-string->points polygon)) - -(defmethod item->geometry :polygons - [{:keys [polygons]}] - {:type :Polygon - ;; TODO May not be converting it correctly. Need to know if CMR style is equivalent to geojson - :coordinates (cmr-polygon->geojson-polygon (first polygons))}) - -(defmethod item->geometry :boxes - [{:keys [boxes]}] - (let [[s w n e] (map #(Double. ^String %) (str/split (first boxes) #" "))] - {:type :Polygon - ;; Note this polygon doesn't contain the same area. It's going to curve - ;; incorrectly. TODO densify - :coordinates [[[w s] - [e s] - [e n] - [w n] - [w s]]] - :bbox [w s e n]})) - -(defmethod item->geometry :default - [_] - (item->geometry {:boxes ["-90 -180 90 180"]})) - - -(def link-data-type - "http://esipfed.org/ns/fedsearch/1.1/data#") - -(def link-browse-type - "http://esipfed.org/ns/fedsearch/1.1/browse#") - -(defn link-with-type - [type links] - (->> links - (filter #(= (:rel %) type)) - first - :href)) - -(defn feature-specific-links - [params item-type item] - (case item-type - :collection - {:granules (str "http://localhost:3000/features?" - (codec/form-encode - (assoc params :entry_title (:title item))))} - :granule - nil)) - -(defn item->feature - [params item-type item] - (let [{:keys [title links time_start time_end data_center]} item] - {:type :Feature - :id title - :geometry (item->geometry item) - :properties - {:id title - :start_date time_start - :end_date time_end - :provider data_center - :links (merge - (feature-specific-links params item-type item) - {:thumbnail (link-with-type link-browse-type links) - :data (link-with-type link-data-type links) - :self (str "http://localhost:3000/features/" - (codec/url-encode title))})}})) - - - -(def common-api-param-name->cmr-param-name - {:limit :page_size - :bbox :bounding_box - :time :temporal - :next :page_num}) - -(def granule-api-param-name->cmr-param-name - (merge common-api-param-name->cmr-param-name - {:id :granule_ur})) - -(def collection-api-param-name->cmr-param-name - (merge common-api-param-name->cmr-param-name - {:id :entry_title})) - -(defn api-param->cmr-param - [item-type param-name value] - (let [f (case item-type - :granule granule-api-param-name->cmr-param-name - :collection collection-api-param-name->cmr-param-name)] - [(f param-name param-name) value])) - -(defn find-features - [item-type params] - (let [items (cmr/find-items - item-type - (into {} - (map #(apply api-param->cmr-param item-type %) - params))) - page_num (Long. ^String (:next params "1")) - next-params (when (seq items) - (assoc params :next (inc page_num)))] - (merge - {:type :FeatureCollection - :features (map #(item->feature params item-type %) items)} - (when next-params - {:next (str "http://localhost:3000/features?" - (codec/form-encode next-params))})))) - -(defn get-feature - [id] - (-> (find-features {:id id}) - :features - first)) - -#_ -(def granules (cmr/find-granules nil)) -#_ -(def granule (first granules)) diff --git a/implementations/e84/src/e84_api_impl/system.clj b/implementations/e84/src/e84_api_impl/system.clj deleted file mode 100644 index 8dc30aa42..000000000 --- a/implementations/e84/src/e84_api_impl/system.clj +++ /dev/null @@ -1,14 +0,0 @@ -(ns e84-api-impl.system - (require [com.stuartsierra.component :as c] - [e84-api-impl.api.routes :as routes] - [e84-api-impl.api.jetty-server :as jetty-server])) - -(def PORT 3000) - -(defn create-system - "Creates a new instance of the message store system." - [] - (c/system-map - :api (c/using (jetty-server/create-web-api PORT routes/define-routes) - [:app]) - :app {})) diff --git a/implementations/e84/test/e84_api_impl/core_test.clj b/implementations/e84/test/e84_api_impl/core_test.clj deleted file mode 100644 index 2d9770f0b..000000000 --- a/implementations/e84/test/e84_api_impl/core_test.clj +++ /dev/null @@ -1,7 +0,0 @@ -(ns e84-api-impl.core-test - (:require [clojure.test :refer :all] - [e84-api-impl.core :refer :all])) - -(deftest a-test - (testing "FIXME, I fail." - (is (= 0 1)))) From e8802a40073e2ca8920e601ec0a68f2b449e7259 Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Wed, 1 Nov 2017 15:15:28 -0700 Subject: [PATCH 03/10] cleaning up non-standard implementations, as this repo should just be the spec. They have moved to https://github.com/radiantearth/catalog-implementor-survey --- .../digitalglobe/overview.md | 39 - .../hexgeo/apollo/overview.md | 423 -- .../hexgeo/apollo/spec.json | 6368 ----------------- non-standard-implementations/oam/overview.md | 38 - non-standard-implementations/oam/spec.json | 1022 --- non-standard-implementations/overview.md | 41 - non-standard-implementations/pixia/README.md | 489 -- .../pixia/catalog-api.yaml | 935 --- .../planet/old-catalog/overview.md | 16 - ...v1-catalog-grid-utm-25km-experimental.yaml | 1086 --- .../planet/old-catalog/v1-catalog.yaml | 958 --- .../planet/overview.md | 94 - non-standard-implementations/planet/spec.json | 1878 ----- .../radiant/overview.md | 15 - .../raster-foundry/overview.md | 106 - .../raster-foundry/spec.json | 4646 ------------ 16 files changed, 18154 deletions(-) delete mode 100644 non-standard-implementations/digitalglobe/overview.md delete mode 100644 non-standard-implementations/hexgeo/apollo/overview.md delete mode 100644 non-standard-implementations/hexgeo/apollo/spec.json delete mode 100644 non-standard-implementations/oam/overview.md delete mode 100644 non-standard-implementations/oam/spec.json delete mode 100644 non-standard-implementations/overview.md delete mode 100755 non-standard-implementations/pixia/README.md delete mode 100755 non-standard-implementations/pixia/catalog-api.yaml delete mode 100644 non-standard-implementations/planet/old-catalog/overview.md delete mode 100644 non-standard-implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml delete mode 100644 non-standard-implementations/planet/old-catalog/v1-catalog.yaml delete mode 100644 non-standard-implementations/planet/overview.md delete mode 100644 non-standard-implementations/planet/spec.json delete mode 100644 non-standard-implementations/radiant/overview.md delete mode 100644 non-standard-implementations/raster-foundry/overview.md delete mode 100644 non-standard-implementations/raster-foundry/spec.json diff --git a/non-standard-implementations/digitalglobe/overview.md b/non-standard-implementations/digitalglobe/overview.md deleted file mode 100644 index 5ff169bb8..000000000 --- a/non-standard-implementations/digitalglobe/overview.md +++ /dev/null @@ -1,39 +0,0 @@ -# Caveat - -This introduction is from the perspective of someone not involved with creating the various DigitalGlobe catalogs, but who has gotten to look behind the curtain during. It is also from the viewpoint of DigitalGlobe's platform division which is somewhat distinct from that of the imagery division. - -# Interface Experiences - -The current leading catalog interfaces in DigitalGlobe platform are known as Catalog V2 and VectorServices, which are both powered by the same underlying datastore (VectorServices). Catalog V2 and VectorServices are documented [here](https://gbdxdocs.digitalglobe.com/docs/catalog-v2-course) and [here](https://gbdxdocs.digitalglobe.com/docs/read-vector-services-overview), respectively. - -The REST interface to Catalog V2 allows direct lookup of a JSON record based on its unique identifier. Each record also contains a list of types that (informally) specify which fields are available in the properties section of the record. Types are freeform text conventions used to identify things like particular satellite sources, data levels, and sensor types. It also implements a JSON REST API that requires querying by location (specified as WKT) and allows for querying by date and type via top-level JSON fields. The JSON query payload also includes a general "filters" request that implements a custom query language for filtering on other parameters. It returns this data as a JSON result set that includes result data as well as result count statistics. This is in contrast to VectorServices which returns GeoJSON results. - -Despite the creation of a custom query language, the Catalog V2 query interface is generally considered usable at DigitalGlobe. VectorServices' more standard GeoJSON response is, however, preferred to the Catalog V2 response. In Platform, the most common imagery starting point are raw pre-orthorectified radiances presented as scaled, integer-quantized radiance values. These are provided along with a full set of metadata suitable for processing the data into higher level products such as orthorectified surface reflectance products or DEMs. As such, the baseline imagery metadata elements that are returned by queries is another point of discussion that arises. Beyond this, most catalog discussion has focused on the experiences achieved by a variety of different implementation strategies. - -# Implementation Background - -DigitalGlobe has built a variety of different catalog systems in the past, with varying degrees of success. Internally, groups have not been completely happy with any implementation in particular, and are therefore reluctant to recommend any one wholesale to the community. One major challenge in standardizing within DigitalGlobe seems to be that imagery producers have very different requirements than the various types of consumers of who, in turn, can have very different requirements from each other. As a result, there has been pressure to overgeneralize the structure of data stored in the catalog, the query interfaces used to access it, and the resulting output structures. This has hampered the efforts of all attempted implementations. - -Four classes of catalogs have been attempted at DigitalGlobe: traditional (relational), graph-based, document-based, and flat-file-based. In all but the flat-file case, a RESTish API is placed in front of the actual data store to facilitate access. The majority of folks at DigitalGlobe Platform seem to agree that catalog REST APIs should return GeoJSON (which is not reflected in Catalog V2). This reflects a world view in which imagery consists of localized collections, and that location is the primary factor in determining utility. This has been generally true in the past, but may be challenged by the work of Planet and others developing high-revisit, global datasets. - -The presence of a REST API for querying immediately requires specification of what parameters are available to be queried. Naturally, this is a point of contention. While the basics like acquisitionDate, footprint, and cloudCover are easy, attributes like offNadirAngle are of particular use to people developing DEMs or atmospheric compensation techniques. Detailed metadata about spacecraft attitude, conditions, and acquisition parameters, while crucial for those responsible for creating imagery products, are often irrelevant to consumers of higher level products. At DigitalGlobe both groups exist and are influential. - -## Traditional Catalogs - -Traditional catalogs based on spatially-enabled relational databases exist and are used in certain groups at DigitalGlobe. These groups go as far as to bypass REST APIs, preferring instead to query these based on SQL. One such catalog enables the creation of DigitalGlobe Maps API global mosaics. Unfortunately, the flexible SQL approach cannot be shared across the organization and a REST API on top of that ends up being too limited for most people's uses. - -## Graph-based Catalogs - -While they may seem completely ridiculous at first, graph-based catalogs are actually based in reason. The logic is that as an imagery producer, DigitalGlobe exposes a variety of imagery products based on the same underlying pixels. These products are related by a series of processing steps used to derive them from one (or more) source products. The logic is that indexing them into a graph database maintains provenance through the full set of standard products as well as potentially any derivitive products that are produced and indexed. This would be all well and good except that typical usage patterns don't really care about that view, graph queries are unfamiliar to most people, and compatibility layers are slow and limited. - -## Document-based Catalogs - -The current GBDX Catalog V2 API is a compatibility layer on top of a general vector store based on elasticsearch. The result is that while the REST interface to the catalog is limited, the underlying datastore can accomodate querying nearly any metadata structure via nearly any query strategy. The cost of this, aside from performance (which is addressable) is that people querying the underlying data store need to be intimately familiar with the specific data they are querying, since it's structure can be anything. - -## Flat-File-based Catalogs - -In certain situations it's convenient to be able to just download a full index and query it client side. The index can be just thrown up on S3 or similar for clients to download. - -# Conclusion? - -Something. diff --git a/non-standard-implementations/hexgeo/apollo/overview.md b/non-standard-implementations/hexgeo/apollo/overview.md deleted file mode 100644 index 85e45e20b..000000000 --- a/non-standard-implementations/hexgeo/apollo/overview.md +++ /dev/null @@ -1,423 +0,0 @@ -# Introduction - -This API spec covers the REST(ish) APIs delivered with Hexagon Geospatial's ERDAS APOLLO product. The full API suite -covers much more than just catalog APIs, and is included in the spec here, but this document will focus on the catalog -related APIs. - -The current swagger-ui API Console for these APIs is available at the -[APOLLO demo site](https://demo-apollo.hexagongeospatial.com/erdas-apollo/api-docs/). Login with demo/demo123. - -# Overview - -The APOLLO API can generally be divided into two sections: catalog APIs and data management APIs. - -## Catalog APIs - -These APIs will be of most relevance to this effort. In the API Console, the catalog APIs consist of the entries from -Entire Catalog through Videos. These are typical REST CRUD APIs for managing the items in the APOLLO catalog. The use of -swagger to document these APIs is a relatively new addition to the product and is still somewhat of a work in progress, -as many of the example models/payloads/responses are not fully complete. - -## Data Management APIs - -The remaining APIs are typically for adding data to the catalog (crawling) and some light manipulation of the data after -it has been crawled into the catalog. These APIs aren't directly relevant to this workshop so they are not detailed -here, but if there is interest we are happy to explain them in further detail. The demo API Console also documents these -APIs pretty well. - -# Catalog API Notes - -## Imagery spec - -JSON ImageReference document (partial): - -``` -{ - "acquisitionInfo": { - "acquisitionDate": "2017-10-19T03:30:32Z", - "acquisitionLevelMask": 1118464, - "availabilityDate": "2017-10-19T03:30:32Z", - "dataAcquired": true, - "dataProcessed": true, - "errorValue": 101, - "lastModificationDate": null, - "metadataAcquired": true, - "processingLevel": null, - "qualityValue": 101, - "resolution": 1 - }, - "attachments": { - "default": { - "lastUpdated": "2017-10-19T03:30:34Z", - "mimeType": "text/xml; charset=utf-8", - "name": "default" - }, - "thumbnail": { - "lastUpdated": "2017-10-19T18:07:33Z", - "mimeType": "image/png", - "name": "thumbnail", - "path": "file:/E:/EAStorage/storage/legend/coverage/EAIM/GEOPROCESSING/demo/demo_3_Band/IMAGINE.Portal_SDK_Painted_Relief-2017-10-18-22-30-29/TTI762FBP_BEA.png" - } - }, - "children": [], // list of children - "creationDate": null, - "czsEnabled": true, - "decoderName": "img", - "defaultAttachmentName": "default", - "description": "Output painted relief image", - "domainSetExtent": { - "elevationExtent": null, - "spatialExtent": { - "boundingGeometry": { // custom geometry format - "cardinality": 2, - "data": [ - [ - 2174650, - 1518850, - 2234450, - 1518850, - 2234450, - 1555550, - 2174650, - 1555550 - ] - ], - "envelope": [ - 2174650, - 1518850, - 2234450, - 1555550, - "EPSG:2240" - ], - "epsgId": 2240, - "srs": "EPSG:2240", - "type": "polygon" - }, - "dataProcessingLevel": 1, - "dataType": 5, - "envelope": [ - 2174650, - 1518850, - 2234450, - 1555550, - "EPSG:2240" - ], - "georectified": true, - "georeferenced": true, - "latLongBoundingBox": [ - -84.57030203228437, - 34.174634992682975, - -84.37210301776302, - 34.275977902783595, - "EPSG:4326" - ], - "pixelSpace": false, - "srs": { - "epsgid": 2240, - "srs": "EPSG:2240" - }, - "verticalDatum": null, - "xExtent": { - "continuousRange": false, - "maximum": { - "string": "2234450.0", - "typeName": "double" - }, - "minimum": { - "string": "2174650.0", - "typeName": "double" - }, - "resolution": { - "string": "100.0", - "typeName": "double" - }, - "singleValue": false, - "size": 598 - }, - "yExtent": { - "continuousRange": false, - "maximum": { - "string": "1555550.0", - "typeName": "double" - }, - "minimum": { - "string": "1518850.0", - "typeName": "double" - }, - "resolution": { - "string": "100.0", - "typeName": "double" - }, - "singleValue": false, - "size": 367 - }, - "zExtent": null - }, - "temporalExtent": null - }, - "downloadEnabled": true, - "drawOrder": 0, - "ecwpEnabled": false, - "ecwpLayerName": "GEOPROCESSING/demo/demo_3_Band/IMAGINE.Portal_SDK_Painted_Relief-2017-10-18-22-30-29/TTI762FBP_BEA.img", - "fileURI": "E:\\EAStorage\\storage\\wps\\isms\\process_output\\demo\\DTI7617MC_BEA\\TTI762FBP_BEA.img", - "footprint": { // footprint geometry in EPSG:4326 - "cardinality": 2, - "data": [ - [ - -84.5698212376335, - 34.174634992683, - -84.372103017763, - 34.1751252459236, - -84.3723480233361, - 34.2759779027836, - -84.5703020322844, - 34.2754858012499 - ] - ], - "envelope": [ - -84.5703020322844, - 34.174634992683, - -84.372103017763, - 34.2759779027836, - "EPSG:4326" - ], - "epsgId": 4326, - "srs": "EPSG:4326", - "type": "polygon" - }, - "geoServicesEnabled": false, - "id": "01077a025f311d35015f32aeafeb0006", - "identifier": "72e68b6b-e5a7-411d-9665-0ec44e43fde6", - "imageXEnabled": false, - "jpipEnabled": false, - "metadata": { // categorized collection of arbitrary metadata values - "METADATA_URI": { - "ISO19115 Writer using templates": "E:\\EAStorage\\storage\\metadata\\coverage\\EAIM\\GEOPROCESSING\\demo\\demo_3_Band\\IMAGINE.Portal_SDK_Painted_Relief-2017-10-18-22-30-29\\TTI762FBP_BEA.xml" - }, - "SPECIAL": { - "username": "admin" - } - }, - "modificationDate": null, - "name": "TTI762FBP_BEA", - "nativeFootprint": { // footprint in dataset's native CRS - "cardinality": 2, - "data": [ - [ - 2174650, - 1518850, - 2234450, - 1518850, - 2234450, - 1555550, - 2174650, - 1555550 - ] - ], - "envelope": [ - 2174650, - 1518850, - 2234450, - 1555550, - "EPSG:2240" - ], - "epsgId": 2240, - "srs": "EPSG:2240", - "type": "polygon" - }, - "ogcUniqueName": "TTI762FBP_BEA", // layer name for OGC services (i.e. name made unique if there are duplicates) - "parent": { // parent reference - "defaultAttachmentName": "default", - "id": "01077a025f311d35015f32aeae740000", - "identifier": "06ee00b6-36d5-423f-96bf-6e98a7cfe7d2", - "name": "IMAGINE.Portal_SDK_Painted_Relief-2017-10-18-22-30-29", - "parentId": "01077a02585040f5015853a209de0006", - "title": null - }, - "path": "GEOPROCESSING/demo/demo_3_Band/IMAGINE.Portal_SDK_Painted_Relief-2017-10-18-22-30-29/TTI762FBP_BEA", - "properties": { // arbitrary collection of property values - "apollo.connector": "com.erdas.apollo.hedm.connector.ImageryConnector" - }, - "pyramidDescriptor": { // data on pyramids/overviews - "aggregatePyramid": false, - "decimationFactor": 2.0067114093959733, - "internal": true, - "levelCount": 3, - "levelDescriptors": [ - { - "index": 1, - "sizes": { - "height": 183, - "width": 298 - } - }, - { - "index": 2, - "sizes": { - "height": 92, - "width": 149 - } - }, - { - "index": 3, - "sizes": { - "height": 46, - "width": 75 - } - } - ], - "sizes": { - "height": 367, - "width": 598 - }, - "upToDate": false - }, - "rangeSetDescription": { - "rangeSetSequence": [ - { - "_class": "com.ionicsoft.coverage.RangeSet", - "abstract": null, - "iD": null, - "name": "Range Set", - "nameOrID": "Range Set", - "namespace": null, - "rangeAxisList": [ - { - "_class": "com.ionicsoft.coverage.RangeAxis", - "abstract": null, - "channelRange": true, - "name": "Band", - "namespace": null, - "nullValue": false, - "rangeExtent": [ - { - "continuousRange": true, - "maximum": { - "string": "band1", - "typeName": "String" - }, - "minimum": { - "string": "band1", - "typeName": "String" - }, - "resolution": { - "string": "", - "typeName": "String" - }, - "singleValue": true, - "size": 1 - }, - { - "continuousRange": true, - "maximum": { - "string": "band2", - "typeName": "String" - }, - "minimum": { - "string": "band2", - "typeName": "String" - }, - "resolution": { - "string": "", - "typeName": "String" - }, - "singleValue": true, - "size": 1 - }, - { - "continuousRange": true, - "maximum": { - "string": "band3", - "typeName": "String" - }, - "minimum": { - "string": "band3", - "typeName": "String" - }, - "resolution": { - "string": "", - "typeName": "String" - }, - "singleValue": true, - "size": 1 - } - ], - "title": "Band Selection, 3 Band(s)" - }, - { - "_class": "com.ionicsoft.coverage.RangeAxis", - "abstract": null, - "channelRange": false, - "name": "Null Values", - "namespace": null, - "nullValue": true, - "rangeExtent": [ - { - "continuousRange": true, - "maximum": { - "string": "0.0", - "typeName": "double" - }, - "minimum": { - "string": "0.0", - "typeName": "double" - }, - "resolution": { - "string": "0.0", - "typeName": "double" - }, - "singleValue": true, - "size": 1 - } - ], - "title": null - } - ], - "title": "Range Set Description" - } - ] - }, - "registrationDate": "2017-10-19T03:30:29Z", - "spatialExtentXPixelSize": 598, - "spatialExtentYPixelSize": 367, - "spatialExtentZPixelSize": null, - "tags": [ // simple tags/keywords - "GeoProcessed", - "IMAGINE SMS:IMAGINE.Portal_SDK_Painted_Relief", - "demo_3_Band", - "Painted Relief" - ], - "temporalExtentEndDate": null, - "temporalExtentStartDate": null, - "title": "Painted Relief (TTI762FBP_BEA)", - "viewEnabled": true, - "wcsEnabled": true, - "wmsEnabled": true, - "wmtsEnabled": false, - "wmtsLayerName": "TTI762FBP_BEA" - } -``` -Further descriptions of some of the more common properties: - -| element | type | description | -|-------------------|--------|---------------------------------------------------------------------------------------------| -| acquisitionInfo | object | Various data about the acquisition of the dataset | -| attachments | array | Related files/data about the dataset (metadata files, thumbnails, etc.) | -| children | array | Array of children of this entity. Usually only folders/aggregates have children, but multi-image datasets can also have children| -| domainSetExtent | object | Detailed information about the spatio-temporal extent of the dataset - 3D, temporal, elevation, etc. | -| fileURI | string | File path to the dataset - can sometimes be a custom URI specifying another source of data (i.e. database)| -| footprint | object | Footprint geometry in EPSG:4326 | -| id | string | Identifier | -| metadata | array | Categorized array of arbitrary metadata values. Some of this will be populated from external metadata (ISO files etc.)| -| name | string | Dataset name | -| nativeFootprint | object | Footprint geometry in dataset's native CRS | -| ogcUniqueName | string | Dataset's unique layer name for OGC services (essentially name made unique if duplicates) | -| parent | object | Parent reference | -| properties | array | Array of arbitrary properties about the data. These are typed properties (in the database), which allows more efficient querying capabilities | -| pyramidDescriptor | object | Description of dataset pyramids/overviews | -| rangeSetDescription | object | Essentially band information | -| registrationDate | date | Date the dataset was added to the catalog | -| tags | array | Array of tags/keywords | -| temporalExtentStartDate | date | Start of temporal range | -| temporalExtentEndDate | object | End of temporal range | -| title | object | Human-friendly dataset title | diff --git a/non-standard-implementations/hexgeo/apollo/spec.json b/non-standard-implementations/hexgeo/apollo/spec.json deleted file mode 100644 index c8c1c0b86..000000000 --- a/non-standard-implementations/hexgeo/apollo/spec.json +++ /dev/null @@ -1,6368 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "description": "Rest API for accessing the APOLLO catalog", - "version": "v2.0", - "title": "APOLLO Catalog and Data Management API", - "termsOfService": "https://www.hexagongeospatial.com/apps/terms", - "contact": { - "name": "https://www.hexagongeospatial.com/" - }, - "license": { - "name": "2017 Intergraph Corporation. All rights reserved. Hexagon Geospatial is part of Intergraph Corporation", - "url": "https://www.hexagongeospatial.com/apps/terms" - } - }, - "basePath": "/erdas-apollo", - "tags": [ - { - "name": "Entire Catalog", - "description": "All catalog items" - }, - { - "name": "Aggregates", - "description": "Aggregates" - }, - { - "name": "Contacts", - "description": "Contacts" - }, - { - "name": "Generic", - "description": "Generic business data/documents" - }, - { - "name": "Images", - "description": "Image datasets" - }, - { - "name": "Point Clouds", - "description": "Point cloud datasets" - }, - { - "name": "Processes", - "description": "Spatial processes" - }, - { - "name": "Services", - "description": "OGC Services" - }, - { - "name": "Vectors", - "description": "Vector datasets" - }, - { - "name": "Videos", - "description": "Video datasets" - }, - { - "name": "Clip Zip Ship", - "description": "Clips data from catalog" - }, - { - "name": "Crawl", - "description": "Crawl data into the catalog" - }, - { - "name": "Delete", - "description": "Delete items from the catalog" - }, - { - "name": "Dropbox", - "description": "Manage dropboxes" - }, - { - "name": "Jobs", - "description": "Get and manage jobs created by other APIs" - }, - { - "name": "Move", - "description": "Move catalog items" - }, - { - "name": "Pyramids", - "description": "Manage catalog item pyramids" - }, - { - "name": "Thumbnails", - "description": "Manage catalog item thumbnails" - }, - { - "name": "Update Metadata", - "description": "Update catalog item ISO metadata" - }, - { - "name": "Context Services", - "description": "Manage context(WMC) services" - }, - { - "name": "Vector Services", - "description": "Manage vector services" - } - ], - "produces": [ - "application/json" - ], - "paths": { - "/content/catalog/search": { - "post": { - "summary": "Advanced catalog search.", - "parameters": [ - { - "$ref": "#/parameters/advancedSearchCriteriaPostPayloadParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items": { - "get": { - "summary": "Get all catalog items.", - "description": "Catalog items can be filtered by various query parameters. By default a brief summary of each catalog item is returned.\n", - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/classesParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}": { - "get": { - "summary": "Get a catalog item", - "produces": [ - "application/json" - ], - "description": "Returns a specific catalog item. By default the full catalog item is returned.\n", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a catalog item.", - "description": "Deleting a non-aggregate will delete that item only. Deleting an aggregate will perform a cascading delete and any contained aggregates and items will also be deleted. DELETE /content/catalog/items/{itemId} will redirect here.", - "operationId": "startDeleteItemJob", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "202": { - "description": "Request accepted for processing.", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "summary": "Update a catalog item.", - "description": "Updates property values on a specific catalog item.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}/attachment/{attachmentName}": { - "get": { - "summary": "Get an attachment.", - "description": "Returns a list of attachments for the specified catalog item.", - "produces": [ - "image/jpeg", - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/attachmentNameParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "type": "file" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add an attachment.", - "description": "Adds an attachment reference to the catalog item. The attachment is represented by path to a file, name for attachment, and the mimeType of the file.", - "produces": [ - "image/jpeg", - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/attachmentNameParam" - }, - { - "$ref": "#/parameters/attachmentPostPayload" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created attachment in the response Location header, if the property was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "tags": [ - "Entire Catalog" - ], - "summary": "Delete an attachment.", - "consumes": [ - "application/json" - ], - "description": "Deletes an attachment reference from a specific catalog item.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/attachmentNameParam" - } - ], - "responses": { - "204": { - "description": "Successfully deleted the attachment from catalog item." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}/{propertyName}": { - "get": { - "summary": "Get a property value.", - "description": "Returns the value of the property for a specific catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/propertyNameParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add or update a property.", - "description": "Create a new property, or update an existing property, of a specific catalog item.", - "consumes": [ - "application/x-www-form-urlencoded", - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/propertyNameParam" - }, - { - "$ref": "#/parameters/propertyPostTypeQueryParam" - }, - { - "$ref": "#/parameters/propertyPostValueQueryParam" - }, - { - "$ref": "#/parameters/propertyPostRenameQueryParam" - }, - { - "$ref": "#/parameters/propertyPostPayloadParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created property in the response Location header, if the property was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "tags": [ - "Entire Catalog" - ], - "summary": "Delete a property.", - "description": "Deletes a property by name from a specific catalog item .", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/propertyNameParam" - } - ], - "responses": { - "204": { - "description": "Successfully deleted the catalog item." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}/classifyingConcepts": { - "get": { - "summary": "Get a concept type item.", - "description": "Returns a concept that classifies a specific catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add a concept type item.", - "description": "Adds a new concept type that classifies a catalog item.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "201": { - "description": "Success if concept was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a concept type item.", - "description": "Deletes a concept type that classifies a catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "204": { - "description": "Successfully deleted the catalog item." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/concepts/{ID}/classifiedObjects": { - "get": { - "summary": "Get all classification object type items.", - "description": "Returns list of objects classified by a specific concept item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add classification object type item.", - "description": "Adds a new object to classify a given concept type item.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "201": { - "description": "Success if item was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a classification object type item.", - "description": "Deletes an object classified by a given concept item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "204": { - "description": "Successfully deleted the catalog item." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}/rights": { - "get": { - "summary": "Get rights for catalog item.", - "description": "Gets rights information for a specific catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Rights" - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Add or update rights for catalog item.", - "description": "Creates or modifies the existing the rights for a specific catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/rightsPutPayloadParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "204": { - "description": "Successfully updated." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}/rights/currentuser": { - "get": { - "summary": "Get current user rights.", - "description": "Gets a summary of rights for the current user for a specific catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/CurrentUserRightsSummary" - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/items/{ID}/rights/{principalName}": { - "delete": { - "summary": "Delete rights by principal name.", - "description": "Deletes a principal's rights for a catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#parameters/principalNameParam" - } - ], - "tags": [ - "Entire Catalog" - ], - "responses": { - "204": { - "description": "Success" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/aggregates": { - "get": { - "summary": "Get all aggregates.", - "description": "Returns list of aggregate catalog items. Catalog aggregates can be filtered using the various query parameters. By default a brief summary for each folder is returned.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Aggregates" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add an aggregate.", - "description": "Adds an aggregate catalog item with minimum properties. Returns new aggregate id in Location header.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Creates an aggregate with minimum properties.", - "required": true, - "schema": { - "$ref": "#/definitions/AggregateParams" - } - } - ], - "tags": [ - "Aggregates" - ], - "responses": { - "201": { - "description": "Request accepted for processing." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "422": { - "description": "Invalid parent specified.", - "schema": { - "$ref": "#/definitions/UnprocessableEntityError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/aggregates/{ID}": { - "get": { - "summary": "Get an aggregate.", - "description": "Returns a specific aggregate catalog item. By default, this the full aggregate definition is returned.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Aggregates" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "summary": "Update an aggregate.", - "description": "Updates property values on a specific aggregate catalog item.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "tags": [ - "Aggregates" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/images": { - "get": { - "summary": "Get all image datasets.", - "description": "Returns all image dataset catalog items. Catalog items can by filtered using various query parameters. By default, a brief summary for each catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Images" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add an image dataset.", - "description": "Adds a image dataset catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/catalogItemPostPayload" - } - ], - "tags": [ - "Images" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created resource in the response Location header, if the resource was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "422": { - "description": "Invalid parent specified.", - "schema": { - "$ref": "#/definitions/UnprocessableEntityError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/images/{ID}": { - "get": { - "summary": "Get an image dataset.", - "description": "Returns an image dataset by specific catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Images" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "tags": [ - "Images" - ], - "summary": "Update an image dataset.", - "description": "Updates property values on a specific catalog image dataset.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/vectors": { - "get": { - "summary": "Get all vector feature datasets.", - "description": "Returns a list of all vector feature dataset catalog items. Catalog items can be filtered using various query parameters. By default, a brief summary of the catalog items is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Vectors" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add a vector feature dataset.", - "description": "Adds a vector dataset catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/catalogItemPostPayload" - } - ], - "tags": [ - "Vectors" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created resource in the response Location header, if the resource was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "422": { - "description": "Invalid parent specified.", - "schema": { - "$ref": "#/definitions/UnprocessableEntityError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/vectors/{ID}": { - "get": { - "summary": "Get a vector feature dataset.", - "description": "Gets a specific vector feature dataset catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Vectors" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "summary": "Update a vector feature dataset.", - "description": "Update property values on a specific vector feature dataset.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "tags": [ - "Vectors" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/pointclouds": { - "get": { - "summary": "Get all point cloud datasets.", - "description": "Returns list of all point cloud dataset catalog items. Catalog items can be filtered using the various query parameters. By default, a brief summary of each catalog item is returned.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Point Clouds" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add a point cloud dataset.", - "description": "Adds a new point cloud dataset catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/catalogItemPostPayload" - } - ], - "tags": [ - "Point Clouds" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created resource in the response Location header, if the resource was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "422": { - "description": "Invalid parent specified.", - "schema": { - "$ref": "#/definitions/UnprocessableEntityError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/pointclouds/{ID}": { - "get": { - "summary": "Get a point cloud dataset.", - "description": "Returns a specific point cloud dataset catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Point Clouds" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "summary": "Update a point cloud dataset.", - "description": "Update property values on a specific point cloud dataset.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "tags": [ - "Point Clouds" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/generic": { - "get": { - "summary": "Get all business datasets.", - "description": "Returns list of all business dataset catalog items. Catalog items can be filtered using various query parameters. By default, a brief summary of each catalog item is returned.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Generic" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add a business dataset.", - "description": "Adds a new business dataset catalog item", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/catalogItemPostPayload" - } - ], - "tags": [ - "Generic" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created resource in the response Location header, if the resource was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "422": { - "description": "Invalid parent specified.", - "schema": { - "$ref": "#/definitions/UnprocessableEntityError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/generic/{ID}": { - "get": { - "summary": "Get a business dataset.", - "description": "Returns a specific business dataset catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Generic" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "summary": "Update a business dataset.", - "description": "Update property values on a specific business dataset catalog item.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "tags": [ - "Generic" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/videos": { - "get": { - "summary": "Get all video datasets.", - "description": "Returns list of all video dataset catalog items. Catalog items can be filtered using various query parameters. By default, a brief summary of each catalog item is returned.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - } - ], - "tags": [ - "Videos" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Add a video dataset.", - "description": "Adds a new video dataset catalog item.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/catalogItemPostPayload" - } - ], - "tags": [ - "Videos" - ], - "responses": { - "201": { - "description": "Success, with the URL of the created resource in the response Location header, if the resource was successfully created." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "422": { - "description": "Invalid parent specified.", - "schema": { - "$ref": "#/definitions/UnprocessableEntityError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/datasets/videos/{ID}": { - "get": { - "summary": "Get a video dataset.", - "description": "Returns a specific video dataset catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Videos" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "summary": "Update a video dataset.", - "description": "Update property values on a specific video dataset catalog item.", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/catalogAttributePatchPayloadParam" - } - ], - "tags": [ - "Videos" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/clipZipShip": { - "post": { - "summary": "Clip image and provide access", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "description": "Creates job to clip data from catalog, package clipped data in zip file, and email download enabled link", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Clip Zip Ship Parameters", - "required": true, - "schema": { - "$ref": "#/definitions/ClipZipShipParametersDefinition" - } - } - ], - "tags": [ - "Clip Zip Ship" - ], - "responses": { - "202": { - "description": "successful operation", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/crawl": { - "post": { - "summary": "Create a crawl job", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "description": "Creates job to find recognized data types on file system or in database and add to the APOLLO catalog", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Crawl job Parameters", - "required": true, - "schema": { - "$ref": "#/definitions/CrawlJobParametersDefinition" - } - } - ], - "tags": [ - "Crawl" - ], - "responses": { - "202": { - "description": "successful operation", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/dropbox": { - "post": { - "summary": "Creates a dropbox configuration", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "description": "Creates a dropbox folder for monitoring and dynamically adds files to the APOLLO catalog", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Dropbox input parameters", - "required": true, - "schema": { - "$ref": "#/definitions/DropBoxParametersDefinition" - } - } - ], - "tags": [ - "Dropbox" - ], - "responses": { - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/dropbox/{ID}": { - "delete": { - "summary": "Delete a dropbox configuration", - "description": "Removes monitoring from a dropbox folder and deletes the associated configuration files", - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Dropbox" - ], - "responses": { - "204": { - "description": "Request successful - no content" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/delete": { - "post": { - "summary": "Delete multiple aggregates or catalog items", - "description": "Create a job that will delete one or more aggregate or catalog items. Deleting a non-aggregate will delete that item only. Deleting an aggregate will perform a cascading delete and any contained aggregates and items will also be deleted", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "operationId": "startDeleteItemsJob", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "List of catalog item identifier(s)", - "required": true, - "schema": { - "$ref": "#/definitions/DeleteJobParameters" - } - } - ], - "tags": [ - "Delete" - ], - "responses": { - "202": { - "description": "successful operation", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/updateMetadata": { - "post": { - "summary": "Update catalog item ISO metadata", - "description": "Create a job that will update single or bulk metadata items from the APOLLO catalog attachment", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "List of catalog item identifier(s)", - "required": true, - "schema": { - "$ref": "#/definitions/MetadataUpdateJobParameters" - } - } - ], - "tags": [ - "Update Metadata" - ], - "responses": { - "202": { - "description": "successful operation", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/move": { - "post": { - "summary": "Move catalog items", - "description": "Create a job that will move catalog items to a different folder and the restore folders operation is called on the modified folders after the move is complete.", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "List of catalog item identifier(s) and new parent folder id", - "required": true, - "schema": { - "$ref": "#/definitions/MoveJobParameters" - } - } - ], - "tags": [ - "Move" - ], - "responses": { - "202": { - "description": "successful operation", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/jobs": { - "get": { - "summary": "Get job ids of all jobs", - "description": "Returns list of all current running job ids", - "operationId": "getJobs", - "parameters": [], - "tags": [ - "Jobs" - ], - "responses": { - "200": { - "description": "Success.", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/JobBrief" - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/jobs/{jobId}": { - "get": { - "summary": "Get status for a job", - "description": "Returns status for the specific job", - "operationId": "getJob", - "parameters": [ - { - "name": "jobId", - "in": "path", - "description": "Job identifier", - "required": true, - "type": "string" - } - ], - "tags": [ - "Jobs" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a job", - "description": "Deletes a current running job by id", - "operationId": "deleteJob", - "parameters": [ - { - "name": "jobId", - "in": "path", - "description": "Job identifier", - "required": true, - "type": "string" - } - ], - "tags": [ - "Jobs" - ], - "responses": { - "204": { - "description": "Request successful - no content" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/jobs/{jobId}/cancel": { - "put": { - "summary": "Cancel a job", - "description": "Cancels a current running job by id", - "operationId": "cancelJob", - "parameters": [ - { - "name": "jobId", - "in": "path", - "description": "Job identifier", - "required": true, - "type": "string" - } - ], - "tags": [ - "Jobs" - ], - "responses": { - "201": { - "description": "Request successful - no content" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/pyramids": { - "post": { - "summary": "Generate a pyramid", - "description": "Creates a job that will generate a pyramid file. The specified catalog item will be updated with pyramid information. Multiple catalog item ids may be specified.", - "operationId": "startGeneratePyramidJobs", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "List of catalog identifier(s)", - "required": true, - "schema": { - "$ref": "#/definitions/PyramidJobParameters" - } - } - ], - "tags": [ - "Pyramids" - ], - "responses": { - "202": { - "description": "Request accepted", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/pyramids/{ID}": { - "post": { - "summary": "Add an existing pyramid", - "description": "Creates a job that adds existing pyramid file for specified catalog item. The catalog item will be updated with pyramid information. The catalog item specified should be an aggregate.", - "operationId": "addExistingPyramidsJob", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "in": "body", - "name": "body", - "required": false, - "schema": { - "$ref": "#/definitions/PyramidAddExistingParameters" - } - } - ], - "tags": [ - "Pyramids" - ], - "responses": { - "202": { - "description": "Request accepted", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete an existing pyramid", - "description": "Deletes pyramid information or specified catalog item id. The catalog item id may be either an aggregate or dataset item. The local pyramid file is left on server.", - "operationId": "deleteExistingPyramidsJob", - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "name": "deleteLocalFile", - "in": "query", - "description": "Remove local pyramid file from the server", - "required": true, - "type": "boolean", - "default": false - } - ], - "tags": [ - "Pyramids" - ], - "responses": { - "202": { - "description": "Request accepted" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/thumbnails": { - "post": { - "summary": "Generate a thumbnail", - "description": "Creates a job that will generate a thumbnail file. The specified catalog item will be updated with thumbnail information. Multiple catalog item ids may be specified.", - "operationId": "startGenerateThumbnailsJob", - "parameters": [ - { - "in": "body", - "name": "body", - "description": "List of catalog identifier(s)", - "required": true, - "schema": { - "$ref": "#/definitions/ThumbnailJobParameters" - } - } - ], - "tags": [ - "Thumbnails" - ], - "responses": { - "202": { - "description": "Request accepted", - "schema": { - "$ref": "#/definitions/JobBrief" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/ForbiddenRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/processes": { - "get": { - "tags": [ - "Processes" - ], - "summary": "Get all process datasets", - "description": "Return list of all process dataset catalog items", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/classesParam" - } - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/contacts": { - "get": { - "summary": "Get all contact types", - "description": "Returns a list of all contact type catalog items", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - } - ], - "tags": [ - "Contacts" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/contacts/{ID}": { - "get": { - "summary": "Get a contact type", - "description": "Returns a specific contact type catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Contacts" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a contact type", - "description": "Deletes a specific contact type catalog item", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Contacts" - ], - "responses": { - "204": { - "description": "Request accepted for processing" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/services": { - "get": { - "summary": "Get all OGC services.", - "description": "Returns a list of all OGC service catalog items. OGC Service items can be filtered by various query parameters. By default a brief summary of each service item is returned.\n", - "parameters": [ - { - "$ref": "#/parameters/profileParamBrief" - }, - { - "$ref": "#/parameters/keywordsParam" - }, - { - "$ref": "#/parameters/orderbyParam" - }, - { - "$ref": "#/parameters/startParam" - }, - { - "$ref": "#/parameters/maxresultsParam" - }, - { - "$ref": "#/parameters/serviceClassesParam" - }, - { - "$ref": "#/parameters/intersectParam" - } - ], - "tags": [ - "Services" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Harvest an OGC service", - "description": "Harvests existing OGC service by service URL and returns the new OGC service catalog reference in the location header.", - "consumes": [ - "application/x-www-form-urlencoded" - ], - "produces": [ - "application/json", - "text/html" - ], - "parameters": [ - { - "name": "resourceUrl", - "in": "formData", - "description": "OGC service URL to harvest", - "required": true, - "type": "string" - }, - { - "name": "basicauth", - "in": "formData", - "description": "Basic authentication encoded value only. Do not prefix encoding with the word 'basic'.", - "required": true, - "type": "string" - }, - { - "name": "reharvest", - "in": "formData", - "description": "Flag to indicate whether existing service resource should be updated or not.", - "required": true, - "type": "string", - "default": "false" - } - ], - "tags": [ - "Services" - ], - "responses": { - "200": { - "description": "Success. Use GET with keywords=ServiceName to get new catalog item information." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/content/catalog/services/{ID}": { - "get": { - "summary": "Get an OGC service", - "description": "Returns an OGC service catalog item. By default, the full catalog item is returned.\n", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - }, - { - "$ref": "#/parameters/profileParamFull" - } - ], - "tags": [ - "Services" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/QueryResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete an OGC service", - "description": "Deletes a specific OGC service catalog item", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/idParam" - } - ], - "tags": [ - "Services" - ], - "responses": { - "204": { - "description": "Request accepted for processing." - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No results in the catalog.", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/services/vector": { - "post": { - "summary": "Add a legacy vector service", - "description": "Adds a new legacy vector service based on a vector provider type specified in payload.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Vector provider parameters", - "required": true, - "schema": { - "$ref": "#/definitions/vectorProviderParameters" - } - } - ], - "tags": [ - "Vector Services" - ], - "responses": { - "200": { - "description": "Success.", - "schema": { - "$ref": "#/definitions/ProviderResult" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy vector service exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "get": { - "summary": "Get all legacy vector service names", - "description": "Returns a list of unique names for the existing legacy vector services.\n", - "produces": [ - "application/json" - ], - "tags": [ - "Vector Services" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy vector services exist.", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/services/vector/{providerName}": { - "get": { - "summary": "Get a legacy vector service", - "description": "Returns an existing legacy vector service information by its unique name.\n", - "produces": [ - "application/json" - ], - "consumes": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/providerNameParam" - } - ], - "tags": [ - "Vector Services" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/ProviderResult" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy vector service exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a legacy vector service", - "description": "Deletes a specific legacy vector service catalog item by its unique name", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/providerNameParam" - }, - { - "$ref": "#/parameters/deleteLocalFilesParam" - } - ], - "tags": [ - "Vector Services" - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy vector service exists", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "patch": { - "tags": [ - "Vector Services" - ], - "summary": "Update a legacy vector service", - "description": "Updates a specific legacy vector service catalog item by its unique name", - "produces": [ - "application/json" - ], - "consumes": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/providerNameParam" - }, - { - "$ref": "#/parameters/vectorProviderHashmapPatchPayloadParam" - } - ], - "responses": { - "200": { - "description": "Created/Updated", - "schema": { - "$ref": "#/definitions/ProviderResult" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy vector service exists", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/services/context": { - "post": { - "summary": "Add a legacy context service", - "description": "Adds a new legacy context service based on a context provider type specified in payload", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Context provider parameters", - "required": true, - "schema": { - "$ref": "#/definitions/contextProviderParameters" - } - } - ], - "tags": [ - "Context Services" - ], - "responses": { - "200": { - "description": "Success.", - "schema": { - "$ref": "#/definitions/ProviderResult" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy context service exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "422": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/InvalidRequestError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "get": { - "summary": "Get all legacy context service names", - "description": "Returns a list of unique names for the existing legacy context services\n", - "produces": [ - "application/json" - ], - "tags": [ - "Context Services" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy context services exist", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/services/context/{providerName}": { - "get": { - "summary": "Get a legacy context service", - "description": "Returns an existing legacy context service information by its unique name\n", - "produces": [ - "application/json" - ], - "consumes": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/providerNameParam" - } - ], - "tags": [ - "Context Services" - ], - "responses": { - "200": { - "description": "Success", - "schema": { - "$ref": "#/definitions/ProviderResult" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy context service exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a legacy context service", - "description": "Deletes a specific legacy context service catalog item by its unique name", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/providerNameParam" - }, - { - "$ref": "#/parameters/deleteLocalFilesParam" - } - ], - "tags": [ - "Context Services" - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/UnauthorizedRequestError" - } - }, - "404": { - "description": "No legacy context service exists", - "schema": { - "$ref": "#/definitions/NoResultError" - } - }, - "500": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - } - }, - "definitions": { - "CatalogId": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Catalog item id. It may have optional catalog id: [{catalog-id}_]{item-id}." - } - } - }, - "CatalogIds": { - "type": "object", - "properties": { - "ids": { - "type": "array", - "description": "Array of catalog item ids. They may have optional catalog id: [{catalog-id}_]{item-id}.", - "items": { - "type": "string" - } - } - } - }, - "CatalogProperty": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type code defined as follows:\n- ```'1' = string ```\n- ```'2' = 32 bit integer ```\n- ```'3' = double ```\n- ```'4' = 64-bit integer ```\n- ```'5' = float ```\n- ```'6' = date (ISO-8601 format) ```" - }, - "value": { - "type": "string", - "description": "String representation of the property value" - } - }, - "example": { - "property name": "property name value", - "type": "1" - } - }, - "CatalogAttribute": { - "type": "object", - "description": "The catalog property is a name and value pair. JSON format is 'propertyName' : 'propertyValue'", - "properties": { - "AnyName": { - "type": "string", - "description": "Name value pair where AnyName is any property name followed by the value" - } - }, - "example": { - "title": "title value", - "name": "name value" - } - }, - "QueryResponse": { - "type": "object", - "properties": { - "_encodingVersion": { - "type": "string", - "format": "double" - }, - "_encodingTime": { - "type": "integer", - "description": "Time in milliseconds that it took to encode the response" - }, - "results": { - "$ref": "#/definitions/QueryResults" - }, - "context": { - "$ref": "#/definitions/QueryContext" - } - } - }, - "QueryContext": { - "properties": { - "totalAvailableResults": { - "type": "integer", - "description": "Total number of catalog items available", - "minimum": 0 - }, - "rootPath": { - "type": "string" - }, - "_class": { - "type": "string" - }, - "startIdx": { - "type": "integer" - }, - "queryTimeMillis": { - "type": "integer" - }, - "maxResults": { - "type": "integer" - }, - "queryParameters": { - "$ref": "#/definitions/QueryParameters" - } - }, - "description": "Specific context of the query that was made" - }, - "CatalogItem": { - "properties": { - "id": { - "type": "string", - "description": "Unique id for the catalog item" - }, - "parentId": { - "type": "string", - "description": "Id of the parent catalog folder" - }, - "title": { - "type": "string" - }, - "_class": { - "type": "string" - }, - "name": { - "type": "string" - }, - "defaultAttachmentName": { - "type": "string" - } - }, - "description": "Catalog item definition (might be a partial definition depending on the profile specified)" - }, - "AdvancedSearchCriteria": { - "type": "object", - "properties": { - "maxresults": { - "type": "integer", - "description": "The maximum number of catalog items to return", - "minimum": 1 - }, - "first": { - "type": "integer", - "description": "Filter the results starting at this index between 0 and the total number of catalog items.", - "minimum": 0 - }, - "orderby": { - "type": "array", - "description": "Return the catalog items ordered according to the given catalog property name. The property must be a valid property for the type of catalog item being queried. Use ```asc``` for ascending and ```desc``` for descending", - "items": { - "type": "string" - } - }, - "profile": { - "type": "string", - "description": "Profile determines the amount of detail that is returned with each catalog item", - "enum": [ - "full", - "summary", - "brief" - ], - "default": "brief" - }, - "template": { - "$ref": "#/definitions/SearchTemplate" - } - }, - "description": "Criteria used for advanced searches of the catalog", - "example": { - "maxresults": 10, - "first": 0, - "orderby": [ - "name asc" - ], - "profile": "summary", - "template": { - "class": "com.erdas.rsp.babel.model.imagery.ImageReference", - "properties": { - "MeasureType": { - "_op": "like", - "value": "OHR", - "type": "string" - }, - "NIIRS": { - "_op": "ge", - "value": "3", - "type": "integer" - } - }, - "parent": { - "identifier": "38d3eb12-db8d-44ba-8e6b-821e7ac0e058" - } - } - } - }, - "SearchTemplate": { - "type": "object", - "properties": { - "class": { - "type": "array", - "description": "Possible entity class names. Possible values include:\n- ```com.erdas.rsp.babel.model.ResourceAggregate```\n- ```com.erdas.rsp.babel.model.imagery.ImageReference```\n- ```com.erdas.rsp.babel.model.vector.VectorReference```\n- ```com.erdas.rsp.babel.model.pointcloud.PointCloudResource```\n- ```com.erdas.rsp.babel.model.GenericItem```\n- ```com.erdas.rsp.babel.model.video.VideoResource```\n", - "items": { - "type": "string", - "enum": [ - "com.erdas.rsp.babel.model.ResourceAggregate", - "com.erdas.rsp.babel.model.imagery.ImageReference", - "com.erdas.rsp.babel.model.vector.VectorReference", - "com.erdas.rsp.babel.model.pointcloud.PointCloudResource", - "com.erdas.rsp.babel.model.GenericItem", - "com.erdas.rsp.babel.model.video.VideoResource" - ] - } - }, - "properties": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/PropertyTemplate" - } - }, - "parent": { - "type": "object", - "properties": {} - } - }, - "description": "Catalog item template used for advanced search" - }, - "PropertyTemplate": { - "type": "object", - "properties": { - "_op": { - "type": "string", - "description": " - ```eq``` | Matches the catalog item if the given property's value equals ```value```.\n- ```gt``` | Matches the catalog item if the given property's value is greater than ```value```.\n- ```ge``` | Matches the catalog item if the given property's value is greater than or equal to ```value```.\n- ```lt``` | Matches the catalog item if the given property's value is less than ```value```.\n- ```le``` | Matches the catalog item if the given property's value is less than or equal to ```value``` ", - "enum": [ - "eq", - "gt", - "ge", - "lt", - "le", - "like", - "interval", - "intersect", - "intersects", - "within" - ] - }, - "value": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string", - "integer", - "long", - "double", - "float", - "date" - ] - }, - "lo": { - "type": "string", - "description": "Defines the lo value when using the interval operator" - }, - "hi": { - "type": "string", - "description": "Defines the high value when using the interval operator" - }, - "geom": { - "type": "object", - "description": "Defines the geometry used for the spatial operators intersect, contains, within", - "properties": {} - } - } - }, - "QueryResults": { - "type": "array", - "items": { - "$ref": "#/definitions/CatalogItem" - } - }, - "QueryParameters": { - "type": "object", - "description": "Query parameters used in the request" - }, - "Error": { - "type": "object", - "properties": { - "error": { - "type": "string", - "format": "string" - }, - "error_description": { - "type": "string" - } - } - }, - "NoResultError": { - "type": "object", - "properties": { - "_encodingVersion": { - "type": "string", - "format": "double" - }, - "_encodingTime": { - "type": "integer", - "description": "Time in milliseconds that it took to encode the response" - }, - "errorMessage": { - "type": "string" - } - } - }, - "UnprocessableEntityError": { - "type": "object", - "properties": { - "_encodingVersion": { - "type": "string", - "format": "double" - }, - "_encodingTime": { - "type": "integer", - "description": "Time in milliseconds that it took to encode the response" - }, - "errorMessage": { - "type": "string" - } - } - }, - "InvalidRequestError": { - "type": "object", - "required": [ - "code", - "message" - ], - "properties": { - "code": { - "type": "string", - "description": "Describes error type" - }, - "message": { - "type": "string", - "description": "General description of error" - }, - "errors": { - "$ref": "#/definitions/FieldErrorsDefinition" - } - } - }, - "UnauthorizedRequestError": { - "type": "object", - "required": [ - "code", - "message" - ], - "properties": { - "code": { - "type": "string", - "description": "Describes error type" - }, - "message": { - "type": "string", - "description": "General description of error" - } - } - }, - "ForbiddenRequestError": { - "type": "object", - "required": [ - "code", - "message" - ], - "properties": { - "code": { - "type": "string", - "description": "Describes error type" - }, - "message": { - "type": "string", - "description": "General description of error" - } - } - }, - "FieldErrorsDefinition": { - "type": "array", - "items": { - "$ref": "#/definitions/FieldErrorDefinition" - } - }, - "FieldErrorDefinition": { - "type": "object", - "required": [ - "resource", - "field", - "code", - "message" - ], - "properties": { - "resource": { - "type": "string", - "description": "Class name containing field" - }, - "field": { - "type": "string", - "description": "Name of the validated field/property" - }, - "code": { - "type": "string", - "description": "Short name for error" - }, - "message": { - "type": "string", - "description": "Describes error in more detail related to field" - } - } - }, - "ProviderResult": { - "type": "object", - "properties": { - "providerType": { - "type": "string" - }, - "wfsCapabilitiesURL": { - "type": "string" - }, - "wmsCapabilitiesURL": { - "type": "string" - }, - "serviceURL": { - "type": "string" - }, - "status": { - "type": "string" - } - } - }, - "Rights": { - "type": "object", - "properties": { - "principal": { - "type": "string", - "description": "Principal." - }, - "reader": { - "type": "boolean", - "description": "Whether the current principal has read privilege for this catalog item." - }, - "updater": { - "type": "boolean", - "description": "Whether the current principal has update privilege for this catalog item." - }, - "deleter": { - "type": "boolean", - "description": "Whether the current principal has delete privilege for this catalog item." - }, - "executer": { - "type": "boolean", - "description": "Whether the current principal has execute privilege for this catalog item." - }, - "manager": { - "type": "boolean", - "description": "Whether the current principal has management privilege for this catalog item." - } - }, - "description": "Right for a given principal." - }, - "CurrentUserRightsSummary": { - "type": "object", - "properties": { - "principal": { - "type": "string", - "description": "Current user id." - }, - "reader": { - "type": "boolean", - "description": "Whether the current user has read privilege for this catalog item." - }, - "updater": { - "type": "boolean", - "description": "Whether the current user has update privilege for this catalog item." - }, - "deleter": { - "type": "boolean", - "description": "Whether the current user has delete privilege for this catalog item." - }, - "executer": { - "type": "boolean", - "description": "Whether the current user has execute privilege for this catalog item." - }, - "manager": { - "type": "boolean", - "description": "Whether the current user has management privilege for this catalog item." - }, - "itemIsShared": { - "type": "boolean", - "description": "Whether the catalog item is shared." - } - } - }, - "BulkProperty": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the property." - }, - "type": { - "type": "string", - "description": "Type code defined as follows:\n- ```'1' = string ```\n- ```'2' = 32 bit integer ```\n- ```'3' = double ```\n- ```'4' = 64-bit integer ```\n- ```'5' = float ```\n- ```'6' = date (ISO-8601 format) ```" - }, - "value": { - "type": "string", - "description": "String representation of the property value." - }, - "newname": { - "type": "string", - "description": "The new name to be given to the property." - } - }, - "description": "Definition of a property which is to be added, modified or renamed. Provide type and value in order to add or modify the property or provide newname in order to rename the property." - }, - "LockSpecification": { - "type": "object", - "properties": { - "ids": { - "type": "array", - "description": "The ids of catalog items that are to be locked. They may have optional catalog id: [{catalog-id}_]{item-id}.", - "items": { - "$ref": "#/definitions/CatalogIds" - } - }, - "lockId": { - "type": "string", - "description": "The id of the lock set." - } - }, - "description": "Specification of items to be locked as a set." - }, - "LockSetIdentification": { - "type": "object", - "properties": { - "lockId": { - "type": "string", - "description": "The id of the lock set." - } - }, - "description": "Identification of a lock set." - }, - "UpdateSet": { - "type": "object", - "properties": { - "ids": { - "type": "array", - "description": "The ids of catalog items that are to be updated. They may have optional catalog id: [{catalog-id}_]{item-id}.", - "items": { - "$ref": "#/definitions/CatalogIds" - } - }, - "patch": { - "type": "array", - "description": "A list of properties that are to be given a new value for each given catalog item, and their new values.", - "items": { - "$ref": "#/definitions/CatalogAttribute" - } - }, - "rightsput": { - "type": "array", - "description": "A list of security principals (users and roles) and acc that are to be given access to the given catalog items or whose access rights are to be modified. If adding a new principal, missing rights will be denied. If modifying an existing principal, missing rights will not be changed.", - "items": { - "$ref": "#/definitions/Rights" - } - }, - "rightsdelete": { - "type": "array", - "description": "The names of security principals whose access rights to the given catalog items are to be revoked.", - "items": { - "type": "string", - "description": "The name of a security principal -- either a user or a role." - } - }, - "propertiesput": { - "type": "array", - "description": "A list of catalog item properties that are to be added to each given catalog item.", - "items": { - "$ref": "#/definitions/BulkProperty" - } - }, - "propertiesdelete": { - "type": "array", - "description": "The names of catalog item properties that are to be deleted from the properties collection of each given catalog item.", - "items": { - "type": "string", - "description": "The name of a catalog item property." - } - } - }, - "description": "A list of catalog items that are to be updated and the set of operations that are to be applied to all of them." - }, - "ScaleRangeDefinition": { - "type": "object", - "description": "Provides ability to specify the scales a principal can view the data, or more simply, how detailed an image the principal will be able to see", - "required": [ - "upperBound", - "lowerBound" - ], - "properties": { - "upperBound": { - "type": "number", - "format": "double", - "description": "Upper bound scale limit for a principal" - }, - "lowerBound": { - "type": "number", - "format": "double", - "description": "Upper bound scale limit for a principal" - } - } - }, - "SpatialRangeDefinition": { - "description": "Providers ability to restrict the access of the principal to the data based on specified areas", - "type": "object", - "required": [ - "srs", - "areaAsString", - "inclusive" - ], - "properties": { - "srs": { - "type": "string", - "description": "Spatial reference system of the specific area defined", - "default": "EPSG:4326" - }, - "areaAsString": { - "description": "Specific area defined that applies to principal's access. Enter the points in the following format: X1,Y1 X2,Y2 X3,Y3 ... Xn,Yn", - "type": "string" - }, - "inclusive": { - "type": "boolean", - "description": "If true, a principal can access only the specific area. If false, principal can access everything except the specific area", - "default": true - } - } - }, - "PermissionsDefinition": { - "description": "Provides ability to specify what the selected principal will be allowed to do with the data discovered during the crawl", - "type": "object", - "required": [ - "read", - "update", - "delete", - "manage", - "execute" - ], - "properties": { - "read": { - "description": "Ability to view the data in Apollo catalog", - "type": "boolean", - "default": false - }, - "update": { - "description": "Ability to alter the data in Apollo catalog", - "type": "boolean", - "default": false - }, - "delete": { - "description": " Ability to remove the entry of the data from the Apollo catalog", - "type": "boolean", - "default": false - }, - "manage": { - "description": "Ability to define security settings for other principals", - "type": "boolean", - "default": false - }, - "execute": { - "description": "Ability to execute operations on the Apollo catalog", - "type": "boolean", - "default": false - } - } - }, - "AggregateParams": { - "type": "object", - "required": [ - "parent", - "name" - ], - "properties": { - "parent": { - "$ref": "#/definitions/CatalogId" - }, - "name": { - "type": "string" - }, - "defaultSRS": { - "type": "string", - "default": "EPSG:4326" - } - }, - "example": { - "parent": { - "id": "01079cf45ba6e71b015ba6e7695a0000" - }, - "name": "TestAggregate", - "defaultSRS": "EPSG:4326" - } - }, - "AttachmentParams": { - "type": "object", - "required": [ - "name", - "path", - "mimeType" - ], - "properties": { - "name": { - "type": "string", - "description": "Name assigned to attachment" - }, - "path": { - "type": "string", - "description": "A URI reference to point to attachment. Examples: file:///c:/TEMP/file.xml, http://example.org/resource.txt" - }, - "mimeType": { - "type": "string", - "description": "A MIME type is a label used to identify a type of data. Example: 'text/html'" - } - } - }, - "BaseCatalogItemParams": { - "type": "object", - "properties": { - "parent": { - "$ref": "#/definitions/CatalogId" - }, - "name": { - "type": "string" - }, - "title": { - "type": "string" - }, - "fileURI": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "contextProviderParameters": { - "type": "object", - "required": [ - "mapProviderType", - "name", - "registerServiceInCatalog", - "fileLocation" - ], - "properties": { - "mapProviderType": { - "type": "string", - "enum": [ - "Context" - ], - "default": "Context", - "description": "Descriminator for service type" - }, - "name": { - "type": "string", - "default": "TestService1", - "description": "Unique name for the service provider" - }, - "title": { - "type": "string", - "description": "Optional. A descriptive title for the service provider" - }, - "abstract": { - "type": "string", - "description": "Optional. A brief description of the service provider" - }, - "keywords": { - "type": "string", - "description": "Optional. A comma-separated list of words that help to describe the service provider. These words can be used to help the system return this service provider in response to relevant searches." - }, - "registerServiceInCatalog": { - "type": "boolean", - "default": true, - "description": "Registers the service provider in Apollo catalog so that it appears in searches of the catalog" - }, - "fileLocation": { - "type": "string", - "description": "This field represents a specific file or a directory as the data source" - }, - "uploadFilesToServer": { - "type": "boolean", - "description": "If this field is True,the files in the fileLocation property will be copied to the server; if False, files will be referenced from their current location", - "default": false - } - } - }, - "vectorProviderParameters": { - "type": "object", - "required": [ - "vectorProviderType", - "name", - "wfsServiceVersion" - ], - "properties": { - "vectorProviderType": { - "type": "string", - "enum": [ - "Shape", - "Oracle", - "SqlServer", - "Postgres", - "GML" - ], - "default": "Shape", - "description": "Descriminator for service type" - }, - "name": { - "type": "string", - "default": "WFSService1", - "description": "Unique name for the service provider" - }, - "title": { - "type": "string", - "description": "Optional. A descriptive title for the service provider" - }, - "abstract": { - "type": "string", - "description": "Optional. A brief description of the service provider" - }, - "keywords": { - "type": "string", - "description": "Optional. A comma-separated list of words that help to describe the service provider. These words can be used to help the system return this service provider in response to relevant searches" - }, - "indexData": { - "type": "boolean", - "default": true, - "description": "Creates RTree files beside the shapefiles for optimized access" - }, - "generateTypesAndMappings": { - "type": "boolean", - "default": true, - "description": "Generate the types and mappings files needed to map vector data into features in a WFS" - }, - "registerServiceInCatalog": { - "type": "boolean", - "default": true, - "description": "Optional. Registers the service provider in Apollo catalog so that it appears in searches of the catalog" - }, - "databaseTablePattern": { - "type": "string", - "default": "%", - "description": "Used to filter the layers that will be added to the web service. % is the default and implies you will be adding all available datasets or layers into the service" - }, - "databaseSchema": { - "type": "string", - "description": "Provides ability to choose which database schema to use, if your input data source is a database" - }, - "wfsServiceVersion": { - "type": "string", - "description": "Supported WFS/GML versions", - "enum": [ - "wfs1.1 - gml3.1.1", - "wfs1.2 - gml3.2" - ], - "default": "wfs1.1 - gml3.1.1" - }, - "autoDetectGeometryTypes": { - "type": "boolean", - "description": "Enables scan of the source data to determine the geometry type(s) used" - }, - "fileLocation": { - "type": "string", - "description": "This field represents a specific file or a directory as the data source. This field is not required if using database as the data source." - }, - "uploadFilesToServer": { - "type": "boolean", - "description": "If this field is True,the files in the fileLocation property will be copied to the server; if False, files will be referenced from their current location.", - "default": false - }, - "spatialReferenceSystem": { - "type": "string", - "description": "Shape file spatial reference system. Example: 'EPSG:4326'" - }, - "databaseHost": { - "type": "string", - "description": "Host machine of database source. Not required if using fileLocation" - }, - "databasePort": { - "type": "integer", - "description": "Port number of host machine of database source. Not required if using fileLocation" - }, - "databaseUser": { - "type": "string", - "description": "User name to login into database source. Not required if using fileLocation" - }, - "databasePassword": { - "type": "string", - "description": "Password to login into database source. Not required if using fileLocation" - }, - "databaseName": { - "type": "string", - "description": "Name to login into database source. Not required if using fileLocation" - }, - "databaseSid": { - "type": "string", - "description": "(Oracle only) SID for database source. Not required if using fileLocation" - }, - "databaseServiceName": { - "type": "string", - "description": "ServiceName for database source. Not required if using fileLocation" - }, - "databaseInstance": { - "type": "string", - "description": "(SQL Server only)Instance name for database source. Not required if using fileLocation" - }, - "enableWFS": { - "type": "boolean", - "description": "Enable/disable the WFS interface. The default value is true to enable.", - "default": true - }, - "enableWMS": { - "type": "boolean", - "description": "Enable/disable the WMS interface. The default value is true to enable.", - "default": true - } - } - }, - "ClipZipShipParametersDefinition": { - "type": "object", - "required": [ - "global", - "requests", - "emailAddress" - ], - "properties": { - "global": { - "$ref": "#/definitions/czsGlobalDefinition" - }, - "requests": { - "type": "array", - "items": { - "$ref": "#/definitions/czsRequestDefinition" - } - }, - "emailAddress": { - "type": "string", - "description": "Email notifications of the provisioning job will be sent" - }, - "deleteJobIfComplete": { - "type": "boolean", - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId", - "default": false - }, - "ignoreWarnings": { - "type": "boolean", - "description": "Provides ability to ignore validation warnings. An exception will be ignored if validation fails and value is true", - "default": false - } - }, - "example": { - "global": { - "clipMethod": "entire", - "extent": {}, - "outputSrs": "original" - }, - "requests": [ - { - "catalogItemName": "19155555", - "requestType": "RASTER", - "clipMethod": "custom", - "outputSrs": "EPSG:4326", - "extent": { - "srs": "EPSG:4326", - "epsgId": 4326, - "type": "multipolygon", - "cardinality": 2, - "data": [ - [ - -84.377, - 34.233, - -84.377, - 34.225, - -84.37, - 34.225, - -84.37, - 34.233, - -84.377, - 34.233 - ] - ] - }, - "las": {}, - "raster": { - "outputFormat": "IMG", - "interpolation": "nearest neighbor", - "channelAxis": "Band", - "channels": [ - "band1", - "band2", - "band3" - ], - "measurementType": "resolution", - "measurementXValue": 0.5, - "measurementYValue": 0.5 - } - } - ], - "emailAddress": "your.email@yourCompany.com", - "deleteJobIfComplete": false, - "ignoreWarnings": true - } - }, - "CrawlJobParametersDefinition": { - "type": "object", - "required": [ - "crawlType", - "crawlProperties" - ], - "properties": { - "crawlType": { - "$ref": "#/definitions/BaseCrawlTypeDefinition" - }, - "crawlProperties": { - "$ref": "#/definitions/CrawlPropertiesDefinition" - } - }, - "example": { - "crawlType": { - "files": { - "replicateDirectory": true, - "directory": "//machineName/testdata", - "fileExtensions": [ - ".*" - ] - } - }, - "crawlProperties": { - "parentId": "01079cf45b1538e7015b15392e4b0000", - "footprintAsExtent": true, - "scheduleSettings": { - "immediate": true - }, - "generatePyramids": "none", - "generateThumbnails": "none", - "viewServices": { - "aggregate": { - "wmtsEnabled": false - }, - "dataset": { - "wmsEnabled": true, - "wmtsEnabled": false, - "geoservicesEnabled": false, - "ecwpEnabled": true, - "jpipEnabled": false - } - }, - "downloadServices": { - "aggregate": { - "czsEnabled": true - }, - "dataset": { - "czsEnabled": false, - "wcsEnabled": false - } - }, - "metadataParsers": { - "parsers": [ - "Landsat7", - "RADARSAT-2" - ], - "executionStrategy": "firstSuccess" - }, - "securitySettings": [ - { - "principalName": "esp_administrator", - "permissions": { - "read": true, - "update": true, - "delete": true, - "manage": true, - "execute": true - } - }, - { - "principalName": "esp_data_manager", - "permissions": { - "read": true, - "update": true, - "delete": true, - "manage": true, - "execute": true - }, - "scaleRange": { - "lowerBound": 50000, - "upperBound": 100000 - }, - "spatialRange": { - "srs": "EPSG:4326", - "areaAsString": "-89.41302727101002,31.142166886974813 -89.41048659895588,31.142166886974813 -89.41048659895588,31.139981598536828 -89.41302727101002,31.139981598536828", - "inclusive": true - } - } - ] - } - } - }, - "DropBoxParametersDefinition": { - "type": "object", - "description": "A representation of a drop box input parameters for monitoring incoming datasets", - "required": [ - "sourceDirectory", - "targetDirectory", - "fileExtensions", - "parentId", - "footprintAsExtent", - "scheduleSettings", - "viewServices", - "downloadServices", - "generatePyramids", - "generateThumbnails", - "securitySettings" - ], - "properties": { - "sourceDirectory": { - "type": "string", - "description": "The full path of the drop box source/input directory" - }, - "targetDirectory": { - "type": "string", - "description": "The full path of the drop box target/output. NOTE: The target directory set for the drop box cannot be reparented." - }, - "fileExtensions": { - "type": "array", - "description": "File extension(s) to monitor", - "items": { - "$ref": "#/definitions/FileExtensionDefinition" - } - }, - "parentId": { - "type": "string", - "description": "Aggregate catalog id to be the parent of the crawled datasets" - }, - "footprintAsExtent": { - "description": "If true, footprints will be generated identical to the spatial extent of the aggregate or dataset if true; however, if false, the footprints will only contain the valid data found within the aggregate or dataset", - "type": "boolean", - "default": true - }, - "scheduleSettings": { - "$ref": "#/definitions/ScheduleSettings" - }, - "viewServices": { - "$ref": "#/definitions/ViewServiceSettings" - }, - "downloadServices": { - "$ref": "#/definitions/DownloadServices" - }, - "generatePyramids": { - "type": "string", - "description": "Enables generation of pyramids for aggregates, datasets, both or none", - "enum": [ - "none", - "both", - "aggregates", - "datasets" - ] - }, - "generateThumbnails": { - "type": "string", - "description": "Enables generation of thumbnails for aggregates, datasets, both or none", - "enum": [ - "none", - "both", - "aggregates", - "datasets" - ] - }, - "metadataParsers": { - "$ref": "#/definitions/MetadataParserSettings" - }, - "securitySettings": { - "type": "array", - "items": { - "$ref": "#/definitions/SecuritySettingsDefinition" - } - } - }, - "example": { - "sourceDirectory": "//machineName/dropboxSource", - "targetDirectory": "//machineName/dropboxTarget", - "fileExtensions": [ - ".*" - ], - "parentId": "01079cf45b1538e7015b15392e4b0000", - "footprintAsExtent": true, - "scheduleSettings": { - "immediate": true - }, - "generatePyramids": "none", - "generateThumbnails": "none", - "viewServices": { - "aggregate": { - "wmsEnabled": true, - "wmtsEnabled": false - }, - "dataset": { - "wmsEnabled": true, - "wmtsEnabled": false, - "geoservicesEnabled": false, - "ecwpEnabled": true, - "jpipEnabled": false - } - }, - "downloadServices": { - "aggregate": { - "czsEnabled": true, - "wcsEnabled": true - }, - "dataset": { - "czsEnabled": false, - "wcsEnabled": false - } - }, - "metadataParsers": { - "metadataParsers": [ - "Landsat7", - "RADARSAT-2" - ], - "executionStrategy": "firstSuccess" - }, - "securitySettings": [ - { - "principalName": "esp_administrator", - "permissions": { - "read": true, - "update": true, - "delete": true, - "manage": true, - "execute": true - } - }, - { - "principalName": "esp_data_manager", - "permissions": { - "read": true, - "update": true, - "delete": true, - "manage": true, - "execute": true - }, - "scaleRange": { - "lowerBound": 50000, - "upperBound": 100000 - }, - "spatialRange": { - "srs": "EPSG:4326", - "areaAsString": "-89.41302727101002,31.142166886974813 -89.41048659895588,31.142166886974813 -89.41048659895588,31.139981598536828 -89.41302727101002,31.139981598536828", - "inclusive": true - } - } - ] - } - }, - "BaseCrawlTypeDefinition": { - "type": "object", - "properties": { - "files": { - "$ref": "#/definitions/FilesCrawl" - }, - "database": { - "$ref": "#/definitions/DatabaseCrawl" - } - } - }, - "FilesCrawl": { - "description": "A representation of a files crawl input parameters", - "required": [ - "replicateDirectory", - "directory", - "files", - "fileExtensions" - ], - "properties": { - "replicateDirectory": { - "type": "boolean", - "default": false, - "description": "If true, any subdirectory found under the 'directory' to crawl will be created as an aggregate and will be the parent aggregate for any datasets it contains" - }, - "directory": { - "type": "string", - "description": "The directory to search. Leave as empty string if using 'files' option" - }, - "files": { - "type": "array", - "description": "A list of specific files to crawl into the 'parentId' aggregate. Leave as empty [] if using 'directory' option", - "items": { - "type": "string" - } - }, - "fileExtensions": { - "type": "array", - "description": "An example of supported file extensions for decoding but not all are included. Leave empty [] if you want to include all supported extensions", - "items": { - "$ref": "#/definitions/FileExtensionDefinition" - } - } - } - }, - "FileExtensionDefinition": { - "description": "An example of file extension types;however,not a complete list", - "type": "string", - "enum": [ - ".*", - "shp", - "ecw", - "img", - "jp2", - "tif", - "las" - ] - }, - "DatabaseCrawl": { - "description": "A representation of a database crawl input parameters", - "type": "object", - "required": [ - "connectionName", - "databaseType", - "server", - "port", - "username", - "password" - ], - "properties": { - "server": { - "type": "string", - "description": "Name of the server that hosts the database" - }, - "port": { - "type": "integer", - "format": "int32", - "description": "TCP port used for the connection" - }, - "username": { - "type": "string", - "description": "Name of the database user for the connection" - }, - "password": { - "type": "string", - "description": "Password for the database user" - }, - "queryTimeout": { - "type": "integer", - "format": "int32", - "description": "The number of seconds to wait before canceling long-running queries. The default value is 0, which means no timeout is imposed" - }, - "additionalInfo": { - "type": "string", - "description": "Additional connection parameters that will be appended to the generated connection string. The value must be formatted correctly according to the requirements of the target database system’s connection string. This parameter is optional and may be left blank" - }, - "connectionName": { - "type": "string", - "description": "The name to give to this connection when it is saved in the catalog. The connection name must be unique. A new Aggregate having the same name as the connection will be created to contain the datasets from the crawl." - }, - "databaseType": { - "type": "string", - "description": "The type of database", - "enum": [ - "oracle", - "mssql", - "postgres" - ] - }, - "databaseName": { - "type": "string", - "description": "(PostGIS and SQL Server only) – The name of the database to which to connect" - }, - "databaseInstance": { - "type": "string", - "description": " (SQL Server only) – The name of the database instance" - }, - "srs": { - "type": "string", - "description": "The SRS to use for the data in the database if the data does not specify one explicitly" - }, - "sid": { - "type": "string", - "description": "(Oracle only) – System ID of the Oracle database instance. Leave blank if using a Service Name" - }, - "serviceName": { - "type": "string", - "description": "(Oracle only) – The service name of the Oracle database. Leave blank if using a SID" - }, - "tableOrViewPattern": { - "type": "string", - "description": "The table name pattern will be used to filter the names of tables and views to crawl" - } - } - }, - "CrawlPropertiesDefinition": { - "description": "A representation of crawl properties", - "type": "object", - "required": [ - "parentId", - "footprintAsExtent", - "scheduleSettings", - "viewServices", - "downloadServices", - "generatePyramids", - "generateThumbnails", - "securitySettings" - ], - "properties": { - "parentId": { - "type": "string", - "description": "Aggregate catalog id to be the parent of the crawled datasets" - }, - "footprintAsExtent": { - "description": "If true, footprints will be generated identical to the spatial extent of the aggregate or dataset if true; however, if false, the footprints will only contain the valid data found within the aggregate or dataset", - "type": "boolean", - "default": true - }, - "scheduleSettings": { - "$ref": "#/definitions/ScheduleSettings" - }, - "viewServices": { - "$ref": "#/definitions/ViewServiceSettings" - }, - "downloadServices": { - "$ref": "#/definitions/DownloadServices" - }, - "generatePyramids": { - "type": "string", - "description": "Enables generation of pyramids for aggregates, datasets, both or none", - "enum": [ - "none", - "both", - "aggregates", - "datasets" - ] - }, - "generateThumbnails": { - "type": "string", - "description": "Enables generation of thumbnails for aggregates, datasets, both or none", - "enum": [ - "none", - "both", - "aggregates", - "datasets" - ] - }, - "metadataParsers": { - "$ref": "#/definitions/MetadataParserSettings" - }, - "securitySettings": { - "type": "array", - "items": { - "$ref": "#/definitions/SecuritySettingsDefinition" - } - } - } - }, - "DeleteJobParameters": { - "type": "object", - "description": "A representation of input parameters to remove catalog items and any associated items from the Apollo catalog", - "required": [ - "ids" - ], - "properties": { - "ids": { - "type": "array", - "description": "List of comma delimited catalog ids to remove from the Apollo catalog", - "items": { - "type": "string" - } - }, - "deleteJobIfComplete": { - "type": "boolean", - "default": false, - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId" - } - } - }, - "MetadataUpdateJobParameters": { - "type": "object", - "description": "A representation of input parameters that updates ISO metadata for a list of catalog items", - "required": [ - "ids", - "forAggregates", - "forDatasets" - ], - "properties": { - "ids": { - "type": "array", - "description": "List of comma delimited catalog item ids", - "items": { - "type": "string" - } - }, - "forAggregates": { - "type": "boolean", - "description": "Update ISO metadata for catalog aggregates" - }, - "forDatasets": { - "type": "boolean", - "description": "Update ISO metadata for catalog items" - }, - "deleteJobIfComplete": { - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId.", - "type": "boolean", - "default": false - } - } - }, - "MoveJobParameters": { - "type": "object", - "description": "A representation of input parameters to move catalog items to a new parent folder", - "required": [ - "ids", - "newParentFolderId", - "restoreFolders" - ], - "properties": { - "ids": { - "type": "array", - "description": "List of comma delimited catalog item ids", - "items": { - "type": "string" - } - }, - "newParentFolderId": { - "type": "string", - "description": "Target parent id for the moved catalog items" - }, - "restoreFolders": { - "$ref": "#/definitions/restoreFolderProperties" - }, - "deleteJobIfComplete": { - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId.", - "type": "boolean", - "default": false - } - } - }, - "restoreFolderProperties": { - "type": "object", - "required": [ - "applyToChildren", - "restorePyramids", - "restoreThumbnails", - "restoreISOFiles", - "restoreFootprints" - ], - "description": "Optional property. Restores modified folders based on the specified properties", - "properties": { - "applyToChildren": { - "type": "boolean", - "description": "Starting with first folder below root, if true, extents are restored and footprint generated for all children of the folder. If false, only the immediate parent will have extents restored and footprint generated.", - "default": false - }, - "restorePyramids": { - "type": "boolean", - "description": "If true, the generate pyramids task will be executed for the modified folders", - "default": false - }, - "restoreThumbnails": { - "type": "boolean", - "description": "If true, the generate thumbnails task will be executed for the modified folders", - "default": false - }, - "restoreISOFiles": { - "type": "boolean", - "description": "If true, generate ISO metadata task will be executed for the modified folders", - "default": false - }, - "restoreFootprints": { - "enum": [ - "extent", - "activeArea" - ], - "description": "The generate footprint task will be executed for the modified folders using either extent or activeArea.The default is extent", - "default": "extent" - } - } - }, - "JobBrief": { - "type": "object", - "description": "Properties to describe the job", - "properties": { - "jobId": { - "type": "string", - "description": "Unique identifier for a job" - }, - "displayableStatus": { - "type": "string", - "description": "Verbose description for a job" - }, - "progress": { - "type": "string", - "description": "Percentage of completion for a job" - }, - "state": { - "type": "string", - "description": "Internal state of job given in pre-defined type strings", - "enum": [ - "WAITING", - "PAUSED", - "ERROR", - "BLOCKED", - "COMPLETE", - "RUNNING", - "CANCELING" - ] - }, - "startTime": { - "type": "string", - "description": "The start time of a job" - }, - "endTime": { - "type": "string", - "description": "The end time of a job" - } - } - }, - "MetadataParserSettings": { - "type": "object", - "required": [ - "parsers", - "executionStrategy" - ], - "description": "Specify any metadata parsers to detect the metadata when APOLLO registers the data in the catalog", - "properties": { - "parsers": { - "type": "array", - "items": { - "$ref": "#/definitions/MetadataParserTypeDefinitions" - } - }, - "executionStrategy": { - "description": "If strategy is 'firstSucess, do not attempt to run any more metadata parsers once one of the metadata parser runs successfully.", - "type": "string", - "default": "firstSuccess", - "enum": [ - "firstSuccess", - "executeAll" - ] - } - } - }, - "MetadataParserTypeDefinitions": { - "type": "string", - "enum": [ - "DIMAP", - "Russian Satellite", - "QuickBird", - "Landsat5 (Fast Format rev. B)", - "Landsat7", - "EROS", - "IRS 1C-1D(Fast Format)", - "DAT", - "SPOT", - "HDF", - "HDF (ISO 19139)", - "IKONOS", - "RADARSAT-2", - "DiMAP-v2", - "ISO 19139" - ] - }, - "SecuritySettingsDefinition": { - "type": "object", - "description": "Provides ability to add or remove principals, define allowed operations per principal, and specify allowed spatial range view per principal", - "required": [ - "principalName", - "permissions" - ], - "properties": { - "principalName": { - "description": "A user or role name to assign permissions", - "type": "string" - }, - "permissions": { - "$ref": "#/definitions/PermissionsDefinition" - }, - "scaleRange": { - "$ref": "#/definitions/ScaleRangeDefinition" - }, - "spatialRange": { - "$ref": "#/definitions/SpatialRangeDefinition" - } - } - }, - "PyramidAddExistingParameters": { - "description": "Provides the ability to attach pyramid layer files to an aggregate in the Apollo catalog", - "type": "object", - "properties": { - "aggregateId": { - "type": "string", - "description": "Parent catalog item id that contains the image to add pyramids" - }, - "filePath": { - "type": "string", - "description": "The path of the pyramid layer file to add" - }, - "decimationFactor": { - "type": "number", - "format": "double", - "description": "The number of pixels in a layer that will be represented by one pixel in the next pyramid layer. The most common decimation factor is two, which means that a 2x2 square of pixels will be represented in the next layer" - }, - "deleteJobIfComplete": { - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId.", - "type": "boolean", - "default": false - } - } - }, - "PyramidDeleteExistingParameters": { - "description": "Provides the ability to delete pyramid layers for data after it has been registered in the catalog", - "type": "object", - "properties": { - "catalogItemId": { - "type": "string", - "description": "The parent catalog item containing the pyramid to delete" - }, - "deleteLocalFile": { - "type": "boolean", - "default": false, - "description": "If true, deletes the pyramid file as well as disassociates it from the aggregate. If false,keeps the pyramid file even though it is no longer associated with the aggregate" - }, - "deleteJobIfComplete": { - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId.", - "type": "boolean", - "default": false - } - } - }, - "PyramidJobParameters": { - "type": "object", - "description": "Properties to create pyramid layers for data after it has been registered in the catalog", - "required": [ - "ids" - ], - "properties": { - "applyToChildAggregates": { - "type": "boolean", - "default": true, - "description": "Generate pyramids for the specified aggregate, all of the datasets directly inside of it, and all of the child datasets and aggregates that are nested inside of it" - }, - "applyToChildDatasets": { - "type": "boolean", - "default": true, - "description": "Generate pyramids for datasets directly inside the aggregate" - }, - "ids": { - "description": "List of comma delimited catalog item ids", - "type": "array", - "items": { - "type": "string" - } - }, - "deleteJobIfComplete": { - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId.", - "type": "boolean", - "default": false - } - } - }, - "RecurringJob": { - "description": "Crawl will run automatically at a specific interval and time", - "type": "object", - "required": [ - "startDateTime", - "occurrence" - ], - "properties": { - "startDateTime": { - "description": "A string with ISO8601 datetime format", - "type": "string", - "format": "date-time" - }, - "occurrence": { - "description": "Types of schedule settings", - "type": "string", - "enum": [ - "ONCE", - "HOURLY", - "DAILY", - "WEEKLY", - "MONTHLY" - ], - "default": "ONCE" - } - } - }, - "ScheduleSettings": { - "description": "Schedule the crawl job", - "type": "object", - "properties": { - "recurringJob": { - "$ref": "#/definitions/RecurringJob" - }, - "immediate": { - "description": "Crawl job will begin immediately", - "type": "boolean", - "default": false - }, - "deleteJobIfComplete": { - "description": "Provides ability to keep a job even it is completed successfully. Review job at jobs endpoint using jobId.", - "type": "boolean", - "default": false - } - } - }, - "ThumbnailJobParameters": { - "type": "object", - "description": "A representation of generate thumbnails input parameters", - "required": [ - "ids" - ], - "properties": { - "replaceExisting": { - "type": "boolean", - "default": false, - "description": "If true, update the thumbnail when a search produces new data" - }, - "applyToChildren": { - "type": "boolean", - "default": false, - "description": "If true, generate thumbnail for selected aggregate and its children" - }, - "ids": { - "type": "array", - "description": "List of comma delimited catalog item ids", - "items": { - "type": "string" - } - } - } - }, - "DownloadServices": { - "description": "Provides ability to enable/disable all download services (CZS and WCS) for aggregates or datasets", - "type": "object", - "properties": { - "aggregate": { - "$ref": "#/definitions/downloadServicesAggregateDefinition" - }, - "dataset": { - "$ref": "#/definitions/downloadServicesDatasetDefinition" - } - } - }, - "downloadServicesAggregateDefinition": { - "type": "object", - "properties": { - "czsEnabled": { - "description": "Makes the data discovered during the crawl available to the Clip-Zip-Ship service", - "type": "boolean", - "default": true - } - } - }, - "downloadServicesDatasetDefinition": { - "type": "object", - "properties": { - "czsEnabled": { - "description": "Makes the data discovered during the crawl available to the Clip-Zip-Ship service", - "type": "boolean", - "default": true - }, - "wcsEnabled": { - "description": "Makes the data discovered during the crawl available to a Web Coverage Service (WCS)", - "type": "boolean", - "default": true - } - } - }, - "ViewServiceSettings": { - "description": "Provides ability to enable/disable all viewing services (WMS, WMTS, GeoServices, ECWP and JPIP) for aggregates or datasets", - "type": "object", - "properties": { - "aggregate": { - "$ref": "#/definitions/viewServicesAggregateDefinition" - }, - "dataset": { - "$ref": "#/definitions/viewServicesDatasetDefinition" - } - } - }, - "viewServicesAggregateDefinition": { - "type": "object", - "properties": { - "wmtsEnabled": { - "description": "Makes the data discovered during the crawl available to a Web Map Tile Service (WMTS)", - "type": "boolean", - "default": true - } - } - }, - "viewServicesDatasetDefinition": { - "type": "object", - "properties": { - "wmsEnabled": { - "description": "Makes the data discovered during the crawl available to a Web Map Service (WMS)", - "type": "boolean", - "default": true - }, - "wmtsEnabled": { - "description": "Makes the data discovered during the crawl available to a Web Map Tile Service (WMTS)", - "type": "boolean", - "default": false - }, - "geoservicesEnabled": { - "description": "Makes data discovered during the crawl available to GeoServices", - "type": "boolean", - "default": false - }, - "ecwpEnabled": { - "description": "Makes the data discovered during the crawl available to an ECWP service", - "type": "boolean", - "default": true - }, - "jpipEnabled": { - "description": "Makes the data discovered during the crawl available to a JPIP service", - "type": "boolean", - "default": false - } - } - }, - "vectorProviderHashmapDefinition": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Optional. A service Title (or label) in the section of the capabilities document" - }, - "abstract": { - "type": "string", - "description": "Optional. Defines the service abstract (or description) in the generated service metadata (capabilities) document" - }, - "keywords": { - "type": "string", - "description": "Optional. A comma-separated list of keywords that will appear in the service metadata (capabilities) document" - }, - "indexData": { - "type": "boolean", - "default": true, - "description": "Creates RTree files beside the shapefiles for optimized access" - }, - "registerServiceInCatalog": { - "type": "boolean", - "default": true, - "description": "Optional. Registers the service provider in Apollo catalog so that it appears in searches of the catalog" - }, - "enableWFS": { - "type": "boolean", - "description": "Enable/disable the WFS interface. The default value is true to enable", - "default": true - }, - "enableWMS": { - "type": "boolean", - "description": "Enable/disable the WMS interface. The default value is true to enable", - "default": true - }, - "copyright": { - "type": "string", - "description": "Optional. Defines text to appear in the upper left corner of each image generated by a GetMap request, and in the GML document produced by a GetFeature request" - }, - "contactInfo": { - "$ref": "#/definitions/contactInfoDefinition" - }, - "metadataURL": { - "type": "string", - "description": "Optional. The URL template to metadata files that will appear in MetadataURL tags in the capabilities document. If not set, no MetadataURL will appear" - }, - "allowStandardSRS": { - "type": "string", - "default": "true", - "description": "Enables standard SRSes (currently EPGS:4326) to be included in the capabilities document. The default value is true" - }, - "publishedSRS": { - "type": "string", - "description": "The list of srs to appear in the service metadata (capabilities) in addition to the srs parameter value" - }, - "srsStrictBehavior": { - "type": "string", - "default": "false", - "description": "Allows only requests made in a SRS published in the capabilities even if it is able to do more. The default value is false" - }, - "legendURL": { - "type": "string", - "description": "Optional. The URL template to legend icons that will appear in LegendURL tags in the WMS service metadata (capabilities) document. A blank value uses the value of the tag in the section" - }, - "quality": { - "type": "string", - "description": "Sets the quality of the PNG or JPEG image output by a WMS GetMap request" - }, - "serviceMetadataURL": { - "type": "string", - "description": "(Mandatory) Starting with OGC Web Services specifications versions WMS 1.3, WFS 1.1, WCS 1.1 and WTS 1.0 based on the OWS Common one, we use a single template for the ServiceIdentification and ServiceProvider sections of the service metadata (capabilities). This template is a flat file referenced by this parameter" - }, - "serviceMetadata": { - "$ref": "#/definitions/serviceMetadataDefinition" - }, - "otherMetadataURL": { - "type": "string", - "description": "An URL (relative or not) to a file containing the ows extended capabilities of the operations metadata. The XML root should be ExtendedCapabilities elements and be a correct XML file" - } - } - }, - "contactInfoDefinition": { - "type": "object", - "description": "Holds a set of elements, which describe the contact information that will appear in the tag of the capabilities in the ContactInformation or ResponsibleParty sub-section", - "properties": { - "AddressBody": { - "type": "string", - "description": "Organization address" - }, - "AddressType": { - "type": "string", - "description": "Organization address type" - }, - "City": { - "type": "string", - "description": "City part of the organization address" - }, - "State": { - "type": "string", - "description": "Administrative state part of the oranization address" - }, - "Country": { - "type": "string", - "description": "Country part of the organization address" - }, - "PostCode": { - "type": "string", - "description": "PostCode of the city part of the organization address" - }, - "Email": { - "type": "string", - "description": "Electronic address" - }, - "Fax": { - "type": "string", - "description": "Fax number" - }, - "Organization": { - "type": "string", - "description": "Organization name" - }, - "Person": { - "type": "string", - "description": "Name of person" - }, - "Position": { - "type": "string", - "description": "Position inside the organization" - }, - "OnlineResource": { - "type": "string", - "description": "The internet address of the organization web site" - }, - "Voice": { - "type": "string", - "description": "Telephone number" - } - } - }, - "serviceMetadataDefinition": { - "type": "object", - "description": "Holds a set of elements, which correspond to the content of the ServiceIdentification and ServiceProvider sections of the service metadata (capabilities document)", - "properties": { - "Abstract": { - "type": "string", - "description": "Service abstract" - }, - "AdministrativeArea": { - "type": "string", - "description": "Administrative state part of the organization address" - }, - "City": { - "type": "string", - "description": "City part of the organization address" - }, - "Code": { - "type": "string", - "description": "Service code (Leave blank in most cases)" - }, - "CodeSpace": { - "type": "string", - "description": "Service code space" - }, - "Constraints": { - "type": "string", - "description": "Service access constraints" - }, - "ContactHours": { - "type": "string", - "description": "The hours of service of the contact point" - }, - "ContactInstructions": { - "type": "string", - "description": "The instructions on how to reach contact point" - }, - "ContactURL": { - "type": "string", - "description": "The URL of the contact point" - }, - "Country": { - "type": "string", - "description": "Country part of the organization address" - }, - "Emails": { - "type": "string", - "description": "Electronic mail addresses" - }, - "Faxes": { - "type": "string", - "description": "Fax numbers" - }, - "Fees": { - "type": "string", - "description": "Service fees" - }, - "Keyword1": { - "type": "string", - "description": "A list of keywords" - }, - "KeywordCode1": { - "type": "string", - "description": "Keywords code" - }, - "KeywordCodeSpace1": { - "type": "string", - "description": "Keywords code space" - }, - "Organization": { - "type": "string", - "description": "Organization name" - }, - "PostCode": { - "type": "string", - "description": "PostCode of the city part of the organization address" - }, - "ResponsibleName": { - "type": "string", - "description": "Name of the responsible person" - }, - "ResponsiblePosition": { - "type": "string", - "description": "Position of the responsible person" - }, - "ResponsibleRole": { - "type": "string", - "description": "Role of the responsible person" - }, - "ResponsibleRoleSpace": { - "type": "string", - "description": "Code space of the role of the responsible person" - }, - "Site": { - "type": "string", - "description": "Internet address of the organization web site" - }, - "Title": { - "type": "string", - "description": "Service title" - }, - "Version": { - "type": "string", - "description": "Supported versions (Leave blank in most cases)" - }, - "Voices": { - "type": "string", - "description": "Telephone numbers" - } - } - }, - "czsGlobalDefinition": { - "type": "object", - "description": "Global settings applied to all requests unless overridden by custom settings", - "required": [ - "clipMethod", - "outputSrs" - ], - "properties": { - "clipMethod": { - "type": "string", - "description": "Global clipping method for the provisioning job", - "enum": [ - "entire", - "custom" - ], - "default": "entire" - }, - "extent": { - "type": "object", - "description": "Global clipping extent for the provisioning job" - }, - "outputSrs": { - "type": "string", - "description": "Global Spatial Reference System for the output of the provisioning job", - "enum": [ - "original", - "EPSG:3857", - "EPSG:4326" - ], - "default": "original" - } - } - }, - "czsRequestDefinition": { - "type": "object", - "description": "Properties specific request and override of global settings", - "required": [ - "catalogItemName", - "requestType" - ], - "properties": { - "catalogItemName": { - "type": "string", - "description": "Catalog item name" - }, - "requestType": { - "type": "string", - "description": "Type of clip request", - "enum": [ - "FILE", - "LAS", - "RASTER" - ], - "default": "FILE" - }, - "outputSrs": { - "description": "The output spatial reference system. Original=use current epsg code of image. Global=use global epsg code settings.", - "type": "string", - "enum": [ - "original", - "global", - "EPSG:3857", - "EPSG:4326" - ], - "default": "original" - }, - "extent": { - "description": "Geometry object", - "type": "object" - }, - "clipMethod": { - "type": "string", - "description": "The extent settings for clipping the image. Entire=use entire image extents. Global=user global extent settings. Custom=use extent property settings in this request", - "enum": [ - "entire", - "global", - "custom" - ], - "default": "entire" - }, - "las": { - "$ref": "#/definitions/czsLasDefinition" - }, - "raster": { - "$ref": "#/definitions/czsRasterDefinition" - } - } - }, - "czsLasDefinition": { - "type": "object", - "description": "Properties specific to clipping LAS data.", - "required": [ - "outputFormat", - "keepClassifications", - "dropClassifications", - "keepReturnsList", - "dropReturnsList" - ], - "properties": { - "outputFormat": { - "type": "string", - "description": "The output format of las data.", - "enum": [ - "LAS", - "IMG", - "GeoTIFF" - ], - "default": "LAS" - }, - "complexExtent": { - "description": "Complex geometry object", - "type": "object" - }, - "keepClassifications": { - "type": "array", - "items": { - "type": "number" - } - }, - "dropClassifications": { - "type": "array", - "items": { - "type": "number" - } - }, - "keepReturnsList": { - "type": "array", - "items": { - "type": "number" - } - }, - "dropReturnsList": { - "type": "array", - "items": { - "type": "number" - } - } - } - }, - "czsRasterDefinition": { - "type": "object", - "description": "Properties specific to clipping raster data", - "required": [ - "interpolation", - "measurementType", - "measurementXValue", - "measurementYValue" - ], - "properties": { - "outputFormat": { - "type": "string", - "description": "The output format of raster data.", - "enum": [ - "GeoTIFF", - "IMG", - "NITF", - "ECW", - "JP2/JPEG2000" - ], - "default": "IMG" - }, - "interpolation": { - "type": "string", - "description": "", - "enum": [ - "bilinear", - "bicubic", - "nearest neighbor" - ], - "default": "bilinear" - }, - "channelAxis": { - "type": "string", - "description": "" - }, - "channels": { - "type": "array", - "description": "", - "items": { - "type": "string" - } - }, - "measurementType": { - "type": "string", - "enum": [ - "pixel", - "resolution" - ], - "default": "pixel" - }, - "measurementXValue": { - "type": "number", - "description": "Set x value based on measurementType" - }, - "measurementYValue": { - "type": "number", - "description": "Set y value based on measurementType" - } - } - } - }, - "parameters": { - "catalogLockPostPayloadParam": { - "in": "body", - "name": "catalogLockPostPayload", - "description": "Payload for specifying a set of items to be locked.", - "required": false, - "schema": { - "$ref": "#/definitions/LockSpecification" - } - }, - "catalogUnlockPostPayloadParam": { - "in": "body", - "name": "catalogUnlockPostPayload", - "description": "Payload for specifying a lock set to unlock.", - "required": false, - "schema": { - "$ref": "#/definitions/LockSetIdentification" - } - }, - "catalogItemIdPostPayloadParam": { - "in": "body", - "name": "catalogItemIdPostPayload", - "description": "Payload for specifying a single catalog id.", - "required": false, - "schema": { - "$ref": "#/definitions/CatalogId" - } - }, - "catalogItemIdsPostPayloadParam": { - "in": "body", - "name": "catalogItemIdsPostPayload", - "description": "Payload for specifying multiple catalog ids.", - "required": false, - "schema": { - "$ref": "#/definitions/CatalogIds" - } - }, - "profileParamFull": { - "name": "profile", - "in": "query", - "description": "Profile determines the amount of detail that is returned with each catalog item.", - "required": false, - "type": "string", - "default": "full", - "enum": [ - "full", - "summary", - "brief" - ] - }, - "profileParamBrief": { - "name": "profile", - "in": "query", - "description": "Profile determines the amount of detail that is returned with each catalog item.", - "required": false, - "type": "string", - "default": "brief", - "enum": [ - "full", - "summary", - "brief" - ] - }, - "keywordsParam": { - "name": "keywords", - "in": "query", - "description": "Space separated set of keywords. This allows filtering of catalog items by specific keywords.", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "ssv", - "allowEmptyValue": true - }, - "orderbyParam": { - "name": "orderby", - "in": "query", - "description": "Return the catalog items ordered according to the given catalog property name. The property must be a valid property for the type of catalog item being queried. Use ```asc``` for ascending and ```desc``` for descending.", - "required": false, - "type": "string" - }, - "startParam": { - "name": "start", - "in": "query", - "description": "Filter the results starting at this index between 0 and the total number of catalog items.", - "required": false, - "type": "integer", - "default": 0, - "minimum": 0 - }, - "maxresultsParam": { - "name": "maxresults", - "in": "query", - "description": "The maximum number of catalog items to return.", - "required": false, - "type": "integer", - "default": 10, - "minimum": 1 - }, - "classesParam": { - "name": "classes", - "in": "query", - "description": "Comma delimited set of entity class names. Possible values include:\n- ```com.erdas.rsp.babel.model.ResourceAggregate```\n- ```com.erdas.rsp.babel.model.imagery.ImageReference```\n- ```com.erdas.rsp.babel.model.vector.VectorReference```\n- ```com.erdas.rsp.babel.model.pointcloud.PointCloudResource```\n- ```com.erdas.rsp.babel.model.GenericItem```\n- ```com.erdas.rsp.babel.model.video.VideoResource```\n", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "com.erdas.rsp.babel.model.ResourceAggregate", - "com.erdas.rsp.babel.model.imagery.ImageReference", - "com.erdas.rsp.babel.model.vector.VectorReference", - "com.erdas.rsp.babel.model.pointcloud.PointCloudResource", - "com.erdas.rsp.babel.model.GenericItem", - "com.erdas.rsp.babel.model.video.VideoResource" - ] - }, - "collectionFormat": "multi" - }, - "serviceClassesParam": { - "name": "classes", - "in": "query", - "description": "Comma delimited set of entity class names. Possible values include:\n- ```com.erdas.rsp.babel.model.ows.WebFeatureService```\n- ```com.erdas.rsp.babel.model.ows.WebMapService```\n- ```com.erdas.rsp.babel.model.ows.WebCoverageService```\n- ```com.erdas.rsp.babel.model.ows.WebProcessingService```\n", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "com.erdas.rsp.babel.model.ows.WebFeatureService", - "com.erdas.rsp.babel.model.ows.WebMapService", - "com.erdas.rsp.babel.model.ows.WebCoverageService", - "com.erdas.rsp.babel.model.ows.WebProcessingService" - ] - }, - "collectionFormat": "multi" - }, - "intersectParam": { - "name": "intersect", - "in": "query", - "description": "Spatially filtering using a spatial intersection with a WKT-encoded geometry. Only valid for catalog item classes with a footprint.", - "required": false, - "type": "string" - }, - "deleteLocalFilesParam": { - "name": "deleteLocalFiles", - "in": "query", - "description": "Determines whether local files on server are deleted when provider is deleted.", - "required": false, - "type": "boolean", - "default": "true" - }, - "idParam": { - "name": "ID", - "in": "path", - "description": "ID of the catalog item.", - "required": true, - "type": "string" - }, - "providerNameParam": { - "name": "providerName", - "in": "path", - "description": "Unique legacy service name.", - "required": true, - "type": "string" - }, - "attachmentNameParam": { - "name": "attachmentName", - "in": "path", - "description": "Name of the catalog item attachment.", - "required": true, - "type": "string" - }, - "propertyNameParam": { - "name": "propertyName", - "in": "path", - "description": "Name of the catalog item property.", - "required": true, - "type": "string" - }, - "principalNameParam": { - "name": "principalName", - "in": "path", - "description": "Principal name for a catalog item.", - "required": true, - "type": "string" - }, - "propertyPostPayloadParam": { - "in": "body", - "name": "propertyPostPayload", - "description": "Payload for creating or modifying a catalog item property.", - "required": false, - "schema": { - "$ref": "#/definitions/CatalogProperty" - } - }, - "vectorProviderHashmapPatchPayloadParam": { - "name": "Map", - "in": "body", - "required": true, - "description": "Update legacy vector service properties", - "schema": { - "$ref": "#/definitions/vectorProviderHashmapDefinition" - } - }, - "catalogAttributePatchPayloadParam": { - "in": "body", - "name": "catalogAttributePatchPay", - "description": "Payload for modifying a catalog item property.", - "required": false, - "schema": { - "$ref": "#/definitions/CatalogAttribute" - } - }, - "rightsPutPayloadParam": { - "in": "body", - "name": "rightsPostPayload", - "description": "Payload for updating principal's rights for a catalog item property.", - "required": false, - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Rights" - } - } - }, - "advancedSearchCriteriaPostPayloadParam": { - "in": "body", - "name": "advancedSearchCriteriaPostPayload", - "required": false, - "schema": { - "$ref": "#/definitions/AdvancedSearchCriteria" - } - }, - "propertyPostTypeQueryParam": { - "name": "type", - "in": "query", - "description": "Type code for catalog item property.\nType code defined as follows:\n- ```'1' = string ```\n- ```'2' = 32 bit integer ```\n- ```'3' = double ```\n- ```'4' = 64-bit integer ```\n- ```'5' = float ```\n- ```'6' = date (ISO-8601 format) ```", - "required": false, - "type": "string" - }, - "propertyPostValueQueryParam": { - "name": "value", - "in": "query", - "description": "Value for the catalog item property. Must be url encoded.", - "required": false, - "type": "string" - }, - "propertyPostRenameQueryParam": { - "name": "rename", - "in": "query", - "description": "Rename query string parameter for catalog item properties.", - "required": false, - "type": "string" - }, - "attachmentPostPayload": { - "name": "addAttachment", - "in": "body", - "description": "Add a attachment that contains reference to file location and its mimeType", - "required": true, - "schema": { - "$ref": "#/definitions/AttachmentParams" - } - }, - "catalogItemPostPayload": { - "name": "addCatalogItem", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/BaseCatalogItemParams" - } - } - } -} \ No newline at end of file diff --git a/non-standard-implementations/oam/overview.md b/non-standard-implementations/oam/overview.md deleted file mode 100644 index ce57c6cd4..000000000 --- a/non-standard-implementations/oam/overview.md +++ /dev/null @@ -1,38 +0,0 @@ -Current API docs: https://hotosm.github.io/oam-catalog/ - -## Introduction - -[Open Aerial Map](map.openaerialmap.org) (OAM) came into existence as a response to the [Humanitarian -Open Street Map Team](https://www.hotosm.org/)'s need for aerial imagery to create vectorised maps for humanitarian purposes, for example; disaster relief and economic development. - -## Overview - -### Imagery spec - -Because of OAM's humanitarian focus it is able to initiate, promote and embrace open standards. This has led to the creation of the [Open Imagery Netowrk](https://github.com/openimagerynetwork) (OIN), a simple specification for describing and sharing aerial imagery. The spec currently stands as follows: - -| element | type | name | description | -|-------------------|--------|-------------------------|---------------------------------------------------------------------------------------------| -| uuid | string | File | unique URI to file | -| projection | string | Projection | CRS of the datasource in full WKT format | -| bbox | array | Bounding Box | Pair of min and max coordinates in CRS units, (min_x, min_y, max_x, max_y) | -| footprint | string | Datasource footprint | WKT format, describing the actual footprint of the imagery | -| gsd | number | Ground Spatial Distance | Average ground spatial distance (resolution) of the datasource imagery, expressed in meters | -| file_size | number | File Size | File size on disk in bytes | -| acquisition_start | string | Acquisition Date Start | First date of acquisition in UTC (Combined date and time representation) | -| acquisition_end | string | Acquisition Date End | Last date of acquisition in UTC (Combined date and time representation) (optional) | -| title | string | Title | Human friendly title of the image | -| platform | string | Type of imagery | List of possible platform sources limited to satellite, aircraft, UAV, balloon, kite, helikite, pole, and rover | -| provider | string | Imagery Provider | Provider/owner of the OIN bucket | -| contact | string | Contact | Name and email address of the data provider | -| properties | object | Properties | Additional properties about the image (optional) | - -Although OAM implements OIN it strives to be distinct from it. - -### API endpoints - -There is nothing exceptional about the API, it essentially provides CRUD and search endpoints for imagery. - -### Serving imagery - -OAM is currently using a [dynamic tiler](https://github.com/hotosm/oam-dynamic-tiler) that dynamically creates TMS tiles per web request. Added imagery must first be processed in a manner similar to that expected by Cloud Optimized GeoTiffs, however the dynamic tiler is yet to actually support the COG format. diff --git a/non-standard-implementations/oam/spec.json b/non-standard-implementations/oam/spec.json deleted file mode 100644 index e9c81382c..000000000 --- a/non-standard-implementations/oam/spec.json +++ /dev/null @@ -1,1022 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "OAM API", - "version": "0.2.0", - "description": "" - }, - "paths": { - "/analytics": { - "get": { - "tags": [ - "Analytics" - ], - "summary": "Provides metadata about the catalog ", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "integer", - "items": { - "$ref": "#/definitions/GetAnalytics" - } - } - } - } - } - }, - "/meta": { - "get": { - "tags": [ - "Meta" - ], - "summary": "Main endpoint to find data within the catalog ", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "name": "bbox", - "in": "path", - "required": false, - "type": "string", - "description": "Bounding box to search within. Format ?bbox=[lon_min],[lat_min],[lon_max],[lat_max]. " - }, - { - "name": "title", - "in": "path", - "required": false, - "type": "string", - "description": "Limit results by title. " - }, - { - "name": "provider", - "in": "path", - "required": false, - "type": "string", - "description": "Limit results by provider. " - }, - { - "name": "gsd_from", - "in": "path", - "required": false, - "type": "number", - "description": "Find results greater than a certain resolution. Can be used independently of gsd_to. " - }, - { - "name": "gsd_to", - "in": "path", - "required": false, - "type": "number", - "description": "Find results with lower than a certain resolution. Can be used independently of gsd_from. " - }, - { - "name": "acquisition_from", - "in": "path", - "required": false, - "type": "date", - "description": "Show results after a certain date. Can be used independently of acquisition_to. " - }, - { - "name": "acquisition_to", - "in": "path", - "required": false, - "type": "date", - "description": "Show results before a certain date. Can be used independently of acquisition_from. " - }, - { - "name": "has_tiled", - "in": "path", - "required": false, - "type": "boolean", - "description": "Return only images with associated tiled images. " - }, - { - "name": "sort", - "in": "path", - "required": false, - "type": "string", - "description": "The sort order, asc or desc. Must be used with order_by. " - }, - { - "name": "order_by", - "in": "path", - "required": false, - "type": "string", - "description": "& date] Field to sort by. Must be used with sort. " - }, - { - "name": "limit", - "in": "path", - "required": false, - "type": "number", - "description": "Change the number of results returned, max is 100. " - }, - { - "name": "page", - "in": "path", - "required": false, - "type": "number", - "description": "Paginate through results. " - }, - { - "name": "skip", - "in": "path", - "required": false, - "type": "number", - "description": "Number of records to skip. " - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "string", - "items": { - "$ref": "#/definitions/GetMeta" - } - } - } - } - }, - "post": { - "tags": [ - "Meta" - ], - "summary": "Add an image to the catalog. This is an authenticated endpoint. ", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Add an image to the catalog. This is an authenticated endpoint. ", - "required": true, - "schema": { - "$ref": "#/definitions/PostMeta" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "string", - "items": { - "$ref": "#/definitions/PostMeta" - } - } - } - } - } - }, - "/meta/{id}": { - "get": { - "tags": [ - "Meta" - ], - "summary": "Display data for an individual image ", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "required": false, - "type": "string", - "description": "The id of the image. " - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "string", - "items": { - "$ref": "#/definitions/GetMetaId" - } - } - } - } - } - }, - "/tms": { - "get": { - "tags": [ - "TMS" - ], - "summary": "Main endpoint to list TMS endpoints ", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "name": "uri", - "in": "path", - "required": false, - "type": "string", - "description": "search for a particular TMS URI " - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "string", - "items": { - "$ref": "#/definitions/GetTms" - } - } - } - } - }, - "post": { - "tags": [ - "TMS" - ], - "summary": "Add a TMS (Tiled Map Service) endpoint to the catalog. This is an authenticated endpoint. ", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Add a TMS (Tiled Map Service) endpoint to the catalog. This is an authenticated endpoint. ", - "required": true, - "schema": { - "$ref": "#/definitions/PostTms" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "string", - "items": { - "$ref": "#/definitions/PostTms" - } - } - } - } - } - }, - "/uploads/url": { - "get": { - "tags": [ - "_home_tombh_Workspace_hotosm_oam_catalog_routes_uploads_js" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "name": "payload", - "in": "path", - "required": true, - "type": "object", - "description": "Parameters sent as object resolvable from request.payload " - }, - { - "name": "payload.name", - "in": "path", - "required": true, - "type": "string", - "description": "The name of the file to be uploaded " - }, - { - "name": "payload.type", - "in": "path", - "required": true, - "type": "string", - "description": "The content type of the file to be uploaded " - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "Object", - "items": { - "$ref": "#/definitions/uploader" - } - } - } - } - } - }, - "/uploads": { - "get": { - "tags": [ - "uploads" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "Object[]", - "items": { - "$ref": "#/definitions/GetUploads" - } - } - } - } - }, - "post": { - "tags": [ - "uploads" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/uploaderInfo" - } - } - ] - } - }, - "/uploads/{id}": { - "get": { - "tags": [ - "uploads" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string", - "description": "The id of the upload " - } - ], - "responses": { - "200": { - "description": "successful operation", - "schema": { - "type": "Object", - "items": { - "$ref": "#/definitions/uploader" - } - } - } - } - } - } - }, - "definitions": { - "GetAnalytics": { - "properties": { - "count": { - "type": "integer", - "description": "Number of unique images in catalog " - }, - "sensor_count": { - "type": "integer", - "description": "Number of unique sensors in catalog " - }, - "provider_count": { - "type": "integer", - "description": "Number of unique providers in catalog " - }, - "date": { - "type": "date", - "description": "Date and time of data point " - } - }, - "required": [ - "count", - "sensor_count", - "provider_count", - "date" - ] - }, - "GetMeta": { - "properties": { - "bbox": { - "type": "string", - "description": "Bounding box of image " - }, - "title": { - "type": "string", - "description": "Name of image " - }, - "provider": { - "type": "string", - "description": "Imagery provider " - }, - "gsd_from": { - "type": "number", - "description": "Find results greater than a certain resolution. Can be used independently of gsd_to. " - }, - "gsd_to": { - "type": "number", - "description": "Find results with lower than a certain resolution. Can be used independently of gsd_from. " - }, - "acquisition_from": { - "type": "date", - "description": "Show results after a certain date. Can be used independently of acquisition_to. " - }, - "acquisition_to": { - "type": "date", - "description": "Show results before a certain date. Can be used independently of acquisition_from. " - }, - "has_tiled": { - "type": "boolean", - "description": "Return only images with associated tiled images. " - }, - "sort": { - "type": "string", - "description": "The sort order, asc or desc. Must be used with order_by. " - }, - "order_by": { - "type": "string", - "description": "& date] Field to sort by. Must be used with sort. " - }, - "limit": { - "type": "number", - "description": "Change the number of results returned, max is 100. " - }, - "page": { - "type": "number", - "description": "Paginate through results. " - }, - "skip": { - "type": "number", - "description": "Number of records to skip. " - }, - "_id": { - "type": "string", - "description": "Unique internal ID " - }, - "uuid": { - "type": "url", - "description": "Image source " - }, - "projection": { - "type": "string", - "description": "Image projection information " - }, - "footprint": { - "type": "string", - "description": "Image footprint " - }, - "gsd": { - "type": "number", - "description": "Spatial resolution of image (in meters) " - }, - "file_size": { - "type": "number", - "description": "File size of image (in bytes) " - }, - "acquisition_start": { - "type": "date", - "description": "Start of image capture " - }, - "acquisition_end": { - "type": "date", - "description": "End of image capture " - }, - "platform": { - "type": "string", - "description": "Recording platform of image (UAV, satellite, etc) " - }, - "contact": { - "type": "string", - "description": "Imagery contact point " - }, - "properties": { - "type": "object", - "description": "Optional metadata about the image " - }, - "meta_uri": { - "type": "url", - "description": "URL of metadata information " - }, - "geojson": { - "type": "string", - "description": "GeoJSON information for image " - } - }, - "required": [ - "_id", - "uuid", - "title", - "projection", - "footprint", - "gsd", - "file_size", - "acquisition_start", - "acquisition_end", - "platform", - "provider", - "contact", - "properties", - "meta_uri", - "geojson", - "bbox" - ] - }, - "PostMeta": { - "properties": { - "uuid": { - "type": "url", - "description": "Image source " - }, - "footpring": { - "type": "string", - "description": "GeoJSON footpring of image. " - }, - "bbox": { - "type": "string", - "description": "Bounding box of image " - }, - "_id": { - "type": "string", - "description": "Unique internal ID " - }, - "title": { - "type": "string", - "description": "Name of image " - }, - "projection": { - "type": "string", - "description": "Image projection information " - }, - "footprint": { - "type": "string", - "description": "Image footprint " - }, - "gsd": { - "type": "number", - "description": "Spatial resolution of image (in meters) " - }, - "file_size": { - "type": "number", - "description": "File size of image (in bytes) " - }, - "acquisition_start": { - "type": "date", - "description": "Start of image capture " - }, - "acquisition_end": { - "type": "date", - "description": "End of image capture " - }, - "platform": { - "type": "string", - "description": "Recording platform of image (UAV, satellite, etc) " - }, - "provider": { - "type": "string", - "description": "Imagery provider " - }, - "contact": { - "type": "string", - "description": "Imagery contact point " - }, - "properties": { - "type": "object", - "description": "Optional metadata about the image " - }, - "meta_uri": { - "type": "url", - "description": "URL of metadata information " - }, - "geojson": { - "type": "string", - "description": "GeoJSON information for image " - } - }, - "required": [ - "_id", - "uuid", - "title", - "projection", - "footprint", - "gsd", - "file_size", - "acquisition_start", - "acquisition_end", - "platform", - "provider", - "contact", - "properties", - "meta_uri", - "geojson", - "bbox" - ] - }, - "GetMetaId": { - "properties": { - "id": { - "type": "string", - "description": "The id of the image. " - }, - "_id": { - "type": "string", - "description": "Unique internal ID " - }, - "uuid": { - "type": "url", - "description": "Image source " - }, - "title": { - "type": "string", - "description": "Name of image " - }, - "projection": { - "type": "string", - "description": "Image projection information " - }, - "footprint": { - "type": "string", - "description": "Image footprint " - }, - "gsd": { - "type": "number", - "description": "Spatial resolution of image (in meters) " - }, - "file_size": { - "type": "number", - "description": "File size of image (in bytes) " - }, - "acquisition_start": { - "type": "date", - "description": "Start of image capture " - }, - "acquisition_end": { - "type": "date", - "description": "End of image capture " - }, - "platform": { - "type": "string", - "description": "Recording platform of image (UAV, satellite, etc) " - }, - "provider": { - "type": "string", - "description": "Imagery provider " - }, - "contact": { - "type": "string", - "description": "Imagery contact point " - }, - "properties": { - "type": "object", - "description": "Optional metadata about the image " - }, - "meta_uri": { - "type": "url", - "description": "URL of metadata information " - }, - "geojson": { - "type": "string", - "description": "GeoJSON information for image " - }, - "bbox": { - "type": "string", - "description": "Bounding box of image " - } - }, - "required": [ - "_id", - "uuid", - "title", - "projection", - "footprint", - "gsd", - "file_size", - "acquisition_start", - "acquisition_end", - "platform", - "provider", - "contact", - "properties", - "meta_uri", - "geojson", - "bbox" - ] - }, - "GetTms": { - "properties": { - "uri": { - "type": "uuid", - "description": "TMS URI " - }, - "_id": { - "type": "string", - "description": "Unique internal ID " - }, - "images": { - "type": "object", - "description": "An array of images related to this TMS. Each item in the array includes _id and image uuid " - } - }, - "required": [ - "_id", - "uri", - "images" - ] - }, - "PostTms": { - "properties": { - "uri": { - "type": "uuid", - "description": "TMS URI " - }, - "images": { - "type": "object", - "description": "An array of images related to this TMS. Each item in the array includes _id and image uuid " - }, - "_id": { - "type": "string", - "description": "Unique internal ID " - } - }, - "required": [ - "_id", - "uri", - "images" - ] - }, - "payload": { - "properties": { - "name": { - "type": "string", - "description": "The name of the file to be uploaded " - }, - "type": { - "type": "string", - "description": "The content type of the file to be uploaded " - } - }, - "required": [ - "name", - "type" - ] - }, - "uploader": { - "properties": {}, - "required": [] - }, - "results.uploader": { - "properties": { - "name": { - "type": "string", - "description": "" - }, - "email": { - "type": "string", - "description": "" - } - }, - "required": [ - "name", - "email" - ] - }, - "results": { - "properties": { - "scenes": { - "type": "array", - "description": "", - "items": { - "type": "Object" - } - }, - "uploader": { - "type": "object", - "description": "Uploader contact info ", - "$ref": "#/definitions/results.uploader" - } - }, - "required": [ - "scenes", - "uploader" - ] - }, - "results.scenes": { - "properties": { - "contact": { - "type": "object", - "description": "Contact person for this scene ", - "$ref": "#/definitions/results.scenes.contact" - }, - "title": { - "type": "string", - "description": "Scene title " - }, - "platform": { - "type": "string", - "description": "" - }, - "provider": { - "type": "string", - "description": "Imagery provider " - }, - "sensor": { - "type": "string", - "description": "Sensor/device " - }, - "acquisition_start": { - "type": "string", - "description": "Date and time of imagery acquisition " - }, - "acquisition_end": { - "type": "string", - "description": "Date and time of imagery acquisition " - }, - "images": { - "type": "array", - "description": "Array of images in this scene ", - "items": { - "type": "Object" - } - } - }, - "required": [ - "contact", - "title", - "platform", - "provider", - "sensor", - "acquisition_start", - "acquisition_end", - "images" - ] - }, - "results.scenes.contact": { - "properties": { - "name": { - "type": "string", - "description": "" - }, - "email": { - "type": "string", - "description": "" - } - }, - "required": [ - "name", - "email" - ] - }, - "results.scenes.images": { - "properties": { - "url": { - "type": "string", - "description": "" - }, - "status": { - "type": "string", - "description": "" - }, - "error": { - "type": "string", - "description": "" - }, - "messages": { - "type": "array", - "description": "", - "items": { - "type": "String" - } - }, - "startedAt": { - "type": "string", - "description": "Date and time the processing started " - }, - "stoppedAt": { - "type": "string", - "description": "Date and time the processing stopped " - } - }, - "required": [ - "url", - "status", - "error", - "messages", - "startedAt", - "stoppedAt" - ] - }, - "GetUploads": { - "properties": { - "results": { - "type": "array", - "description": "", - "items": { - "type": "Object" - } - } - }, - "required": [ - "results" - ] - }, - "uploaderInfo": { - "properties": {}, - "required": [] - }, - "PostUploads": { - "properties": { - "contactInfo": { - "type": "object", - "description": "", - "$ref": "#/definitions/contactInfo" - }, - "scenes": { - "type": "array", - "description": "", - "items": { - "type": "Object" - } - } - }, - "required": [ - "contactInfo", - "scenes" - ] - }, - "scenes": { - "properties": { - "metadata": { - "type": "object", - "description": "The OAM metadata ", - "$ref": "#/definitions/scenes.metadata" - }, - "urls": { - "type": "array", - "description": "The image URLs ", - "items": { - "type": "string" - } - } - }, - "required": [ - "metadata", - "urls" - ] - }, - "GetUploadsId": { - "properties": { - "id": { - "type": "string", - "description": "The id of the upload " - } - }, - "required": [ - "id" - ] - } - } -} diff --git a/non-standard-implementations/overview.md b/non-standard-implementations/overview.md deleted file mode 100644 index 821bb1da9..000000000 --- a/non-standard-implementations/overview.md +++ /dev/null @@ -1,41 +0,0 @@ -## Overview - -This folder contains sub-folders of the various implementations of catalogs that are active in the world. Each sub-folder should -have a swagger document of its latest implementation (yaml or json are both fine), as well as one or more documents discussing -what the API handles and what choices were made in creating it. - -To add an implementation create a new folder with the swagger and overview documents, and add it to the 'In Collaboration' list -below. - -### In Collaboration - -[planet/](planet/) includes the swagger document for the current [Data API](https://www.planet.com/docs/reference/) as well as -some information on previous catalog iterations. - -[oam/](oam/) includes the swagger document for the current [API](https://api.openaerialmap.org/). - -### Top Potential Collaborators - -Azavea's [RasterFoundry](http://rasterfoundry.org) - They already have a swagger spec up at https://github.com/azavea/raster-foundry/blob/develop/docs/swagger/spec.yml -It has lots more than just querying imagery, but there's definitely pieces to collaborate on. - -[Pixia](http://pixia.com) HiPERLook - This product catalogs vast amounts of imagery and serves it up as OGC standards. Their -experience with Full Motion Video (FMV) could also be interesting, to also catalog time series formats. - -Development Seed's [Landsat API](https://api.developmentseed.org/satellites/landsat) - Provides an API wrapper to access Landsat -data. - -DigitalGlobe's GDBX [Catalog API V2)(https://gbdxdocs.digitalglobe.com/docs/catalog-v2-course) - A recent iteration of the DG -catalog API, which is simplified compared to V1 and more in line with others mentioned. - -Urthecast [API's](https://urthecast.github.io/urthecast-api-presentation/#/) - There have been few updates recently, but it -should be reviewed as new API's are considered. - -AstroDigital [Platform](https://docs.astrodigital.com/) - Looks like it already has a swagger document, given the presentation of -the interactive API. The [search endpoint](https://docs.astrodigital.com/v2.0/docs/search) is the most relevant. - -### Others - -ESRI's Image Server and web service API's would be great to collaborate with. But need to figure out which part of their -extensive ecosystem makes sense. GeoNode and GeoNetwork may be interesting, though neither is focused on cataloging imagery. -But they do catalog geospatial layers, so some collaboration could be good. Descartes Labs also has a platform that searches satellite imagery, but right now it appears to just be a python API, no documented REST API. Once a core is established with one or two implementations it would be ideal to get clients testing on it - QGIS, ArcGIS, OpenLayers, GDAL, GeoTools, etc. diff --git a/non-standard-implementations/pixia/README.md b/non-standard-implementations/pixia/README.md deleted file mode 100755 index 58b1e90c1..000000000 --- a/non-standard-implementations/pixia/README.md +++ /dev/null @@ -1,489 +0,0 @@ -## Overview - -Pixia Catalog is a database system designed to store metadata for spatiotemporal -assets, i.e. anything with geometry and time. It does not store assets themselves, nor does it -understand the data formats or sensor type used by the assets. - -It provides various REST calls to search the database. OGC® ECQL is used -as the query language. As required by ECQL, geometries are represented as WKT in -queries. - -Regardless of the backend database used to store data, the API always exposes the -data in JSON. Geometries are represented as GeoJSON geometry objects. Besides the -proprietary JSON format, it can also return results as GeoJSON FeatureCollection. - -## Terminology - -#### Provider - -The provider of the assets. The metadata from the same provider must share the -same schema and all fields should have the same semantics. - -The data is partitioned by provider. `provider` is a required parameter in -all search operations. - -#### Asset - -Asset is the basic data unit stored in the system. Anything with geometry -and time can be an asset. - -The required fields for assets are: - -* `provider` The provider of the asset -* `name` An unique name for the asset -* `geometry` GeoJSON representing footprint of the geometry -* `period` Time period of the asset -* `url` The location of the data for the asset - -#### Group - -Groups are used to organize assets, like folders in filesystem. A group -can have a parent group to form a tree. - -Group is not required. A default group `unfiled` is used if none is provided. - -The required fields for groups are: - -* `provider` The provider of the data -* `name` A unique name for the group - -A group's `geometry` is a calculated footprint of the all assets under this group. -The `period` is the super range that covers the periods of all its assets. - -#### Item - -Items are fabricated entities that are used to support LOD (Level of Details) for a -thematic map or timeline. An item can represent either an asset or a group. When -it's too expensive to display assets, the system returns groups instead. A system -may also generate vGroups (Virtual Group) if there are too many physical groups -to display. - -## Data Format - -#### Data Types - -The data is represented as JSON throughout the API. The system is capable of -storing any kind of data. However, data type must be specified for indexed fields -so the proper index scheme can be selected by the backend database systems. - -The following types are supported: - -* `String` A text string -* `Text` A text string with text-search index -* `Integer` 32-bit integer -* `Long` 64-bit integer -* `Float` IEEE double-precision floating-point number -* `Time` A timestamp with millisecond precision -* `StringSet` A set made of text entities -* `IntegerSet` A set made of integers -* `TimeRange` A time range with `begin` and `end` -* `IntegerRange` A integer range with `begin` and `end` -* `FloatRange` A floating-point range with `begin` and `end` -* `Doc` Document storage, implemented as CLOB or JSON depending on database -* `Geo` Geospatial field - -#### Schema - -The data model is document-based and arbitrary data can be stored and returned. -However, some basic schema must be followed for assets and groups. - -The following fields are common to both assets and groups: - -* `id` The ID of the record, a 20-char string generated by the system -* `provider` Provider ID. Provider must be provisioned before an asset/group -can be registered -* `name` The name of the asset/group, must be unique -* `geometry` GeoJSON representing the footprint of the asset/group. Only point -and polygon are supported, including MultiPolygon. Not required for group -* `period` Time range for the asset/group. Not required for group -* `sourceGeometry` The geometry is simplified to speed up the index. This field -holds the original geometry -* `source` Un-normalized original metadata - -These fields are for assets only: - -* `groupName` The name of the group, optional -* `url` URL for the content of the asset, required -* `subject` Searchable text describing the asset, optional -* `keywords` Text-search fields, optional - -These fields are for groups only: - -* `parent` Parent group ID, `null` if no parent -* `groupType` Indicates whether this is a physical or virtual group -* `sourcePeriod` The `period` in a group is calculated based on the periods of -all child assets. This field holds the original period value for a group if any -is provided in group registration -* `assetCount` Number of assets under this group - - -## REST API - -The full API is documented in the OpenAPI (Swagger) specification. - -The REST calls can be divided into following categories: - -1. Basic CRUD operations: `/group`, `/asset` -2. Search operations: `/groups`, `/assets`, `/feature/groups`, `feature/assets` -3. Auxiliary operations for UI : `/items`, `/timeline` -4. Administrative operations: `/providers` - -#### Error Response - -All REST calls share the same error response format. Only 2 HTTP Status Codes -are used for errors. - -* `400`: Invalid request. e.g. Missing required fields, values out of range, etc... -* `500`: Server error. e.g. Database error, timeout, etc... Client should retry. - -The format of the `ErrorResponse` - - { - "code" : "A error code (text)", - "message" : "A localized text message", - "fields" : "an optional object to return errors for each field" - } - -`exception` and `stackTrace` may also be returned in debug mode. - - -#### Registration - -##### Asset Registration/Update - - Endpoint: /api/asset - Method: Post - -The `POST` is used for both CREATE and UPDATE operation. When ID is provided, it's -an update. Otherwise, it's a CREATE. - -The body of the request contains the JSON for the asset. For example, - - { - "provider" : "pixia", - "name" : "test-dg-4", - "url" : "file:///mnt/wdc-cluster-01/srcimg/test4.TIF", - "group" : "test", - "period" : { - "begin" : 1345969788782, - "end" : 1345969788782 - }, - "types" : [ "orthoRaster" ], - "geometry" : { - "type" : "Polygon", - "coordinates" : [ [ [ 35.95399425000001, 33.94233675 ], [ 35.953998750000004, 33.94233675 ], [ 35.95400325000001, 33.94233675 ], [ 35.95400775, 33.94233675 ], [ 35.954012250000005, 33.94233675 ], [ 35.95446675000001, 33.942327750000004 ], [ 35.954471250000005, 33.942327750000004 ], [ 35.95447575, 33.942327750000004 ], [ 35.95448025000001, 33.942327750000004 ], [ 35.954484750000006, 33.94232325000001 ], [ 35.95448925000001, 33.94232325000001 ], [ 36.02736225, 33.94043016468969 ], [ 36.02736225, 33.86865375 ], [ 35.9546980003687, 33.86865375 ], [ 35.95399425000001, 33.94233225000001 ], [ 35.95399425000001, 33.94233675 ] ] ], - "crs" : { - "type" : "name", - "properties" : { - "name" : "EPSG:4326" - } - }, - "bbox" : [ 35.95399425000001, 33.86865375, 36.02736225, 33.94233675 ] - }, - "sensorAzimuthDeg" : { - "begin" : 154.5, - "end" : 154.5 - }, - "offNadirAngle" : { - "begin" : 13.0, - "end" : 13.0 - }, - "sensorElevationDeg" : { - "begin" : 75.8, - "end" : 75.8 - }, - "sunAzimuthDeg" : { - "begin" : 142.4, - "end" : 142.4 - }, - "cloudCover" : { - "begin" : 0.0, - "end" : 0.0 - }, - "predictedNiirs" : { - "begin" : 4.9, - "end" : 4.9 - }, - "sunElevationDeg" : { - "begin" : 62.0, - "end" : 62.0 - } - } - - -##### Group Registration/Update - - Endpoint: /api/group - Method: POST - -Group registration works very similarly to asset registration except one difference - -the operation is an "Upsert". If the group exists, it's an UPDATE. -Otherwise it's a CREATE. - -#### Retrieval - -##### Asset Retrieval - - Endpoint: /api/asset - Method: GET - -Asset can be retrieved by ID or name. If ID is provided, name is ignored. - -For example, - - http://api.pixia.com/catalog/api/asset?id=abgxyrfeg0s2eu4dmftv - -The response is the JSON document for the asset, - - { - "id" : "abgxyrfeg0s2eu4dmftv", - "provider" : "pixia", - "name" : "test-dg-4", - "url" : "file:///mnt/wdc-cluster-01/srcimg/test4.TIF", - "groupId" : "gbgxyrfeg0s389r2cupu", - "period" : { - "begin" : 1345969788782, - "end" : 1345969788782 - }, - "types" : [ "orthoRaster" ], - "geometry" : { - "type" : "Polygon", - "coordinates" : [ [ [ 35.95399425000001, 33.94233675 ], [ 35.953998750000004, 33.94233675 ], [ 35.95400325000001, 33.94233675 ], [ 35.95400775, 33.94233675 ], [ 35.954012250000005, 33.94233675 ], [ 35.95446675000001, 33.942327750000004 ], [ 35.954471250000005, 33.942327750000004 ], [ 35.95447575, 33.942327750000004 ], [ 35.95448025000001, 33.942327750000004 ], [ 35.954484750000006, 33.94232325000001 ], [ 35.95448925000001, 33.94232325000001 ], [ 36.02736225, 33.94043016468969 ], [ 36.02736225, 33.86865375 ], [ 35.9546980003687, 33.86865375 ], [ 35.95399425000001, 33.94233225000001 ], [ 35.95399425000001, 33.94233675 ] ] ], - "crs" : { - "type" : "name", - "properties" : { - "name" : "EPSG:4326" - } - }, - "bbox" : [ 35.95399425000001, 33.86865375, 36.02736225, 33.94233675 ] - }, - "sensorAzimuthDeg" : { - "begin" : 154.5, - "end" : 154.5 - }, - "offNadirAngle" : { - "begin" : 13.0, - "end" : 13.0 - }, - "sensorElevationDeg" : { - "begin" : 75.8, - "end" : 75.8 - }, - "sunAzimuthDeg" : { - "begin" : 142.4, - "end" : 142.4 - }, - "cloudCover" : { - "begin" : 0.0, - "end" : 0.0 - }, - "predictedNiirs" : { - "begin" : 4.9, - "end" : 4.9 - }, - "sunElevationDeg" : { - "begin" : 62.0, - "end" : 62.0 - } - } - -##### Group Retrieval - - Endpoint: /api/group - Method: GET - -Group retrieval works exactly the same as asset retrieval. - -#### Search - -All the search calls share the same parameters: - -* `provider` Provider ID -* `query` Query in ECQL. One extension to standard ECQL is that dot notation - can be used for object member reference. For example, - `"sensorAzimuthDeg.begin < 120.0"` -* `bbox` A shorthand for bounding box intersects query in the form of -`w-lon,s-lat,e-lon,n-lat`. The box follows west-east winding. One benefit -over ECQL is that `bbox` can support any area, even the whole globe -(e.g. `"0,-90,0,90"`). The box is split into many small ones if backend -database can't handle it -* `time` A shorthand for time period intersects query in the form of -`begin,end` or `time`. Time value must be milliseconds since epoch -* `fields` Fields to return for asset/group -* `start` Start record number for pagination -* `limit` Maximum number of records to return per page - -All the responses share the same format `PageableResults`, - - { - "count" : "Number of results returned", - "start" : "Start number of the results for pagination", - "total" : "Total number of results", - "results" : [ - {"results1"}, - {"results2"} - ] - } - -##### Asset Search - - Endpoint: /api/assets - Method: GET - -Here is an example request. All the parameters must be properly URL-encoded. - - http://api.pixia.com/catalog/api/assets?provider=pixia&bbox=-13.447265625,-17.05078125,33.3984375,34.892578125&query=(sunAzimuthDeg.begin+%3E%3D+0+AND+sunAzimuthDeg.end+%3C%3D+90)+AND+(sunElevationDeg.begin+%3E%3D+-90+AND+sunElevationDeg.end+%3C%3D+-1) - -Here is abbreviated response, - - { - "start": 0, - "count": 26, - "total": 26, - "results": [ - { - "id": "abeqe1kpa2wgpmqxhz1a", - "name": "20170402_133906_1_0c46-0", - "types": [ - "orthoRaster" - ] - }, - - ... - - ] - } - - -##### Asset Search (GeoJSON) - - Endpoint: /api/feature/assets - Method: GET - -This call is exactly the same as `/api/assets`, except that the response is -a GeoJSON FeatureCollection. - -Here is a sample response. The geometry is always returned in GeoJSON. - - { - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 43.423685804275, - 37.802183854217 - ], - [ - 43.617120673194, - 37.804613801164 - ], - [ - 43.620240923594, - 37.636609248478 - ], - [ - 43.427242098037, - 37.634193887657 - ], - [ - 43.423685804275, - 37.802183854217 - ] - ] - ], - "crs": { - "type": "name", - "properties": { - "name": "EPSG:4326" - } - }, - "bbox": [ - 43.423685804275, - 37.634193887657, - 43.620240923594, - 37.804613801164 - ] - }, - "properties": { - "id": "abeqe1kpa2wgpmqxhz1a", - "name": "20170402_133906_1_0c46-0", - "itemType": "asset", - "geometryType": "blob", - "period": { - "begin": 1491140346000, - "end": 1491140346000 - }, - "types": [ - "orthoRaster" - ] - } - }, - - ... - ], - "properties": { - "start": 0, - "count": 26, - "total": 26 - } - } - -##### Group Search - - Endpoint: /api/groups - Method: GET - -This call works exactly the same as `/api/assets`, except that it searches the -group database. - -##### Group Search (GeoJSON) - - Endpoint: /api/feature/groups - Method: GET - -This call works exactly the same as `/api/feature/assets`, except that it searches the -group database. - -##### Item Search - - Endpoint: /api/items - Method: GET - -The item search returns either assets or groups depending on the level of details -required for the query parameters. - -Unlike asset/group search, this call can return either `PageableResults` or -FeatureCollection based on following parameter, - -* `format` `json` to return PageableResults. `geojson` to return FeatureCollection. - -##### Timeline Search - - Endpint: /api/timeline - Method: GET - -Timeline search is used to return data used to build a timeline. The query parameters -are exactly the same as other queries. - -The response is an array of objects with date and count. - -* `date` The date in the form of `YYYY-MM-DD` -* `count` The number of assets whose periods cover this date - -Here is an abbreviated response, - - [ - { - "date": "2017-02-19", - "count": 69 - }, - { - "date": "2017-04-04", - "count": 1856 - } - ] \ No newline at end of file diff --git a/non-standard-implementations/pixia/catalog-api.yaml b/non-standard-implementations/pixia/catalog-api.yaml deleted file mode 100755 index f6b3c7432..000000000 --- a/non-standard-implementations/pixia/catalog-api.yaml +++ /dev/null @@ -1,935 +0,0 @@ -# Copyright (c) 2017 PIXIA Corp -swagger: '2.0' -info: - title: Pixia Catalog API - description: | - REST API to register, retrieve and search spatiotemporal assets and groups - version: "1.0" -host: api.pixia.com -schemes: - - http - - https -basePath: /catalog/api -produces: - - application/json -paths: - /group: - get: - summary: Retrieve a group - description: | - Retrieve a single group by id or name - operationId: getGroupById - parameters: - - name: id - in: query - description: ID of the group (either id or name must be present) - required: false - type: string - - name: name - in: query - description: name of the group (either name or id must be present) - required: false - type: string - tags: - - Group - responses: - 200: - description: Return the group - schema: - $ref: '#/definitions/GroupResponse' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - post: - summary: Register/update a group. - description: | - Register a group. If group with the same name already exists, the group content - will be updated with the new information. - operationId: registerGroup - consumes: - - application/json - parameters: - - in: body - name: body - required: true - description: The object for the group (provider and name are only required fields) - schema: - "$ref": '#/definitions/Group' - tags: - - Group - responses: - 200: - description: Return the new created/updated group - schema: - $ref: '#/definitions/GroupResponse' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - /groups: - get: - summary: Search groups - description: | - Using spatiotemporal query to search groups in catalog database - operationId: searchGroups - parameters: - - name: provider - in: query - description: Provider ID - required: true - type: string - - name: query - in: query - description: Query in ECQL - required: false - type: string - - name: boundingBox - in: query - description: | - A shorthand query for bounding box in the form of "w-lon,s-lat,e-lon,n-lat". - required: false - type: string - - name: time - in: query - description: | - A shorthand query for time period in the form of "begin,end" or "time". - The time must be in milliseconds from epoch - required: false - type: string - - name: fields - in: query - description: A comma separated list of fields to return - required: false - type: string - - name: start - in: query - description: Start number of the record for pagination (0-based) - required: false - type: integer - format: int32 - - name: limit - in: query - description: Maximum number of records to return per page - required: false - type: integer - format: int32 - tags: - - Group - responses: - 200: - description: An array of groups - schema: - $ref: '#/definitions/PageableResults' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - - /feature/groups: - get: - summary: Search groups and return results as GeoJSON FeatureCollection - description: | - Same as /groups except the response format is GeoJSON FeatureCollection - operationId: searchGroupsAsFeatures - parameters: - - name: provider - in: query - description: Provider ID - required: true - type: string - - name: query - in: query - description: Query in ECQL - required: false - type: string - - name: boundingBox - in: query - description: A shorthand query for bounding box in the form of "w-lon,s-lat,e-lon,n-lat". - required: false - type: string - - name: time - in: query - description: | - A shorthand query for time period in the form of "begin,end" or "time". - The time must be in milliseconds from epoch - required: false - type: string - - name: fields - in: query - description: A comma separated list of fields to return - required: false - type: string - - name: start - in: query - description: Start number of the record for pagination (0-based). - required: false - type: integer - format: int32 - - name: limit - in: query - description: Maximum number of records to return. - required: false - type: integer - format: int32 - tags: - - Group - responses: - 200: - description: GeoJSON FeatureCollection - schema: - $ref: '#/definitions/FeatureCollection' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - - /asset: - get: - summary: Retrieve an asset - description: | - Retrieve a single asset by id or name - operationId: getAssetById - parameters: - - name: id - in: query - description: ID of the assert (either id or name must be present) - required: false - type: string - - name: name - in: query - description: Name of the asset (either name or id must be present) - required: false - type: string - tags: - - Asset - responses: - 200: - description: Return the Asset - schema: - $ref: '#/definitions/AssetResponse' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - post: - summary: Register or update an asset. - description: | - Register an asset in the database. If the asset with the same name - already exists, the duplicate key error will be returned. If the id is provided, - this is an update operation. The provided data is merged with data in database. - If no parent group is provided, the asset will be registered under a special - group called "unfiled" - operationId: registerAsset - consumes: - - application/json - parameters: - - in: body - name: body - required: true - description: The object for the asset - schema: - "$ref": '#/definitions/Asset' - tags: - - Asset - responses: - 200: - description: Return the new created/updated Asset - schema: - $ref: '#/definitions/AssetResponse' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - - /assets: - get: - summary: Search assets - description: | - This call searches assets - operationId: searchAssets - parameters: - - name: provider - in: query - description: Provider ID - required: true - type: string - - name: query - in: query - description: Query in ECQL - required: false - type: string - - name: boundingBox - in: query - description: | - A shorthand query for bounding box in the form of "w-lon,s-lat,e-lon,n-lat". - required: false - type: string - - name: time - in: query - description: | - A shorthand query for time period in the form of "begin,end" or "time". - The time must be in milliseconds from epoch - required: false - type: string - - name: fields - in: query - description: A comma separated list of fields to return - required: false - type: string - - name: start - in: query - description: Start number of the record for pagination (0-based). - required: false - type: integer - format: int32 - - name: limit - in: query - description: Maximum number of records to return. - required: false - type: integer - format: int32 - tags: - - Asset - responses: - 200: - description: An array of assets - schema: - $ref: '#/definitions/PageableResults' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - - /feature/assets: - get: - summary: Search assets and return GeoJSON FeatureCollection - description: | - Same as /assets except that the response format is GeoJSON FeatureCollection - operationId: searchAssetsAsFeatures - parameters: - - name: provider - in: query - description: Provider ID - required: true - type: string - - name: query - in: query - description: Query in ECQL - required: false - type: string - - name: boundingBox - in: query - description: A shorthand query for bounding box in the form of "w-lon,s-lat,e-lon,n-lat". - required: false - type: string - - name: time - in: query - description: | - A shorthand query for time period in the form of "begin,end" or "time". - The time must be in milliseconds from epoch - required: false - type: string - - name: fields - in: query - description: A comma separated list of fields to return - required: false - type: string - - name: start - in: query - description: Start number of the record for pagination (0-based). - required: false - type: integer - format: int32 - - name: limit - in: query - description: Maximum number of records to return. - required: false - type: integer - format: int32 - tags: - - Asset - responses: - 200: - description: GeoJSON FeatureCollection - schema: - $ref: '#/definitions/FeatureCollection' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - - /items: - get: - summary: Search for groups or assets. - description: | - Search both groups and assets and return items. Item is a virtual entitiy - that can be either a group or asset. Mainly used for thematic map or timeline - operationId: searchItems - parameters: - - name: provider - in: query - description: Provider ID - required: true - type: string - - name: query - in: query - description: Query in ECQL - required: false - type: string - - name: boundingBox - in: query - description: A shorthand query for bounding box in the form of "w-lon,s-lat,e-lon,n-lat". - required: false - type: string - - name: time - in: query - description: | - A shorthand query for time period in the form of "begin,end" or "time". - The time must be in milliseconds from epoch - required: false - type: string - - name: format - in: query - description: | - Response format, "json" (default) or "geojson". If the format is "json", - the call returns type defined here. For "geojson", the response is - a FeatureCollection type in GeoJSON. - required: false - type: string - - name: costLimit - in: query - description: ! - Total cost acceptable by the client. This overrides server configuration. - The cost is measured in number of points in the geometry. For example, - the cost for a bounding box is 5. - required: false - type: integer - format: int32 - tags: - - Item - responses: - 200: - description: | - Return an array of items in PageableItems defined here or GeoJSON - FeatureCollection depending on format. - schema: - $ref: '#/definitions/PageableItems' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - /timeline: - get: - summary: Return timeline entries for the search result - description: | - This call returns timeline entries based on the search result - for the items. - operationId: getTimeLine - parameters: - - name: provider - in: query - description: Provider ID - required: true - type: string - - name: query - in: query - description: Query in ECQL - required: false - type: string - - name: boundingBox - in: query - description: | - A shorthand query for bounding box in the form of "w-lon,s-lat,e-lon,n-lat". - required: false - type: string - - name: time - in: query - description: | - A shorthand query for time period in the form of "begin,end" or "time". - The time must be in milliseconds from epoch - required: false - type: string - tags: - - Item - responses: - 200: - description: Return an array of timeline entries - schema: - type: array - items: - $ref: '#/definitions/TimeLine' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - - /providers: - get: - summary: Get provider list - description: | - This call returns a list of provisioned providers - operationId: getProviders - parameters: - - name: start - in: query - description: Start number of the record for pagination (0-based) - required: false - type: integer - format: int32 - - name: limit - in: query - description: Maximum number of records to return per page - required: false - type: integer - format: int32 - tags: - - Provider - responses: - 200: - description: Return an array of providers - schema: - type: array - items: - $ref: '#/definitions/PageableProviders' - 400: - description: Invalid request - schema: - $ref: '#/definitions/ErrorResponse' - 500: - description: Server error, retriable - schema: - $ref: '#/definitions/ErrorResponse' - -definitions: - - Group: - type: object - required: ["name", "geometry", "period"] - properties: - provider: - type: string - description: Provider ID - name: - type: string - description: An unique key to identify the group. - geometry: - $ref: '#/definitions/Geometry' - period: - $ref: '#/definitions/TimeRange' - subject: - type: string - description: Description of the group. - groupType: - $ref: '#/definitions/ItemType' - keywords: - type: string - description: a text-search field with tags/keywords - types: - type: array - items: - $ref: '#/definitions/AssetType' - description: Set of all asset types for all assets under this group - assetCount: - type: integer - format: int32 - description: Number of assets in this group - - Asset: - type: object - required: ["provider", "name", "geometry", "period", "url"] - properties: - provider: - type: string - description: Provider ID - name: - type: string - description: An unique name to identity the asset. - geometry: - $ref: '#/definitions/Geometry' - period: - $ref: '#/definitions/TimeRange' - url: - type: string - description: Location of the resource. - group: - type: string - description: | - Name of the parent group. If the group doesn't exist, an new group - will be created. - subject: - type: string - description: Description of the asset. - keywords: - type: array - items: - type: string - description: a text-search field with tags/keywords. - source: - type: object - description: Original metadata in its raw format, generally the fields here can't be indexed. - types: - type: array - items: - $ref: '#/definitions/AssetType' - description: Set of all product types in this asset. - channels: - type: integer - format: int32 - minimum: 0 - description: Number of channels. - bands: - type: object - description: Description of each band. - bitDepth: - type: integer - format: int32 - minimum: 0 - description: Max bit depth among all bands. - cloudCover: - type: integer - format: int32 - minimum: 0 - maximum: 100 - description: Cloud coverage in percentage (0-100) - classifications: - type: array - items: - type: integer - format: int32 - description: Set of classifications represented by integer - - GroupResponse: - type: object - required: - - id - - parentId - - name - properties: - id: - type: string - description: ID of the group (generated by system) - parentId: - type: string - description: ID of the parent group. If missing or empty, the parent is the root - name: - type: string - description: Name of the group. - groupExtent: - type: object - description: Footprint of all the assets under this group in GeoJSON - groupPeriod: - $ref: '#/definitions/TimeRange' - assetCount: - type: integer - format: int32 - description: Number of asserts under this group - totalCost: - type: integer - format: int32 - description: Total cost to display for all the children of this group. - - PageableResults: - type: object - required: ["count"] - properties: - count: - type: integer - format: int32 - description: | - Number of records returned. 0 if not found or start parameter is - beyond the total number of results. - total: - type: integer - format: int32 - description: Total number of records in the result set. - start: - type: integer - format: int32 - description: Start record number (0-based). - results: - type: array - items: - type: object - description: | - The object type is either GroupResponse or AsssetResponse - depending on the API. - - AssetResponse: - type: object - required: ["id"] - properties: - id: - type: string - description: ID of the asset - parents: - type: array - items: - type: string - description: List of IDs for parent groups - name: - type: string - description: Name of the assert. - geometry: - type: object - description: Geometry of the asset in GeoJSON - period: - $ref: '#/definitions/TimeRange' - - Item: - type: object - required: ["id"] - properties: - id: - type: string - description: ID of the item - name: - type: string - description: Name of the item. - itemType: - $ref: '#/definitions/ItemType' - geometry: - $ref: '#/definitions/Geometry' - period: - $ref: '#/definitions/TimeRange' - count: - type: integer - format: int32 - description: Number of assets under the item. - types: - type: array - items: - $ref: '#/definitions/AssetType' - description: Set of all product types in this item. - - PageableItems: - type: object - required: - - count - properties: - count: - type: integer - format: int32 - description: | - Number of records returned. 0 if not found or start parameter is - beyond the total number of results. - total: - type: integer - format: int32 - description: Total number of records in the result set. - start: - type: integer - format: int32 - description: Start record number (0-based). - results: - type: array - items: - $ref: '#/definitions/Item' - - - Provider: - type: object - required: ["id", "name"] - properties: - id: - type: string - description: ID of the provider - name: - type: string - description: Name of the provider - - PageableProviders: - type: object - required: - - count - properties: - count: - type: integer - format: int32 - description: | - Number of records returned. 0 if not found or start parameter is - beyond the total number of results. - total: - type: integer - format: int32 - description: Total number of records in the result set. - start: - type: integer - format: int32 - description: Start record number (0-based). - results: - type: array - items: - $ref: '#/definitions/Provider' - - ErrorResponse: - type: object - properties: - code: - type: string - description: An error code - enum: - - NOT_FOUND - - LOCKING_ERROR - - DB_ERROR - - NOT_SUPPORTED - - INDEX_ERROR - - DUP_KEY - - INVALID_REQ - - MISSING_FIELDS - - INVALID_VALUE - - CONFIG_ERROR - - ERROR - message: - type: string - description: A localized message that can be displayed in UI - fields: - type: object - description: A map for field specific errors so UI can highlight fields with errors - - AssetType: - type: string - enum: - - image - - lidar - - opir - - metadataShape - - ItemType: - type: string - enum: - - asset - - pgroup - - vgroup - - TimeRange: - type: object - description: Time period with begin and end time - properties: - begin: - type: integer - format: int64 - description: Start time of the period (inclusive) in milliseconds since epoch - end: - type: integer - format: int64 - description: The end time of the period (inclusive) in milliseconds since epoch - - TimeLine: - type: object - description: A entry in time-line view - properties: - date: - type: string - description: Date in string format "yyyy-MM-dd" - count: - type: integer - format: int32 - description: Number of assets whose time matches this date. - -# GeoJSON definitions - - Geometry: - type: object - description: GeoJSon geometry - discriminator: type - required: - - type - externalDocs: - url: http://geojson.org/geojson-spec.html#geometry-objects - properties: - type: - type: string - enum: - - Point - - LineString - - Polygon - - MultiPoint - - MultiLineString - - MultiPolygon - description: the geometry type - - Feature: - type: object - description: GeoJSON Feature - required: - - type - properties: - type: - type: string - enum: - - Feature - geometry: - $ref: "#/definitions/Geometry" - properties: - type: object - - FeatureCollection: - type: object - description: GeoJSON FeatureCollection - required: - - type - properties: - type: - type: string - enum: - - FeatureCollection - features: - type: array - items: - $ref: "#/definitions/Feature" - properties: - type: object - properties: - count: - type: integer - format: int32 - description: Number of features returned - start: - type: integer - format: int32 - description: Start number of feature for pagination - total: - type: integer - format: int32 - description: Total number of features matching query diff --git a/non-standard-implementations/planet/old-catalog/overview.md b/non-standard-implementations/planet/old-catalog/overview.md deleted file mode 100644 index 2a501c9a2..000000000 --- a/non-standard-implementations/planet/old-catalog/overview.md +++ /dev/null @@ -1,16 +0,0 @@ -## Introduction - -This is the Catalog API that was the catalog before the current Data API. It is similar to the Data API, but has some -nice features that didn't yet get included in the Data API. One of those is that it is more self-describing. The 'catalog v1' -swagger spec lays out the core constructs and end points. But then each catalog has a /spec call that returns a catalog specific -swagger document. In this it fully describes the metadata that can be queried, so a client (like GDAL) can know what is on offer. -An example instance is in this folder, [v1-catalog-grid-utm-25km-experimental.yaml](v1-catalog-grid-utm-25km-experimental.yaml) - -The catalog instance also shows a nice GET interface for querying the catalog, instead of having to rely on posting json for -a search. The other bit that is nice in Catalog API that is not in Data V1 is that you can go to a catalogs /items/ and actually -see the latest items listed it out, so it links all the way down to the individual items and thus is a bit more crawlable. - -## Background - -See the overall [Planet overview](../overview.md) for more context on this. - diff --git a/non-standard-implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml b/non-standard-implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml deleted file mode 100644 index e6b9c045c..000000000 --- a/non-standard-implementations/planet/old-catalog/v1-catalog-grid-utm-25km-experimental.yaml +++ /dev/null @@ -1,1086 +0,0 @@ -basePath: /v1 -consumes: -- application/json -definitions: - APIError: - description: An APIError communicates both general and field-specific errors. - General errors include issues with core API usage as well as conflicts that - involve more than one field. Field-specific errors correspond to an individual - query parameter or request body attribute. Errors referencing nested fields - will be dot-delimited (e.g. user.groups.0.name). - properties: - field: - additionalProperties: - $ref: '#/definitions/Errors' - type: object - general: - $ref: '#/definitions/Errors' - required: - - general - - field - type: object - AndFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - items: - $ref: '#/definitions/Filter' - type: array - required: - - config - type: object - Asset: - properties: - _links: - $ref: '#/definitions/SelfLink' - _permissions: - items: - enum: - - download - type: string - type: array - uniqueItems: true - files: - additionalProperties: - $ref: '#/definitions/AssetFile' - description: Various AssetFiles indicating how a user may download the image - data associated with this Asset. The keys of this object reflect the type - of each available AssetFile. - type: object - type: - description: Type identifier of this Asset. - type: string - required: - - type - - files - - _links - - _permissions - type: object - AssetFile: - description: An AssetFile describes the means of downloading the image data associated - with a specific Asset - properties: - _links: - properties: - activate: - description: If present, RFC 3986 URI indicating where an authenticated - user may trigger activation of this AssetFile via a POST request. A - 202 response indicates the activation request has been accepted. A 204 - response indicates the AssetFile is already active. After successful - activation, this AssetFile will have a non-empty location. - type: string - type: object - expires_at: - description: If present, RFC 3339 timestamp indicating when this AssetFile - will become inactive and will require reactivation. - format: date-time - type: string - location: - description: If present, RFC 3986 URI that indicates a location that will - yield image data. Consult the documentation of the AssetFile type to understand - how to use this URI. - type: string - status: - description: Current status of the AssetFile. "inactive" indicates that the - AssetFile is not currently available for download, but may be after activation. - "activating" indicates the AssetFile is currently undergoing activation, - and may be available for download shortly. "active" indicates the AssetFile - has been activated, and may currently be available for download if the authentication - context permits. - enum: - - inactive - - activating - - active - type: string - type: - description: An identifier of the methodology that must be used to download - the image data from the indicated location. In the case of "http", the user - must make an HTTP GET request against the provided URL. - enum: - - http - type: string - required: - - type - - status - - _links - type: object - Catalog: - properties: - _links: - $ref: '#/definitions/CatalogLinks' - display_description: - description: Human-readable description of this Catalog. - type: string - display_name: - description: Human-readable name of this Catalog. - type: string - id: - description: Identifier of this Catalog. - pattern: ^[a-z\-_]+$ - type: string - item_count: - description: Total number of Items available within this Catalog. - format: int64 - type: integer - required: - - id - - item_count - - _links - type: object - CatalogLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - items: - description: RFC 3986 URI representing the location of the Items contained - within this Catalog. - type: string - spec: - description: RFC 3986 URI representing the location of the Swagger spec - specific to this Catalog. - type: string - required: - - items - - spec - type: object - CatalogSpec: - description: Swagger spec rendered for a specific Catalog to include extra Item - properties and query parameters defined by that Catalog. - type: string - CoreItemProperties: - description: These properties are shared amongst all Items in across all Catalogs. - properties: - published: - description: The RFC 3339 timestamp at which this Item was added to the Catalog. - format: date-time - type: string - required: - - published - type: object - CreateQuickSearch: - properties: - filter: - $ref: '#/definitions/Filter' - name: - description: The name of this saved search. - pattern: ^.{1,64}$ - type: string - required: - - filter - type: object - CreateSearch: - properties: - filter: - $ref: '#/definitions/Filter' - name: - description: The name of this saved search. - pattern: ^.{1,64}$ - type: string - required: - - name - - filter - type: object - CursorPageLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - _first: - description: RFC 3986 URI representing the location of the first page of - results. - type: string - _next: - description: RFC 3986 URI representing the location of the next page of - results. Omitted when there are no results, or the current page is the - last. - type: string - type: object - DateRangeFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - properties: - gt: - format: date-time - type: string - gte: - format: date-time - type: string - lt: - format: date-time - type: string - lte: - format: date-time - type: string - type: object - required: - - config - type: object - Error: - properties: - message: - description: A descriptive error message. - type: string - type: object - Errors: - items: - $ref: '#/definitions/Error' - type: array - ExtraItemProperties: - properties: - catalog::acquired: - description: The RFC 3339 acquisition time of underlying image. - format: date-time - type: string - catalog::black_fill: - description: Ratio of image containing artificial black fill due to clipping - to actual data. - format: float - maximum: 1.0 - minimum: 0.0 - type: number - catalog::cloud_cover: - description: Ratio of the image covered by clouds to that which is uncovered. - format: float - maximum: 1.0 - minimum: 0.0 - type: number - catalog::grid_cell: - description: The grid cell identifier of the gridded Item. - type: string - catalog::provider: - description: Name of the imagery provider. - enum: - - planetscope - - rapideye - type: string - catalog::resolution: - description: Pixel resolution of the Item image(s) in meters. - format: float - minimum: 0.0 - type: number - catalog::satellite_id: - description: Globally unique identifier of the satellite that acquired the - underlying image. - type: string - catalog::strip_id: - description: Identifier of the Item's parent strip. - type: string - catalog::sun_azimuth: - description: Angle from the True North to the Sun Vector projected on the - horizontal plane in degrees. - format: float - maximum: 360.0 - minimum: 0.0 - type: number - catalog::sun_elevation: - description: Elevation angle of the sun in degrees. - format: float - maximum: 90.0 - minimum: 0.0 - type: number - catalog::usable_data: - description: Ratio of the usable to unusable portion of the image due to cloud - cover or black fill. - format: float - maximum: 1.0 - minimum: 0.0 - type: number - catalog::view_angle: - description: Spacecraft across-track off-nadir viewing angle used for imaging, - in degrees with "+" being East and "-" being West. - format: float - maximum: 25.0 - minimum: -25.0 - type: number - required: - - catalog::acquired - - catalog::black_fill - - catalog::cloud_cover - - catalog::grid_cell - - catalog::provider - - catalog::resolution - - catalog::satellite_id - - catalog::strip_id - - catalog::sun_azimuth - - catalog::sun_elevation - - catalog::usable_data - - catalog::view_angle - type: object - FieldFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - field_name: - type: string - required: - - field_name - type: object - Filter: - discriminator: type - properties: - type: - type: string - required: - - type - type: object - GeoJSONFeature: - description: A GeoJSON feature object - properties: - geometry: - $ref: '#/definitions/GeoJSONGeometry' - properties: - type: object - required: - - properties - - geometry - title: Feature - GeoJSONFeatureCollection: - description: A GeoJSON feature collection - properties: - features: - items: - $ref: '#/definitions/GeoJSONFeature' - type: array - required: - - features - title: FeatureCollection - GeoJSONGeometry: - description: One geometry as defined by GeoJSON - discriminator: type - properties: - type: - type: string - required: - - type - type: object - GeometryFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - $ref: '#/definitions/GeoJSONGeometry' - field_name: - enum: - - geometry - type: string - required: - - config - - field_name - type: object - Item: - allOf: - - $ref: '#/definitions/GeoJSONFeature' - - properties: - _links: - $ref: '#/definitions/ItemLinks' - id: - description: Identifier of this Item. - type: string - properties: - $ref: '#/definitions/ItemProperties' - required: - - id - - properties - - _links - type: object - type: object - ItemLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - assets: - description: RFC 3986 URI representing the canonical location of the Assets - subcollection. - type: string - required: - - assets - type: object - ItemPage: - allOf: - - $ref: '#/definitions/GeoJSONFeatureCollection' - - properties: - _links: - $ref: '#/definitions/PageLinks' - features: - items: - $ref: '#/definitions/Item' - type: array - required: - - features - - _links - type: object - type: object - ItemProperties: - allOf: - - $ref: '#/definitions/CoreItemProperties' - - $ref: '#/definitions/ExtraItemProperties' - LineString: - properties: - coordinates: - allOf: - - $ref: '#/definitions/PositionArray' - - minItems: 2 - required: - - coordinates - LinearRing: - allOf: - - $ref: '#/definitions/PositionArray' - - minItems: 4 - description: An array of four positions where the first equals the last - MultiLineString: - properties: - coordinates: - items: - allOf: - - $ref: '#/definitions/PositionArray' - - minItems: 2 - type: array - required: - - coordinates - MultiPoint: - properties: - coordinates: - $ref: '#/definitions/PositionArray' - required: - - coordinates - MultiPolygon: - properties: - coordinates: - items: - items: - $ref: '#/definitions/LinearRing' - type: array - type: array - required: - - coordinates - NotFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - $ref: '#/definitions/Filter' - required: - - config - type: object - NumberInFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - items: - format: int64 - type: number - type: array - required: - - config - type: object - OrFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - items: - $ref: '#/definitions/Filter' - type: array - required: - - config - type: object - PageLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - _first: - description: RFC 3986 URI representing the location of the first page of - results. - type: string - _next: - description: RFC 3986 URI representing the location of the next page of - results. Omitted when there are no results, or the current page is the - last. - type: string - _prev: - description: RFC 3986 URI representing the location of the previous page - of results. Omitted from first page of results. - type: string - type: object - PermissionFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - items: - enum: - - assets:download - - assets.visual:download - - assets.analytic:download - - assets.analytic_dn:download - - assets.visual_xml:download - - assets.analytic_xml:download - - assets.udm:download - type: string - type: array - required: - - config - type: object - Point: - properties: - coordinates: - $ref: '#/definitions/Position' - required: - - coordinates - Polygon: - properties: - coordinates: - items: - $ref: '#/definitions/LinearRing' - type: array - required: - - coordinates - Position: - description: A single position - items: - type: number - maxItems: 2 - minItems: 2 - type: array - PositionArray: - description: An array of two or more positions - items: - $ref: '#/definitions/Position' - type: array - RangeFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - properties: - gt: - format: double - type: number - gte: - format: double - type: number - lt: - format: double - type: number - lte: - format: double - type: number - type: object - required: - - config - type: object - Search: - properties: - created: - format: date-time - type: string - filter: - $ref: '#/definitions/Filter' - id: - pattern: ^.{32}$ - type: string - last_executed: - format: date-time - type: string - name: - description: The name of this saved search. - pattern: ^.{1,64}$ - type: string - updated: - format: date-time - type: string - required: - - filter - - name - - created - - updated - - last_executed - - id - type: object - SearchPage: - properties: - _links: - allOf: - - $ref: '#/definitions/SelfLink' - - $ref: '#/definitions/PageLinks' - searches: - description: A list of searches - items: - $ref: '#/definitions/Search' - type: array - required: - - _links - - searches - type: object - SelfLink: - properties: - _self: - description: RFC 3986 URI representing the canonical location of this object. - type: string - required: - - _self - type: object - StringInFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - items: - type: string - type: array - required: - - config - type: object -host: api.planet.com -info: - description: The Planet Data API serves all Planet Labs imagery to public clients. - This is the general spec that governs the common API objects and operations. Each - Catalog defines some additional functionality, which is communicated via a spec - available on each Catalog object. - title: Planet Data API - version: 1.0.0 -parameters: - pAssetFileType: - description: AssetFile type. - in: path - name: AssetFileType - required: true - type: string - pAssetTypeID: - description: AssetType identifier. - in: path - name: AssetTypeID - required: true - type: string - pItemID: - description: Item identifier. - in: path - name: ItemID - required: true - type: string - pSearchID: - description: ID of the saved search - in: path - name: SearchID - required: true - type: string - qAcquired: - description: The RFC 3339 acquired date-time or date-time range. E.g. `2015-05-05T00:00:00Z` - or `[2015-01-01T00:00:00Z:]` representing a range with no upper bound. - in: query - name: catalog::acquired - pattern: ^\[(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))?:(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))?\]|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))$ - type: string - qBlackFill: - description: The black fill ratio of the image. E.g. `[0:0.005]`. - in: query - name: catalog::black_fill - pattern: ^(0|1)?(\.\d*)?|\[((0|1)?(\.\d*)?)?:((0|1)?(\.\d*)?)?\]$ - type: string - qCloudCover: - description: The cloud cover ratio of the image. E.g. `[0:0.001]`. - in: query - name: catalog::cloud_cover - pattern: ^(0|1)?(\.\d*)?|\[((0|1)?(\.\d*)?)?:((0|1)?(\.\d*)?)?\]$ - type: string - qGeometry: - description: The JSON-encoded GeoJSON Geometry for an intersection query, or Well-Known - Text (WKT). - in: query - name: geometry - type: string - qGridCell: - description: The grid cell identifier of the gridded item. - in: query - name: catalog::grid_cell - type: string - qItemSort: - default: published desc - description: Order the results by the provided field, in a specific direction. - This may not be provided alongside the "_page" parameter. - enum: - - catalog::acquired desc - - catalog::acquired asc - - published desc - - published asc - in: query - name: _sort - type: string - qPage: - description: Token representing a specific page of results. This should never - be constructed manually. - in: query - name: _page - type: string - qPageSize: - default: 250 - description: Return at most this number of results. This may only be used at the - start of pagination. This may not be provided along side the "_page" parameter. - format: int64 - in: query - maximum: 250 - minimum: 0 - name: _page_size - type: integer - qProvider: - description: Limit returned items to those from a specific imagery provider. - enum: - - planetscope - - rapideye - in: query - name: catalog::provider - type: string - qPublished: - description: The RFC 3339 published date-time or date-time range. E.g. `2015-05-05T00:00:00Z` - or `[2015-01-01T00:00:00Z:]` representing a range with no upper bound. - in: query - name: published - pattern: ^\[(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))?:(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))?\]|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))$ - type: string - qResolution: - description: The resolution of the image in meters per pixel. E.g. `5.0` or `[3.3:4.9]`. - in: query - name: catalog::resolution - pattern: ^\-?\d{0,3}(\.\d*)?|\[(\-?\d{0,3}(\.\d*)?)?:(\-?\d{0,3}(\.\d*)?)?\]$ - type: string - qSatelliteID: - description: The satellite id or list of satellite ids. - in: query - name: catalog::satellite_id - type: string - qSearchResultSort: - default: published desc - description: Order the results by the provided field, in a specific direction. - This may not be provided alongside the "_page" parameter. - enum: - - published asc - - published desc - in: query - name: _sort - type: string - qSearchSort: - default: created desc - description: Order the results by the provided field, in a specific direction. - This may not be provided alongside the "_page" parameter. - enum: - - created desc - - created asc - in: query - name: _sort - type: string - qSearchType: - default: any - description: Type of searches to list. - enum: - - any - - saved - - quick - in: query - name: search_type - type: string - qStripID: - description: Identifier of the Item's parent strip. - in: query - name: catalog::strip_id - type: string - qSunAzimuth: - description: The view angle from nadir in degrees. E.g. `35.0` or `[0:360.0]`. - in: query - name: catalog::sun_azimuth - pattern: ^\-?\d{0,3}(\.\d*)?|\[(\-?\d{0,3}(\.\d*)?)?:(\-?\d{0,3}(\.\d*)?)?\]$ - type: string - qSunElevation: - description: Elevation angle of the sun in degrees. E.g. `35.0` or `[0:90.0]`. - in: query - name: catalog::sun_elevation - pattern: ^\-?\d{0,3}(\.\d*)?|\[(\-?\d{0,3}(\.\d*)?)?:(\-?\d{0,3}(\.\d*)?)?\]$ - type: string - qUsableData: - description: The usable data ratio of the image. E.g. `[0.96:1.0]`. - in: query - name: catalog::usable_data - pattern: ^(0|1)?(\.\d*)?|\[((0|1)?(\.\d*)?)?:((0|1)?(\.\d*)?)?\]$ - type: string - qViewAngle: - description: Spacecraft across-track off-nadir viewing angle used for imaging, - in degrees with "+" being East and "-" being West. E.g. `20.0` or `[-15.0:22.0]`. - in: query - name: catalog::view_angle - pattern: ^\-?\d{0,3}(\.\d*)?|\[(\-?\d{0,3}(\.\d*)?)?:(\-?\d{0,3}(\.\d*)?)?\]$ - type: string -paths: - /catalogs/grid-utm-25km-experimental: - get: - description: Fetch a specific Catalog identified by CatalogID. - operationId: GetCatalog - parameters: [] - responses: - '200': - description: '' - schema: - $ref: '#/definitions/Catalog' - tags: - - catalog - /catalogs/grid-utm-25km-experimental/items/: - get: - description: List all items available in a Catalog identified by CatalogID. - operationId: ListItems - parameters: - - $ref: '#/parameters/qAcquired' - - $ref: '#/parameters/qProvider' - - $ref: '#/parameters/qBlackFill' - - $ref: '#/parameters/qCloudCover' - - $ref: '#/parameters/qGridCell' - - $ref: '#/parameters/qResolution' - - $ref: '#/parameters/qSatelliteID' - - $ref: '#/parameters/qStripID' - - $ref: '#/parameters/qSunAzimuth' - - $ref: '#/parameters/qSunElevation' - - $ref: '#/parameters/qUsableData' - - $ref: '#/parameters/qViewAngle' - - description: Limit the results to those where the user has a certain permission. - in: query - name: _permissions - pattern: ^assets(\.[a-z\-_]+)?:download$ - type: string - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qItemSort' - - $ref: '#/parameters/qPublished' - - $ref: '#/parameters/qGeometry' - responses: - '200': - description: '' - schema: - $ref: '#/definitions/ItemPage' - '400': - description: There was an error with the request. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/grid-utm-25km-experimental/items/{ItemID}: - get: - description: Fetch the metadata associated with a specific Item identified by - ItemID in the "grid-utm-25km-experimental" Catalog. - operationId: GetItem - parameters: - - $ref: '#/parameters/pItemID' - responses: - '200': - description: Metadata specific to this Item. - schema: - $ref: '#/definitions/Item' - '404': - description: The specified ItemID does not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/grid-utm-25km-experimental/items/{ItemID}/assets/: - get: - description: List all available Assets belonging to an Item identified by ItemID - and CatalogID. - operationId: ListAssets - parameters: - - $ref: '#/parameters/pItemID' - - description: Limit the results to those where the user has a certain permission. - enum: - - download - in: query - name: _permissions - type: string - responses: - '200': - description: The list of available Assets. - schema: - additionalProperties: - $ref: '#/definitions/Asset' - type: object - '404': - description: The specified ItemID or CatalogID do not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/grid-utm-25km-experimental/items/{ItemID}/assets/{AssetTypeID}: - get: - description: Fetch a single Asset identified by AssetTypeID, ItemID and CatalogID. - operationId: GetAsset - parameters: - - $ref: '#/parameters/pItemID' - - $ref: '#/parameters/pAssetTypeID' - responses: - '200': - description: A successful Asset response. - schema: - $ref: '#/definitions/Asset' - '404': - description: The specified AssetTypeID, ItemID or CatalogID do not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/grid-utm-25km-experimental/quick-search: - post: - description: Executes a structured search immediately without having to first - save it. - operationId: QuickSearch - parameters: - - description: The structured search to execute. We automatically generate a - name and identifier for this search and redirec to it's results. Quick searches - may be cleaned periodically. - in: body - name: search - required: true - schema: - $ref: '#/definitions/CreateQuickSearch' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qSearchResultSort' - responses: - '200': - description: A page of search results. - schema: - $ref: '#/definitions/ItemPage' - '400': - description: There was an error executing the search or with your search - syntax. - schema: - $ref: '#/definitions/APIError' - tags: - - search - /catalogs/grid-utm-25km-experimental/searches/: - get: - description: List saved searches available to the current user. - operationId: ListSearches - parameters: - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qSearchSort' - - $ref: '#/parameters/qSearchType' - responses: - '200': - description: A paginated listing of your available searches. - schema: - $ref: '#/definitions/SearchPage' - tags: - - search - post: - description: Create a new search. - operationId: CreateSearch - parameters: - - description: The search to save. - in: body - name: search - required: true - schema: - $ref: '#/definitions/CreateSearch' - responses: - '201': - description: The saved search just created. - headers: - Location: - description: A URL for the newly created saved search. - type: string - schema: - $ref: '#/definitions/Search' - '400': - description: There was an error creating your saved search. - schema: - $ref: '#/definitions/APIError' - tags: - - search - /catalogs/grid-utm-25km-experimental/searches/{SearchID}: - delete: - description: Deletes an individual saved search. - operationId: SearchDelete - parameters: - - $ref: '#/parameters/pSearchID' - responses: - '204': - description: Successful deletion. - '404': - description: The specified SearchID does not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - search - get: - description: Shows an individual saved search. - operationId: SearchDetail - parameters: - - $ref: '#/parameters/pSearchID' - responses: - '200': - description: A successful Search response. - schema: - $ref: '#/definitions/Search' - '404': - description: The specified SearchID does not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - search - put: - description: Updates an existing saved search. - operationId: SearchUpdate - parameters: - - $ref: '#/parameters/pSearchID' - - description: The search to save. - in: body - name: search - required: true - schema: - $ref: '#/definitions/CreateSearch' - responses: - '200': - description: The saved search just updated. - schema: - $ref: '#/definitions/Search' - '400': - description: There was an error updating the chosen saved search. - schema: - $ref: '#/definitions/APIError' - tags: - - search - /catalogs/grid-utm-25km-experimental/searches/{SearchID}/results: - get: - description: Executes a saved search and returns results. - operationId: SearchResults - parameters: - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qSearchResultSort' - - $ref: '#/parameters/pSearchID' - responses: - '200': - description: The successfully executed search results. - schema: - $ref: '#/definitions/ItemPage' - tags: - - search - /catalogs/grid-utm-25km-experimental/spec: - get: - description: Fetch the Swagger spec for the Catalog identified by CatalogID. - operationId: GetCatalogSpec - parameters: [] - responses: - '200': - description: '' - schema: - $ref: '#/definitions/CatalogSpec' - tags: - - catalog -produces: -- application/json -schemes: -- https -security: -- basic: [] -securityDefinitions: - basic: - type: basic -swagger: '2.0' diff --git a/non-standard-implementations/planet/old-catalog/v1-catalog.yaml b/non-standard-implementations/planet/old-catalog/v1-catalog.yaml deleted file mode 100644 index 9c250e982..000000000 --- a/non-standard-implementations/planet/old-catalog/v1-catalog.yaml +++ /dev/null @@ -1,958 +0,0 @@ -basePath: /v1 -consumes: -- application/json -definitions: - APIError: - description: An APIError communicates both general and field-specific errors. - General errors include issues with core API usage as well as conflicts that - involve more than one field. Field-specific errors correspond to an individual - query parameter or request body attribute. Errors referencing nested fields - will be dot-delimited (e.g. user.groups.0.name). - properties: - field: - additionalProperties: - $ref: '#/definitions/Errors' - type: object - general: - $ref: '#/definitions/Errors' - required: - - general - - field - type: object - AndFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - items: - $ref: '#/definitions/Filter' - type: array - required: - - config - type: object - Asset: - properties: - _links: - $ref: '#/definitions/SelfLink' - _permissions: - items: - enum: - - download - type: string - type: array - uniqueItems: true - files: - additionalProperties: - $ref: '#/definitions/AssetFile' - description: Various AssetFiles indicating how a user may download the image - data associated with this Asset. The keys of this object reflect the type - of each available AssetFile. - type: object - type: - description: Type identifier of this Asset. - type: string - required: - - type - - files - - _links - - _permissions - type: object - AssetFile: - description: An AssetFile describes the means of downloading the image data associated - with a specific Asset - properties: - _links: - properties: - activate: - description: If present, RFC 3986 URI indicating where an authenticated - user may trigger activation of this AssetFile via a POST request. A - 202 response indicates the activation request has been accepted. A 204 - response indicates the AssetFile is already active. After successful - activation, this AssetFile will have a non-empty location. - type: string - type: object - expires_at: - description: If present, RFC 3339 timestamp indicating when this AssetFile - will become inactive and will require reactivation. - format: date-time - type: string - location: - description: If present, RFC 3986 URI that indicates a location that will - yield image data. Consult the documentation of the AssetFile type to understand - how to use this URI. - type: string - status: - description: Current status of the AssetFile. "inactive" indicates that the - AssetFile is not currently available for download, but may be after activation. - "activating" indicates the AssetFile is currently undergoing activation, - and may be available for download shortly. "active" indicates the AssetFile - has been activated, and may currently be available for download if the authentication - context permits. - enum: - - inactive - - activating - - active - type: string - type: - description: An identifier of the methodology that must be used to download - the image data from the indicated location. In the case of "http", the user - must make an HTTP GET request against the provided URL. - enum: - - http - type: string - required: - - type - - status - - _links - type: object - Catalog: - properties: - _links: - $ref: '#/definitions/CatalogLinks' - display_description: - description: Human-readable description of this Catalog. - type: string - display_name: - description: Human-readable name of this Catalog. - type: string - id: - description: Identifier of this Catalog. - pattern: ^[a-z\-_]+$ - type: string - item_count: - description: Total number of Items available within this Catalog. - format: int64 - type: integer - required: - - id - - item_count - - _links - type: object - CatalogLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - items: - description: RFC 3986 URI representing the location of the Items contained - within this Catalog. - type: string - spec: - description: RFC 3986 URI representing the location of the Swagger spec - specific to this Catalog. - type: string - required: - - items - - spec - type: object - CatalogPage: - properties: - _links: - $ref: '#/definitions/PageLinks' - catalogs: - items: - $ref: '#/definitions/Catalog' - type: array - required: - - catalogs - - _links - type: object - CatalogSpec: - description: Swagger spec rendered for a specific Catalog to include extra Item - properties and query parameters defined by that Catalog. - type: string - CoreItemProperties: - description: These properties are shared amongst all Items in across all Catalogs. - properties: - published: - description: The RFC 3339 timestamp at which this Item was added to the Catalog. - format: date-time - type: string - required: - - published - type: object - CreateQuickSearch: - properties: - filter: - $ref: '#/definitions/Filter' - name: - description: The name of this saved search. - pattern: ^.{1,64}$ - type: string - required: - - filter - type: object - CreateSearch: - properties: - filter: - $ref: '#/definitions/Filter' - name: - description: The name of this saved search. - pattern: ^.{1,64}$ - type: string - required: - - name - - filter - type: object - CursorPageLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - _first: - description: RFC 3986 URI representing the location of the first page of - results. - type: string - _next: - description: RFC 3986 URI representing the location of the next page of - results. Omitted when there are no results, or the current page is the - last. - type: string - type: object - DateRangeFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - properties: - gt: - format: date-time - type: string - gte: - format: date-time - type: string - lt: - format: date-time - type: string - lte: - format: date-time - type: string - type: object - required: - - config - type: object - Error: - properties: - message: - description: A descriptive error message. - type: string - type: object - Errors: - items: - $ref: '#/definitions/Error' - type: array - FieldFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - field_name: - type: string - required: - - field_name - type: object - Filter: - discriminator: type - properties: - type: - type: string - required: - - type - type: object - GeoJSONFeature: - description: A GeoJSON feature object - properties: - geometry: - $ref: '#/definitions/GeoJSONGeometry' - properties: - type: object - required: - - properties - - geometry - title: Feature - GeoJSONFeatureCollection: - description: A GeoJSON feature collection - properties: - features: - items: - $ref: '#/definitions/GeoJSONFeature' - type: array - required: - - features - title: FeatureCollection - GeoJSONGeometry: - description: One geometry as defined by GeoJSON - discriminator: type - properties: - type: - type: string - required: - - type - type: object - GeometryFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - $ref: '#/definitions/GeoJSONGeometry' - field_name: - enum: - - geometry - type: string - required: - - config - - field_name - type: object - Item: - allOf: - - $ref: '#/definitions/GeoJSONFeature' - - properties: - _links: - $ref: '#/definitions/ItemLinks' - id: - description: Identifier of this Item. - type: string - properties: - $ref: '#/definitions/ItemProperties' - required: - - id - - properties - - _links - type: object - type: object - ItemLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - assets: - description: RFC 3986 URI representing the canonical location of the Assets - subcollection. - type: string - required: - - assets - type: object - ItemPage: - allOf: - - $ref: '#/definitions/GeoJSONFeatureCollection' - - properties: - _links: - $ref: '#/definitions/PageLinks' - features: - items: - $ref: '#/definitions/Item' - type: array - required: - - features - - _links - type: object - type: object - ItemProperties: - allOf: - - $ref: '#/definitions/CoreItemProperties' - type: object - LineString: - properties: - coordinates: - allOf: - - $ref: '#/definitions/PositionArray' - - minItems: 2 - required: - - coordinates - LinearRing: - allOf: - - $ref: '#/definitions/PositionArray' - - minItems: 4 - description: An array of four positions where the first equals the last - MultiLineString: - properties: - coordinates: - items: - allOf: - - $ref: '#/definitions/PositionArray' - - minItems: 2 - type: array - required: - - coordinates - MultiPoint: - properties: - coordinates: - $ref: '#/definitions/PositionArray' - required: - - coordinates - MultiPolygon: - properties: - coordinates: - items: - items: - $ref: '#/definitions/LinearRing' - type: array - type: array - required: - - coordinates - NotFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - $ref: '#/definitions/Filter' - required: - - config - type: object - NumberInFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - items: - format: int64 - type: number - type: array - required: - - config - type: object - OrFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - items: - $ref: '#/definitions/Filter' - type: array - required: - - config - type: object - PageLinks: - allOf: - - $ref: '#/definitions/SelfLink' - - properties: - _first: - description: RFC 3986 URI representing the location of the first page of - results. - type: string - _next: - description: RFC 3986 URI representing the location of the next page of - results. Omitted when there are no results, or the current page is the - last. - type: string - _prev: - description: RFC 3986 URI representing the location of the previous page - of results. Omitted from first page of results. - type: string - type: object - PermissionFilter: - allOf: - - $ref: '#/definitions/Filter' - - properties: - config: - items: - enum: - - assets:download - - assets.visual:download - - assets.analytic:download - - assets.analytic_dn:download - - assets.visual_xml:download - - assets.analytic_xml:download - - assets.udm:download - type: string - type: array - required: - - config - type: object - Point: - properties: - coordinates: - $ref: '#/definitions/Position' - required: - - coordinates - Polygon: - properties: - coordinates: - items: - $ref: '#/definitions/LinearRing' - type: array - required: - - coordinates - Position: - description: A single position - items: - type: number - maxItems: 2 - minItems: 2 - type: array - PositionArray: - description: An array of two or more positions - items: - $ref: '#/definitions/Position' - type: array - RangeFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - properties: - gt: - format: double - type: number - gte: - format: double - type: number - lt: - format: double - type: number - lte: - format: double - type: number - type: object - required: - - config - type: object - Search: - properties: - created: - format: date-time - type: string - filter: - $ref: '#/definitions/Filter' - id: - pattern: ^.{32}$ - type: string - last_executed: - format: date-time - type: string - name: - description: The name of this saved search. - pattern: ^.{1,64}$ - type: string - updated: - format: date-time - type: string - required: - - filter - - name - - created - - updated - - last_executed - - id - type: object - SearchPage: - properties: - _links: - allOf: - - $ref: '#/definitions/SelfLink' - - $ref: '#/definitions/PageLinks' - searches: - description: A list of searches - items: - $ref: '#/definitions/Search' - type: array - required: - - _links - - searches - type: object - SelfLink: - properties: - _self: - description: RFC 3986 URI representing the canonical location of this object. - type: string - required: - - _self - type: object - StringInFilter: - allOf: - - $ref: '#/definitions/FieldFilter' - - properties: - config: - items: - type: string - type: array - required: - - config - type: object -host: api.planet.com -info: - description: The Planet Data API serves all Planet Labs imagery to public clients. - This is the general spec that governs the common API objects and operations. Each - Catalog defines some additional functionality, which is communicated via a spec - available on each Catalog object. - title: Planet Data API - version: 1.0.0 -parameters: - pAssetFileType: - description: AssetFile type. - in: path - name: AssetFileType - required: true - type: string - pAssetTypeID: - description: AssetType identifier. - in: path - name: AssetTypeID - required: true - type: string - pCatalogID: - description: ID of Catalog - format: ^[a-z\-]+$ - in: path - name: CatalogID - required: true - type: string - pItemID: - description: Item identifier. - in: path - name: ItemID - required: true - type: string - pSearchID: - description: ID of the saved search - in: path - name: SearchID - required: true - type: string - qGeometry: - description: The JSON-encoded GeoJSON Geometry for an intersection query, or Well-Known - Text (WKT). - in: query - name: geometry - type: string - qItemSort: - default: published desc - description: Order the results by the provided field, in a specific direction. - This may not be provided alongside the "_page" parameter. - enum: - - published desc - - published asc - in: query - name: _sort - type: string - qPage: - description: Token representing a specific page of results. This should never - be constructed manually. - in: query - name: _page - type: string - qPageSize: - default: 250 - description: Return at most this number of results. This may only be used at the - start of pagination. This may not be provided along side the "_page" parameter. - format: int64 - in: query - maximum: 250 - minimum: 0 - name: _page_size - type: integer - qPublished: - description: The RFC 3339 published date-time or date-time range. E.g. `2015-05-05T00:00:00Z` - or `[2015-01-01T00:00:00Z:]` representing a range with no upper bound. - in: query - name: published - pattern: ^\[(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))?:(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))?\]|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{0,12})?(?:[+-][0-2]\d:[0-5]\d|Z))$ - type: string - qSearchResultSort: - default: published desc - description: Order the results by the provided field, in a specific direction. - This may not be provided alongside the "_page" parameter. - enum: - - published asc - - published desc - in: query - name: _sort - type: string - qSearchSort: - default: created desc - description: Order the results by the provided field, in a specific direction. - This may not be provided alongside the "_page" parameter. - enum: - - created desc - - created asc - in: query - name: _sort - type: string - qSearchType: - default: any - description: Type of searches to list. - enum: - - any - - saved - - quick - in: query - name: search_type - type: string -paths: - /catalogs/: - get: - description: List all Catalogs available to the authenticated user. - operationId: ListCatalogs - parameters: - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - responses: - '200': - description: A list of Catalogs is returned. - schema: - $ref: '#/definitions/CatalogPage' - tags: - - catalog - /catalogs/grid-utm-25km-experimental/quick-search: - post: - description: Executes a structured search immediately without having to first - save it. - operationId: QuickSearch - parameters: - - description: The structured search to execute. We automatically generate a - name and identifier for this search and redirec to it's results. Quick searches - may be cleaned periodically. - in: body - name: search - required: true - schema: - $ref: '#/definitions/CreateQuickSearch' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qSearchResultSort' - responses: - '200': - description: A page of search results. - schema: - $ref: '#/definitions/ItemPage' - '400': - description: There was an error executing the search or with your search - syntax. - schema: - $ref: '#/definitions/APIError' - tags: - - search - /catalogs/grid-utm-25km-experimental/searches/: - get: - description: List saved searches available to the current user. - operationId: ListSearches - parameters: - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qSearchSort' - - $ref: '#/parameters/qSearchType' - responses: - '200': - description: A paginated listing of your available searches. - schema: - $ref: '#/definitions/SearchPage' - tags: - - search - post: - description: Create a new search. - operationId: CreateSearch - parameters: - - description: The search to save. - in: body - name: search - required: true - schema: - $ref: '#/definitions/CreateSearch' - responses: - '201': - description: The saved search just created. - headers: - Location: - description: A URL for the newly created saved search. - type: string - schema: - $ref: '#/definitions/Search' - '400': - description: There was an error creating your saved search. - schema: - $ref: '#/definitions/APIError' - tags: - - search - /catalogs/grid-utm-25km-experimental/searches/{SearchID}: - delete: - description: Deletes an individual saved search. - operationId: SearchDelete - parameters: - - $ref: '#/parameters/pSearchID' - responses: - '204': - description: Successful deletion. - '404': - description: The specified SearchID does not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - search - get: - description: Shows an individual saved search. - operationId: SearchDetail - parameters: - - $ref: '#/parameters/pSearchID' - responses: - '200': - description: A successful Search response. - schema: - $ref: '#/definitions/Search' - '404': - description: The specified SearchID does not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - search - put: - description: Updates an existing saved search. - operationId: SearchUpdate - parameters: - - $ref: '#/parameters/pSearchID' - - description: The search to save. - in: body - name: search - required: true - schema: - $ref: '#/definitions/CreateSearch' - responses: - '200': - description: The saved search just updated. - schema: - $ref: '#/definitions/Search' - '400': - description: There was an error updating the chosen saved search. - schema: - $ref: '#/definitions/APIError' - tags: - - search - /catalogs/grid-utm-25km-experimental/searches/{SearchID}/results: - get: - description: Executes a saved search and returns results. - operationId: SearchResults - parameters: - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qSearchResultSort' - - $ref: '#/parameters/pSearchID' - responses: - '200': - description: The successfully executed search results. - schema: - $ref: '#/definitions/ItemPage' - tags: - - search - /catalogs/{CatalogID}: - get: - description: Fetch a specific Catalog identified by CatalogID. - operationId: GetCatalog - parameters: - - $ref: '#/parameters/pCatalogID' - responses: - '200': - description: '' - schema: - $ref: '#/definitions/Catalog' - tags: - - catalog - /catalogs/{CatalogID}/items/: - get: - description: List all items available in a Catalog identified by CatalogID. - operationId: ListItems - parameters: - - $ref: '#/parameters/pCatalogID' - - description: Limit the results to those where the user has a certain permission. - enum: - - assets:download - in: query - name: _permissions - type: string - - $ref: '#/parameters/qPage' - - $ref: '#/parameters/qPageSize' - - $ref: '#/parameters/qItemSort' - - $ref: '#/parameters/qPublished' - - $ref: '#/parameters/qGeometry' - responses: - '200': - description: '' - schema: - $ref: '#/definitions/ItemPage' - '400': - description: There was an error with the request. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/{CatalogID}/items/{ItemID}: - get: - description: Fetch the metadata associated with a specific Item identified by - ItemID in the "grid-utm-25km-experimental" Catalog. - operationId: GetItem - parameters: - - $ref: '#/parameters/pCatalogID' - - $ref: '#/parameters/pItemID' - responses: - '200': - description: Metadata specific to this Item. - schema: - $ref: '#/definitions/Item' - '404': - description: The specified ItemID does not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/{CatalogID}/items/{ItemID}/assets/: - get: - description: List all available Assets belonging to an Item identified by ItemID - and CatalogID. - operationId: ListAssets - parameters: - - $ref: '#/parameters/pCatalogID' - - $ref: '#/parameters/pItemID' - - description: Limit the results to those where the user has a certain permission. - enum: - - download - in: query - name: _permissions - type: string - responses: - '200': - description: The list of available Assets. - schema: - additionalProperties: - $ref: '#/definitions/Asset' - type: object - '404': - description: The specified ItemID or CatalogID do not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/{CatalogID}/items/{ItemID}/assets/{AssetTypeID}: - get: - description: Fetch a single Asset identified by AssetTypeID, ItemID and CatalogID. - operationId: GetAsset - parameters: - - $ref: '#/parameters/pCatalogID' - - $ref: '#/parameters/pItemID' - - $ref: '#/parameters/pAssetTypeID' - responses: - '200': - description: A successful Asset response. - schema: - $ref: '#/definitions/Asset' - '404': - description: The specified AssetTypeID, ItemID or CatalogID do not exist. - schema: - $ref: '#/definitions/APIError' - tags: - - catalog - /catalogs/{CatalogID}/spec: - get: - description: Fetch the Swagger spec for the Catalog identified by CatalogID. - operationId: GetCatalogSpec - parameters: - - $ref: '#/parameters/pCatalogID' - responses: - '200': - description: '' - schema: - $ref: '#/definitions/CatalogSpec' - tags: - - catalog -produces: -- application/json -schemes: -- https -security: -- basic: [] -securityDefinitions: - basic: - type: basic -swagger: '2.0' diff --git a/non-standard-implementations/planet/overview.md b/non-standard-implementations/planet/overview.md deleted file mode 100644 index e3edaec19..000000000 --- a/non-standard-implementations/planet/overview.md +++ /dev/null @@ -1,94 +0,0 @@ -## Introduction - -Planet's Data API exposes a variety of sensors in a coherent API. It powers ['Planet Explorer'](http://planet.com/explorer), -a javascript GUI for finding imagery. Data comes from Planet's Dove, RapidEye and soon SkySat satellites, as well as exposing -Landsat and Sentinel data. Access requires an API key, though anyone can sign up through Planet Explorer. The search functionality -is open to all API users. Download is constrained to data an organization has purchased. But Landsat and Sentinel data are -available for free, and the [Open California](https://www.planet.com/products/open-california/) program also provides an archive of the full state of California, two weeks delayed. - -## Background - -Planet is currently on its third major catalog api iteration. The first (v0) was designed for Planet data only, with the structure of -the data baked in to the API. The fields of search were set to the fields of Planet's metadata. Landsat data was added, but -its relevant fields were adapted to Planet's naming schema. When RapidEye data had to be added, with customers needing access -to all its metadata fields, the need for a new API was clear. - -Planet's next API was the Catalog API (v1). A core design principle was for catalogs to be self-describing. The v0 clients -(particularly GDAL) had to be updated as new fields were added. So the GDAL team requested that a catalog could report its -fields. An innovative solution was implemented, with each catalog having a /spec endpoint that would return a swagger document -that described the metadata fields that could be queried. Catalogs would combine data from multiple 'providers' (ie RapidEye vs Dove), making all -available in a single end point. Bringing multiple sensors in exposed a core problem with the Catalog API, which was they -weren't strongly enough typed for different data sets. - -So the third API, the Data API (v1) did away with catalogs as collections of providers (though the construct could still be -revived). Instead each has its own ItemType end point, that specifies exactly what is in it. This is not just the metadata -fields (which are mostly the same), but also 'assets' - the data that is available for download from each. ItemTypes are -not yet self-describing, but it's on the roadmap to revive that. - -## Core Functionality - -Search of data is the core functionality provided. In Data V1 the searches are only available as POST, there is no GET endpoint. -The developers wanted a single path of access, and GET plus huge geometries can hit the limits of GET, so the decision was made -to go with posting a JSON of the 'filter' that is desired. Each ItemType requested must be specified, along with the fields and -geometry filters desired. An example filter from the [docs](https://www.planet.com/docs/reference/search-api/): - -``` -{ - "type": "AndFilter", - "config": [ - { - "field_name": "acquired", - "config": { - "gte": "2016-02-01T00:00:00Z", - "lte": "2016-03-01T00:00:00Z" - }, - "type": "DateRangeFilter" - }, - { - "field_name": "satellite_id", - "config": ["RapidEye-3"], - "type": "StringInFilter" - } - ] -} -``` -A 'quicksearch' end point lets users start using their query right away. Or searches can be persisted to a saved search end point. - -The other 'core' construct that is a bit unique to Planet is the 'activation' mechanism. All the data products that are available -for an ItemType are listed as 'assets', but they are not all produced up front. Planet stores the core data format and produces -data products on the fly. To download a full data product developers must hit an 'activation' end point, which then creates -the data. V0 of Planet's API did not have an activation mechanism, but V1 is much more scalable from a storage perspective -as it only produces what is needed. - -There are deeper questions as to how this will evolve as more formats and asset options come online, especially through 'compute' -type operations. But it is likely a useful mechanism for a catalog to show what assets is capable of producing without having -to make them all available upfront. - -## Additional Functionality - -Past the core data access API there are a few additions. - -#### Tiles & Thumbnails - -All data in the core catalog API is available as web tiles (overviews for all, full zoom to those with access) and thumbnails. -This is an orthogonal service for Planet, and no explicit links from the core API are provided. But the same ID's are used. - -#### Cloud Optimized GeoTiff - -Once data is activated it is stored on S3, which enables users to leverage HTTP Range access to query subsets of the data without -having to download the whole thing. Data is formatted as [Cloud Optimized Geotiff](https://trac.osgeo.org/gdal/wiki/CloudOptimizedGeoTIFF) -to facilitate efficient network access of parts of the data. See this [sub-area tutorial](https://www.planet.com/docs/guides/quickstart-subarea/) -in the Planet docs for more information. In Planet's case the S3 bucket itself is obscured, but the auth redirected URL is -backed by S3, so the same access patterns works fine. - -#### Stats - -There is an additional API that provides statistics from the same filter queries. This primarily drives GUI interactions, but is -also useful for clients wanting to understand the catalog's data holdings without having to download all the metadata. The -stats end point will return the count of items for a given query, and can also return that in time buckets (useful for driving -GUI timelines). - -#### Basemaps - -Though quite far outside the core catalog construct Planet also provides tile servers that serve up 'basemaps' - mosaics of -imagery in specific time ranges. These are useful to help users navigate through the GUI. diff --git a/non-standard-implementations/planet/spec.json b/non-standard-implementations/planet/spec.json deleted file mode 100644 index c98d671c1..000000000 --- a/non-standard-implementations/planet/spec.json +++ /dev/null @@ -1,1878 +0,0 @@ -{ - "basePath": "/data/v1", - "consumes": [ - "application/json" - ], - "definitions": { - "APIError": { - "description": "An APIError communicates both general and field-specific errors. General errors include issues with core API usage as well as conflicts that involve more than one field. Field-specific errors correspond to an individual query parameter or request body attribute. Errors referencing nested fields will be dot-delimited (e.g. user.groups.0.name).", - "properties": { - "field": { - "additionalProperties": { - "$ref": "#/definitions/Errors" - }, - "type": "object" - }, - "general": { - "$ref": "#/definitions/Errors" - } - }, - "required": [ - "general", - "field" - ], - "type": "object" - }, - "AndFilter": { - "allOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "properties": { - "config": { - "items": { - "$ref": "#/definitions/Filter" - }, - "type": "array" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "Asset": { - "example": { - "_links": { - "_self": "https://api.planet.com/data/v1/assets/eyJpIjogIjIwMTcwOTIxXzEyMzkwN18wZTJmIiwgImMiOiAiUFNTY2VuZTRCYW5kIiwgInQiOiAiYW5hbHl0aWNfZG4iLCAiY3QiOiAiaXRlbS10eXBlIn0", - "activate": "https://api.planet.com/data/v1/assets/eyJpIjogIjIwMTcwOTIxXzEyMzkwN18wZTJmIiwgImMiOiAiUFNTY2VuZTRCYW5kIiwgInQiOiAiYW5hbHl0aWNfZG4iLCAiY3QiOiAiaXRlbS10eXBlIn0/activate", - "type": "https://api.planet.com/data/v1/asset-types/analytic_dn" - }, - "_permissions": [ - "download" - ], - "md5_digest": null, - "status": "inactive", - "type": "analytic_dn" - }, - "properties": { - "_links": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - }, - { - "properties": { - "activate": { - "description": "If present, RFC 3986 URI indicating where an authenticated user may trigger activation of this Asset via a POST request. A 202 response indicates the activation request has been accepted. A 204 response indicates the Asset is already active. After successful activation, this Asset will have a non-empty location.", - "type": "string" - }, - "type": { - "description": "The RFC 3986 URI describing the AssetType", - "type": "string" - } - }, - "type": "object" - } - ] - }, - "_permissions": { - "items": { - "enum": [ - "download" - ], - "type": "string" - }, - "type": "array", - "uniqueItems": true - }, - "expires_at": { - "description": "If present, RFC 3339 timestamp indicating when this Asset will become inactive and will require reactivation.", - "format": "date-time", - "type": "string" - }, - "location": { - "description": "If present, RFC 3986 URI that indicates a location that will yield image data. Consult the documentation of the Asset type to understand how to use this URI.", - "type": "string" - }, - "status": { - "description": "Current status of the Asset. \"inactive\" indicates that the Asset is not currently available for download, but may be after activation. \"activating\" indicates the Asset is currently undergoing activation, and may be available for download shortly. \"active\" indicates the Asset has been activated, and may currently be available for download if the authentication context permits.", - "enum": [ - "inactive", - "activating", - "active" - ], - "type": "string" - }, - "type": { - "description": "Type identifier of this Asset.", - "type": "string" - } - }, - "required": [ - "status", - "type", - "_links", - "_permissions" - ], - "type": "object" - }, - "AssetMap": { - "additionalProperties": { - "$ref": "#/definitions/Asset" - }, - "description": "An object mapping asset names to Asset objects", - "example": { - "analytic_dn": { - "_links": { - "_self": "https://api.planet.com/data/v1/assets/eyJpIjogIjIwMTcwOTIxXzEyMzkwN18wZTJmIiwgImMiOiAiUFNTY2VuZTRCYW5kIiwgInQiOiAiYW5hbHl0aWNfZG4iLCAiY3QiOiAiaXRlbS10eXBlIn0", - "activate": "https://api.planet.com/data/v1/assets/eyJpIjogIjIwMTcwOTIxXzEyMzkwN18wZTJmIiwgImMiOiAiUFNTY2VuZTRCYW5kIiwgInQiOiAiYW5hbHl0aWNfZG4iLCAiY3QiOiAiaXRlbS10eXBlIn0/activate", - "type": "https://api.planet.com/data/v1/asset-types/analytic_dn" - }, - "_permissions": [ - "download" - ], - "md5_digest": null, - "status": "inactive", - "type": "analytic_dn" - } - }, - "type": "object" - }, - "AssetType": { - "example": { - "_links": { - "_self": "https://api.planet.com/data/v1/asset-types/analytic_dn" - }, - "display_description": "Non-radiometrically-calibrated analytic image stored as 12-bit digital numbers", - "display_name": "Analytic digital number image", - "id": "analytic_dn", - "md5_digest": null - }, - "properties": { - "_links": { - "$ref": "#/definitions/SelfLink" - }, - "display_description": { - "description": "Human-readable description of this AssetType.", - "type": "string" - }, - "display_name": { - "description": "Human-readable name of this AssetType.", - "type": "string" - }, - "id": { - "description": "Identifier of this AssetType.", - "type": "string" - }, - "md5_digest": { - "description": "md5 digest of asset type used to determine if the asset has changed", - "type": "string" - } - }, - "type": "object" - }, - "AssetTypePage": { - "properties": { - "_links": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - } - ] - }, - "asset_types": { - "items": { - "$ref": "#/definitions/AssetType" - }, - "type": "array" - } - }, - "type": "object" - }, - "CreateQuickSearch": { - "example": { - "filter": { - "config": [ - { - "config": { - "gte": "2017-09-01T00:00:00Z", - "lte": "2017-09-01T00:10:00Z" - }, - "field_name": "acquired", - "type": "DateRangeFilter" - }, - { - "config": { - "lte": 0.2 - }, - "field_name": "cloud_cover", - "type": "RangeFilter" - } - ], - "type": "AndFilter" - }, - "item_types": [ - "PSScene4Band", - "SkySatScene" - ] - }, - "properties": { - "filter": { - "$ref": "#/definitions/Filter" - }, - "item_types": { - "description": "The ItemTypes to include in the search.", - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "description": "The name of this saved search.", - "pattern": "^.{1,64}$", - "type": "string" - } - }, - "required": [ - "filter", - "item_types" - ], - "type": "object" - }, - "CreateSearch": { - "example": { - "filter": { - "config": [ - { - "config": { - "gte": "2017-09-01T00:00:00Z", - "lte": "2017-09-01T00:10:00Z" - }, - "field_name": "acquired", - "type": "DateRangeFilter" - }, - { - "config": { - "lte": 0.2 - }, - "field_name": "cloud_cover", - "type": "RangeFilter" - } - ], - "type": "AndFilter" - }, - "item_types": [ - "PSScene4Band" - ], - "name": "My saved search" - }, - "properties": { - "filter": { - "$ref": "#/definitions/Filter" - }, - "item_types": { - "description": "The ItemTypes to include in the search.", - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "description": "The name of this saved search.", - "pattern": "^.{1,64}$", - "type": "string" - } - }, - "required": [ - "name", - "filter", - "item_types" - ], - "type": "object" - }, - "CreateStats": { - "example": { - "filter": { - "config": { - "gte": "2017-09-01T00:00:00Z", - "lte": "2017-09-02T00:00:00Z" - }, - "field_name": "acquired", - "type": "DateRangeFilter" - }, - "interval": "hour", - "item_types": [ - "SkySatScene" - ] - }, - "properties": { - "filter": { - "$ref": "#/definitions/Filter" - }, - "interval": { - "description": "This describes the size of the histogram date buckets.", - "enum": [ - "hour", - "day", - "week", - "month", - "year" - ], - "type": "string" - }, - "item_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "utc_offset": { - "description": "A \"ISO 8601 UTC offset\" (e.g. +01:00 or -08:00) that can be used to adjust the buckets to a users time zone. It is optional.", - "type": "string" - } - }, - "required": [ - "filter", - "interval" - ], - "type": "object" - }, - "CursorItemPage": { - "allOf": [ - { - "$ref": "#/definitions/GeoJSONFeatureCollection" - }, - { - "properties": { - "_links": { - "$ref": "#/definitions/CursorPageLinks" - }, - "features": { - "items": { - "$ref": "#/definitions/Item" - }, - "type": "array" - } - }, - "required": [ - "features", - "_links" - ], - "type": "object" - } - ], - "type": "object" - }, - "CursorPageLinks": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - }, - { - "example": { - "_first": "/v1/resource_url?_page={firstPageID}", - "_next": "/v1/resource_url?_page={nextPageID}", - "_self": "/v1/resource_url?_page={pageId}" - }, - "properties": { - "_first": { - "description": "RFC 3986 URI representing the location of the first page of results.", - "type": "string" - }, - "_next": { - "description": "RFC 3986 URI representing the location of the next page of results. Omitted when there are no results, or the current page is the last.", - "type": "string" - } - }, - "type": "object" - } - ] - }, - "DateRangeFilter": { - "allOf": [ - { - "$ref": "#/definitions/FieldFilter" - }, - { - "properties": { - "config": { - "properties": { - "gt": { - "format": "date-time", - "type": "string" - }, - "gte": { - "format": "date-time", - "type": "string" - }, - "lt": { - "format": "date-time", - "type": "string" - }, - "lte": { - "format": "date-time", - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "Error": { - "properties": { - "message": { - "description": "A descriptive error message.", - "type": "string" - } - }, - "type": "object" - }, - "Errors": { - "items": { - "$ref": "#/definitions/Error" - }, - "type": "array" - }, - "FieldFilter": { - "allOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "properties": { - "field_name": { - "type": "string" - } - }, - "required": [ - "field_name" - ], - "type": "object" - } - ] - }, - "Filter": { - "discriminator": "type", - "properties": { - "type": { - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "GeoJSONFeature": { - "description": "A GeoJSON feature object", - "properties": { - "geometry": { - "$ref": "#/definitions/GeoJSONGeometry" - }, - "properties": { - "type": "object" - } - }, - "required": [ - "properties", - "geometry" - ], - "title": "Feature" - }, - "GeoJSONFeatureCollection": { - "description": "A GeoJSON feature collection", - "properties": { - "features": { - "items": { - "$ref": "#/definitions/GeoJSONFeature" - }, - "type": "array" - } - }, - "required": [ - "features" - ], - "title": "FeatureCollection" - }, - "GeoJSONGeometry": { - "description": "One geometry as defined by GeoJSON", - "discriminator": "type", - "properties": { - "type": { - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "GeometryFilter": { - "allOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "properties": { - "config": { - "$ref": "#/definitions/GeoJSONGeometry" - }, - "field_name": { - "enum": [ - "geometry" - ], - "type": "string" - } - }, - "required": [ - "config", - "field_name" - ], - "type": "object" - } - ] - }, - "Item": { - "allOf": [ - { - "$ref": "#/definitions/GeoJSONFeature" - }, - { - "properties": { - "_links": { - "$ref": "#/definitions/ItemLinks" - }, - "id": { - "description": "Identifier of this Item.", - "type": "string" - }, - "properties": { - "$ref": "#/definitions/ItemProperties" - } - }, - "required": [ - "id", - "properties", - "_links" - ], - "type": "object" - } - ], - "example": { - "_links": { - "_self": "https://api.planet.com/data/v1/item-types/PSScene4Band/items/20170921_123907_0e2f", - "assets": "https://api.planet.com/data/v1/item-types/PSScene4Band/items/20170921_123907_0e2f/assets/", - "thumbnail": "https://api.planet.com/data/v1/item-types/PSScene4Band/items/20170921_123907_0e2f/thumb" - }, - "_permissions": [ - "assets.basic_analytic_rpc_nitf:download", - "assets.analytic_xml:download", - "assets.basic_analytic_dn:download", - "assets.basic_analytic_dn_xml_nitf:download", - "assets.basic_analytic_dn_nitf:download", - "assets.basic_analytic_xml:download", - "assets.basic_analytic_nitf:download", - "assets.basic_analytic_rpc:download", - "assets.analytic_dn:download", - "assets.basic_udm:download", - "assets.basic_analytic_dn_rpc_nitf:download", - "assets.analytic:download", - "assets.analytic_dn_xml:download", - "assets.basic_analytic_dn_xml:download", - "assets.basic_analytic_dn_rpc:download", - "assets.basic_analytic_xml_nitf:download", - "assets.basic_analytic:download", - "assets.udm:download" - ], - "geometry": { - "coordinates": [ - [ - [ - -43.55989016591645, - -2.433318778189789 - ], - [ - -43.786025906923115, - -2.387397164934404 - ], - [ - -43.77089563204482, - -2.313485592362364 - ], - [ - -43.55247814694568, - -2.357509799864284 - ], - [ - -43.556112397595214, - -2.375467015676699 - ], - [ - -43.54839561585643, - -2.377029427111328 - ], - [ - -43.55989016591645, - -2.433318778189789 - ] - ] - ], - "type": "Polygon" - }, - "id": "20170921_123907_0e2f", - "properties": { - "acquired": "2017-09-21T12:39:07.565336Z", - "anomalous_pixels": 0.02, - "cloud_cover": 0.08, - "columns": 8810, - "epsg_code": 32723, - "ground_control": true, - "gsd": 4, - "instrument": "PS2", - "item_type": "PSScene4Band", - "origin_x": 634977, - "origin_y": 9744231, - "pixel_resolution": 3, - "provider": "planetscope", - "published": "2017-09-22T08:50:15Z", - "quality_category": "standard", - "rows": 4425, - "satellite_id": "0e2f", - "strip_id": "774930", - "sun_azimuth": 85.3, - "sun_elevation": 57.4, - "updated": "2017-09-22T08:50:15Z", - "usable_data": 0, - "view_angle": 3.9 - }, - "type": "Feature" - }, - "type": "object" - }, - "ItemLinks": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - }, - { - "properties": { - "assets": { - "description": "RFC 3986 URI representing the canonical location of the Assets subcollection.", - "type": "string" - } - }, - "required": [ - "assets" - ], - "type": "object" - } - ] - }, - "ItemProperties": { - "type": "object" - }, - "ItemType": { - "example": { - "_links": { - "_self": "https://api.planet.com/data/v1/item-types/PSScene4Band" - }, - "display_description": "4-band PlanetScope imagery that is framed as captured.", - "display_name": "4-band PlanetScope Scene", - "id": "PSScene4Band" - }, - "properties": { - "_links": { - "$ref": "#/definitions/ItemTypeLinks" - }, - "display_description": { - "description": "Human-readable description of this ItemType.", - "type": "string" - }, - "display_name": { - "description": "Human-readable name of this ItemType.", - "type": "string" - }, - "id": { - "description": "Identifier of this ItemType.", - "type": "string" - } - }, - "type": "object" - }, - "ItemTypeLinks": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - } - ] - }, - "ItemTypePage": { - "properties": { - "_links": { - "$ref": "#/definitions/SelfLink" - }, - "item_types": { - "items": { - "$ref": "#/definitions/ItemType" - }, - "type": "array" - } - }, - "type": "object" - }, - "LineString": { - "properties": { - "coordinates": { - "allOf": [ - { - "$ref": "#/definitions/PositionArray" - }, - { - "minItems": 2 - } - ] - } - }, - "required": [ - "coordinates" - ] - }, - "LinearRing": { - "allOf": [ - { - "$ref": "#/definitions/PositionArray" - }, - { - "minItems": 4 - } - ], - "description": "An array of four positions where the first equals the last" - }, - "MultiLineString": { - "properties": { - "coordinates": { - "items": { - "allOf": [ - { - "$ref": "#/definitions/PositionArray" - }, - { - "minItems": 2 - } - ] - }, - "type": "array" - } - }, - "required": [ - "coordinates" - ] - }, - "MultiPoint": { - "properties": { - "coordinates": { - "$ref": "#/definitions/PositionArray" - } - }, - "required": [ - "coordinates" - ] - }, - "MultiPolygon": { - "properties": { - "coordinates": { - "items": { - "items": { - "$ref": "#/definitions/LinearRing" - }, - "type": "array" - }, - "type": "array" - } - }, - "required": [ - "coordinates" - ] - }, - "NotFilter": { - "allOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "properties": { - "config": { - "$ref": "#/definitions/Filter" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "NumberInFilter": { - "allOf": [ - { - "$ref": "#/definitions/FieldFilter" - }, - { - "properties": { - "config": { - "items": { - "format": "int64", - "type": "number" - }, - "type": "array" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "OrFilter": { - "allOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "properties": { - "config": { - "items": { - "$ref": "#/definitions/Filter" - }, - "type": "array" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "PageLinks": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - }, - { - "example": { - "_first": "/v1/resource_url?_page={firstPageID}", - "_next": "/v1/resource_url?_page={nextPageID}", - "_prev": "/v1/resource_url?_page={prevPageID}", - "_self": "/v1/resource_url?_page={pageId}" - }, - "properties": { - "_first": { - "description": "RFC 3986 URI representing the location of the first page of results.", - "type": "string" - }, - "_next": { - "description": "RFC 3986 URI representing the location of the next page of results. Omitted when there are no results, or the current page is the last.", - "type": "string" - }, - "_prev": { - "description": "RFC 3986 URI representing the location of the previous page of results. Omitted from first page of results.", - "type": "string" - } - }, - "type": "object" - } - ] - }, - "PermissionFilter": { - "allOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "properties": { - "config": { - "items": { - "enum": [ - "assets:download", - "assets.analytic:download", - "assets.analytic_dn:download", - "assets.analytic_dn_xml:download", - "assets.analytic_xml:download", - "assets.basic_analytic:download", - "assets.basic_analytic_dn:download", - "assets.basic_analytic_dn_nitf:download", - "assets.basic_analytic_dn_rpc:download", - "assets.basic_analytic_dn_rpc_nitf:download", - "assets.basic_analytic_dn_xml:download", - "assets.basic_analytic_dn_xml_nitf:download", - "assets.basic_analytic_nitf:download", - "assets.basic_analytic_rpc:download", - "assets.basic_analytic_rpc_nitf:download", - "assets.basic_analytic_xml:download", - "assets.basic_analytic_xml_nitf:download", - "assets.basic_rpc:download", - "assets.basic_udm:download", - "assets.udm:download", - "assets.unrectified:download", - "assets.visual:download", - "assets.visual_xml:download", - "assets.basic_analytic_b1:download", - "assets.basic_analytic_b2:download", - "assets.basic_analytic_b3:download", - "assets.basic_analytic_b4:download", - "assets.basic_analytic_b5:download", - "assets.basic_analytic_b1_nitf:download", - "assets.basic_analytic_b2_nitf:download", - "assets.basic_analytic_b3_nitf:download", - "assets.basic_analytic_b4_nitf:download", - "assets.basic_analytic_b5_nitf:download", - "assets.basic_analytic_sci:download", - "assets.browse:download", - "assets.analytic_b1:download", - "assets.analytic_b2:download", - "assets.analytic_b3:download", - "assets.analytic_b4:download", - "assets.analytic_b5:download", - "assets.analytic_b6:download", - "assets.analytic_b7:download", - "assets.analytic_b8:download", - "assets.analytic_b8a:download", - "assets.analytic_b9:download", - "assets.analytic_b10:download", - "assets.analytic_b11:download", - "assets.analytic_b12:download", - "assets.analytic_bqa:download", - "assets.analytic_ms:download", - "assets.metadata_txt:download", - "assets.metadata_aux:download", - "assets.basic_panchromatic_dn:download", - "assets.basic_panchromatic_dn_rpc:download", - "assets.ortho_analytic_dn:download", - "assets.ortho_analytic_udm:download", - "assets.ortho_panchromatic_dn:download", - "assets.ortho_panchromatic_udm:download", - "assets.ortho_pansharpened:download", - "assets.ortho_pansharpened_udm:download", - "assets.ortho_visual:download", - "assets.atmcorrected:download" - ], - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "Point": { - "properties": { - "coordinates": { - "$ref": "#/definitions/Position" - } - }, - "required": [ - "coordinates" - ] - }, - "Polygon": { - "properties": { - "coordinates": { - "items": { - "$ref": "#/definitions/LinearRing" - }, - "type": "array" - } - }, - "required": [ - "coordinates" - ] - }, - "Position": { - "description": "A single position", - "items": { - "type": "number" - }, - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - "PositionArray": { - "description": "An array of two or more positions", - "items": { - "$ref": "#/definitions/Position" - }, - "type": "array" - }, - "RangeFilter": { - "allOf": [ - { - "$ref": "#/definitions/FieldFilter" - }, - { - "properties": { - "config": { - "properties": { - "gt": { - "format": "double", - "type": "number" - }, - "gte": { - "format": "double", - "type": "number" - }, - "lt": { - "format": "double", - "type": "number" - }, - "lte": { - "format": "double", - "type": "number" - } - }, - "type": "object" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - }, - "Search": { - "example": { - "__daily_email_enabled": false, - "_links": { - "_self": "https://api.planet.com/data/v1/searches/f41a9762ff4141f7bac3b4f769bda481", - "results": "https://api.planet.com/data/v1/searches/f41a9762ff4141f7bac3b4f769bda481/results" - }, - "created": "2017-09-26T18:44:53.517189Z", - "filter": { - "config": [ - { - "config": { - "gte": "2017-09-01T00:00:00Z", - "lte": "2017-09-01T00:10:00Z" - }, - "field_name": "acquired", - "type": "DateRangeFilter" - }, - { - "config": { - "lte": 0.2 - }, - "field_name": "cloud_cover", - "type": "RangeFilter" - } - ], - "type": "AndFilter" - }, - "id": "f41a9762ff4141f7bac3b4f769bda481", - "item_types": [ - "PSScene4Band", - "SkySatScene" - ], - "last_executed": "2017-09-26T18:44:53.535986Z", - "name": "f41a9762ff4141f7bac3b4f769bda481", - "search_type": "quick", - "updated": "2017-09-26T18:44:53.536178Z" - }, - "properties": { - "__daily_email_enabled": { - "type": "boolean" - }, - "_links": { - "properties": { - "_self": { - "type": "string" - }, - "results": { - "type": "string" - } - }, - "type": "object" - }, - "created": { - "format": "date-time", - "type": "string" - }, - "filter": { - "$ref": "#/definitions/Filter" - }, - "id": { - "pattern": "^.{32}$", - "type": "string" - }, - "last_executed": { - "format": "date-time", - "type": "string" - }, - "name": { - "description": "The name of this saved search.", - "pattern": "^.{1,64}$", - "type": "string" - }, - "updated": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "filter", - "name", - "created", - "updated", - "last_executed", - "id" - ], - "type": "object" - }, - "SearchPage": { - "properties": { - "_links": { - "allOf": [ - { - "$ref": "#/definitions/SelfLink" - }, - { - "$ref": "#/definitions/PageLinks" - } - ] - }, - "searches": { - "description": "A list of searches", - "items": { - "$ref": "#/definitions/Search" - }, - "type": "array" - } - }, - "required": [ - "_links", - "searches" - ], - "type": "object" - }, - "SelfLink": { - "properties": { - "_self": { - "description": "RFC 3986 URI representing the canonical location of this object.", - "example": "/v1/resource_url", - "type": "string" - } - }, - "required": [ - "_self" - ], - "type": "object" - }, - "StatsBucketResults": { - "properties": { - "count": { - "description": "Count of items in the bucket.", - "type": "number" - }, - "start_time": { - "description": "Start time of the bucket aggregated.", - "format": "date-time", - "type": "string" - } - }, - "required": [ - "count", - "start_time" - ], - "type": "object" - }, - "StatsResults": { - "properties": { - "buckets": { - "description": "List of buckets for agregration.", - "items": { - "$ref": "#/definitions/StatsBucketResults" - }, - "type": "array" - }, - "interval": { - "description": "This describes the size of the histogram date buckets.", - "enum": [ - "hour", - "day", - "week", - "month", - "year" - ], - "type": "string" - }, - "utc_offset": { - "description": "A \"ISO 8601 UTC offset\" (e.g. +01:00 or -08:00) that can be used to adjust the buckets to a users time zone. It is optional.", - "type": "string" - } - }, - "required": [ - "utc_offset", - "interval", - "buckets" - ], - "type": "object" - }, - "StringInFilter": { - "allOf": [ - { - "$ref": "#/definitions/FieldFilter" - }, - { - "properties": { - "config": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "config" - ], - "type": "object" - } - ] - } - }, - "host": "api.planet.com", - "info": { - "description": "The Planet Data API serves all Planet Labs imagery to public clients. This is the general spec that governs the common API objects and operations.", - "title": "Planet Data API", - "version": "1.0.0" - }, - "parameters": { - "pAssetTypeID": { - "description": "AssetType identifier.", - "in": "path", - "name": "AssetTypeID", - "required": true, - "type": "string" - }, - "pItemID": { - "description": "ID of a given Item", - "in": "path", - "name": "ItemID", - "required": true, - "type": "string" - }, - "pItemTypeID": { - "description": "ID of a given ItemType", - "in": "path", - "name": "ItemTypeID", - "required": true, - "type": "string" - }, - "pSearchID": { - "description": "ID of the saved search", - "in": "path", - "name": "SearchID", - "required": true, - "type": "string" - }, - "qPage": { - "description": "Token representing a specific page of results. This should never be constructed manually.", - "in": "query", - "name": "_page", - "type": "string" - }, - "qPageSize": { - "default": 250, - "description": "Return at most this number of results. This may only be used at the start of pagination. This may not be provided along side the \"_page\" parameter.", - "format": "int64", - "in": "query", - "maximum": 250, - "minimum": 0, - "name": "_page_size", - "type": "integer" - }, - "qSearchResultSort": { - "default": "published desc", - "description": "Order the results by the provided field, in a specific direction. This may not be provided alongside the \"_page\" parameter.", - "enum": [ - "acquired asc", - "acquired desc", - "published asc", - "published desc" - ], - "in": "query", - "name": "_sort", - "type": "string" - }, - "qSearchSort": { - "default": "created desc", - "description": "Order the results by the provided field, in a specific direction. This may not be provided alongside the \"_page\" parameter.", - "enum": [ - "created desc", - "created asc" - ], - "in": "query", - "name": "_sort", - "type": "string" - }, - "qSearchType": { - "default": "any", - "description": "Type of searches to list.", - "enum": [ - "any", - "saved", - "quick" - ], - "in": "query", - "name": "search_type", - "type": "string" - }, - "qStrict": { - "description": "Set strict=True to filter out geometry that does not intersect with aoi", - "in": "query", - "name": "strict", - "type": "string" - } - }, - "paths": { - "/asset-types/": { - "get": { - "description": "Lists all the AssetTypes available to the authenticated user.", - "operationId": "ListAssetTypes", - "responses": { - "200": { - "description": "The list of available AssetTypes.", - "schema": { - "$ref": "#/definitions/AssetTypePage" - } - } - }, - "tags": [ - "asset-types" - ] - } - }, - "/asset-types/{AssetTypeID}": { - "get": { - "description": "Fetch a specific AssetType identified by AssetTypeID.", - "operationId": "GetAssetType", - "parameters": [ - { - "$ref": "#/parameters/pAssetTypeID" - } - ], - "responses": { - "200": { - "description": "A successful AssetType response.", - "schema": { - "$ref": "#/definitions/AssetType" - } - }, - "404": { - "description": "The requested AssetTypeID does not exist.", - "examples": { - "text/json": { - "field": {}, - "general": [ - { - "message": "The requested asset type does not exist" - } - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "asset-types" - ] - } - }, - "/item-types/": { - "get": { - "description": "Lists all the ItemTypes available to the authenticated user.", - "operationId": "ListItemTypes", - "responses": { - "200": { - "description": "The list of available ItemTypes.", - "schema": { - "$ref": "#/definitions/ItemTypePage" - } - } - }, - "tags": [ - "item-types" - ] - } - }, - "/item-types/{ItemTypeID}": { - "get": { - "description": "Fetch a specific ItemType identified by ItemTypeID.", - "operationId": "GetItemType", - "parameters": [ - { - "$ref": "#/parameters/pItemTypeID" - } - ], - "responses": { - "200": { - "description": "A successful ItemType response.", - "schema": { - "$ref": "#/definitions/ItemType" - } - }, - "404": { - "description": "The requested ItemTypeID does not exist.", - "examples": { - "text/json": { - "field": {}, - "general": [ - { - "message": "The requested item type does not exist." - } - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "item-types" - ] - } - }, - "/item-types/{ItemTypeID}/items/{ItemID}": { - "get": { - "description": "Fetch a specific Item for a given ItemType.", - "operationId": "GetItem", - "parameters": [ - { - "$ref": "#/parameters/pItemTypeID" - }, - { - "$ref": "#/parameters/pItemID" - } - ], - "responses": { - "200": { - "description": "A successful Item response.", - "schema": { - "$ref": "#/definitions/Item" - } - }, - "404": { - "description": "The specified Item does not exist, does not exist for the given ItemType, or the ItemType requested does not exist.", - "examples": { - "application/json": { - "field": {}, - "general": [ - { - "message": "Could not find the requested item." - } - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "item-types" - ] - } - }, - "/item-types/{ItemTypeID}/items/{ItemID}/assets/": { - "get": { - "description": "List all available Assets belonging to an Item identified by ItemID and ItemTypeID.", - "operationId": "ListItemAssets", - "parameters": [ - { - "$ref": "#/parameters/pItemTypeID" - }, - { - "$ref": "#/parameters/pItemID" - } - ], - "responses": { - "200": { - "description": "The list of available Assets.", - "schema": { - "$ref": "#/definitions/AssetMap", - "type": "object" - } - }, - "404": { - "description": "The specified ItemID or CatalogID do not exist.", - "examples": { - "text/json": { - "field": {}, - "general": [ - { - "message": "Could not find the requested item." - } - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "item-types" - ] - } - }, - "/quick-search": { - "post": { - "description": "Executes a structured search immediately without having to first save it.", - "operationId": "QuickSearch", - "parameters": [ - { - "description": "The structured search to execute. We automatically generate a name and identifier for this search and redirect to its results. Quick searches may be cleaned periodically.", - "in": "body", - "name": "search", - "required": true, - "schema": { - "$ref": "#/definitions/CreateQuickSearch" - } - }, - { - "$ref": "#/parameters/qPageSize" - }, - { - "$ref": "#/parameters/qSearchResultSort" - }, - { - "$ref": "#/parameters/qStrict" - } - ], - "responses": { - "200": { - "description": "A page of search results.", - "schema": { - "$ref": "#/definitions/CursorItemPage" - } - }, - "400": { - "description": "There was an error executing the search or with your search syntax.", - "examples": { - "text/json": { - "field": { - "filter.config.1.type": [ - { - "message": "NotARealFilterType is not a valid type for discriminator" - } - ] - }, - "general": [] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - } - }, - "/searches/": { - "get": { - "description": "List saved searches available to the current user.", - "operationId": "ListSearches", - "parameters": [ - { - "$ref": "#/parameters/qPage" - }, - { - "$ref": "#/parameters/qPageSize" - }, - { - "$ref": "#/parameters/qSearchSort" - }, - { - "$ref": "#/parameters/qSearchType" - } - ], - "responses": { - "200": { - "description": "A paginated listing of your available searches.", - "schema": { - "$ref": "#/definitions/SearchPage" - } - } - }, - "tags": [ - "search" - ] - }, - "post": { - "description": "Create a new search.", - "operationId": "CreateSearch", - "parameters": [ - { - "description": "The search to save.", - "in": "body", - "name": "search", - "required": true, - "schema": { - "$ref": "#/definitions/CreateSearch" - } - }, - { - "$ref": "#/parameters/qStrict" - } - ], - "responses": { - "201": { - "description": "The saved search just created.", - "headers": { - "Location": { - "description": "A URL for the newly created saved search.", - "type": "string" - } - }, - "schema": { - "$ref": "#/definitions/Search" - } - }, - "400": { - "description": "There was an error creating your saved search.", - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - } - }, - "/searches/{SearchID}": { - "delete": { - "description": "Deletes an individual saved search.", - "operationId": "SearchDelete", - "parameters": [ - { - "$ref": "#/parameters/pSearchID" - } - ], - "responses": { - "204": { - "description": "Successful deletion." - }, - "404": { - "description": "The specified SearchID does not exist.", - "examples": { - "text/json": { - "field": {}, - "general": [ - { - "message": "The requested search id does not exist" - } - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - }, - "get": { - "description": "Shows an individual saved search.", - "operationId": "SearchDetail", - "parameters": [ - { - "$ref": "#/parameters/pSearchID" - } - ], - "responses": { - "200": { - "description": "A successful Search response.", - "schema": { - "$ref": "#/definitions/Search" - } - }, - "404": { - "description": "The specified SearchID does not exist.", - "examples": { - "text/json": { - "field": {}, - "general": [ - { - "message": "The requested search id does not exist" - } - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - }, - "put": { - "description": "Updates an existing saved search.", - "operationId": "SearchUpdate", - "parameters": [ - { - "$ref": "#/parameters/pSearchID" - }, - { - "description": "The search to save.", - "in": "body", - "name": "search", - "required": true, - "schema": { - "$ref": "#/definitions/CreateSearch" - } - } - ], - "responses": { - "200": { - "description": "The saved search just updated.", - "schema": { - "$ref": "#/definitions/Search" - } - }, - "400": { - "description": "There was an error updating the chosen saved search.", - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - } - }, - "/searches/{SearchID}/results": { - "get": { - "description": "Executes a saved search and returns results.", - "operationId": "SearchResults", - "parameters": [ - { - "$ref": "#/parameters/qPage" - }, - { - "$ref": "#/parameters/qPageSize" - }, - { - "$ref": "#/parameters/qSearchResultSort" - }, - { - "$ref": "#/parameters/pSearchID" - }, - { - "$ref": "#/parameters/qStrict" - } - ], - "responses": { - "200": { - "description": "The successfully executed search results.", - "schema": { - "$ref": "#/definitions/CursorItemPage" - } - }, - "404": { - "description": "The requested search id does not exist", - "examples": { - "text/json": { - "field": {}, - "general": [ - "The requested search id does not exist" - ] - } - }, - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - } - }, - "/stats": { - "post": { - "description": "Gives an aggregated count for the search filters given in an interval.", - "operationId": "Stats", - "parameters": [ - { - "description": "The structured search to execute with an interval and optional utc offset.", - "in": "body", - "name": "stats", - "required": true, - "schema": { - "$ref": "#/definitions/CreateStats" - } - } - ], - "responses": { - "200": { - "description": "List of stats aggregated over the interval given.", - "schema": { - "$ref": "#/definitions/StatsResults" - } - }, - "400": { - "description": "There was an error executing the stats or with your stats syntax.", - "schema": { - "$ref": "#/definitions/APIError" - } - } - }, - "tags": [ - "search" - ] - } - } - }, - "produces": [ - "application/json" - ], - "schemes": [ - "https" - ], - "security": [ - { - "basic": [] - } - ], - "securityDefinitions": { - "basic": { - "type": "basic" - } - }, - "swagger": "2.0" -} diff --git a/non-standard-implementations/radiant/overview.md b/non-standard-implementations/radiant/overview.md deleted file mode 100644 index 3cea0a91b..000000000 --- a/non-standard-implementations/radiant/overview.md +++ /dev/null @@ -1,15 +0,0 @@ -## Introduction - -Radiant.Earth v1.0 specification is based on Raster Foundry's API which supports creating, searching, and analyzing imagery and raster data. With Raster Foundry's API users are -able to gain insight from geospatial data quickly, repeatably, and at any scale. The API powers [Radiant.Earth Platform](https://app.radiant.earth) the web application and a [python library](https://pypi.python.org/pypi/rasterfoundry/0.1.0) that exposes the API in a pythonic interface. -Data is added to Raster Foundry from public sources like Landsat and Sentinel archives and allows users to add their own imagery or -raster data obtained via satellite, drones, manned flights, or other means. Access to the API requires an API key and at this time -signups are limited to a small set of users during beta testing. - -The portion of Raster Foundry's spec provided here excludes resources and endpoints that are not relevant to catalog functionality. The -full specification can be obtained at https://spec.radiant.earth and the [documentation site](https://doc.radiant.earth) includes -additional information on the full API functionality. - -## Background - -Please refer to the [Raster Foundry Implementation](/implementations/raster-foundry) diff --git a/non-standard-implementations/raster-foundry/overview.md b/non-standard-implementations/raster-foundry/overview.md deleted file mode 100644 index 9a5d1a047..000000000 --- a/non-standard-implementations/raster-foundry/overview.md +++ /dev/null @@ -1,106 +0,0 @@ -## Introduction - -Raster Foundry's API supports creating, searching, and analyzing imagery and raster data. With Raster Foundry's API users are -able to gain insight from geospatial data quickly, repeatably, and at any scale. The API powers [Raster Foundry](https://app.rasterfoundry.com) -the web application and a [python library](https://pypi.python.org/pypi/rasterfoundry/0.1.0) that exposes the API in a pythonic interface. -Data is added to Raster Foundry from public sources like Landsat and Sentinel archives and allows users to add their own imagery or -raster data obtained via satellite, drones, manned flights, or other means. Access to the API requires an API key and at this time -signups are limited to a small set of users during beta testing. - -The portion of Raster Foundry's spec provided here excludes resources and endpoints that are not relevant to catalog functionality. The -full specification can be obtained at https://spec.rasterfoundry.com and the [documentation site](https://docs.rasterfoundry.com) includes -additional information on the full API functionality. - -## Background - -Raster Foundry is an imagery and raster discvovery, analysis, and publishing platform with support from NASA (NNX16CS04C) -and the US Dept. of Energy (DE-SC0013134). The API supports both querying and creating new resources. Raster Foundry itself does -not produce data for analysis, instead it pulls in data from NASA, USGS, ESA, and other public sources to allow users to find -data to analyze and publish. Additionally, users are able to upload their own data to analyze and publish. - -The project is still under active development and the API is not yet versioned as additional requirements are gleamed from users; -however, we do not expect major deviations from the spec provided here. - -## Core Resources - -### Scene - -Within Raster Foundry, a `Scene` is the base unit of imagery. Scenes are single or multi-image rasters where every image within -the scene shares the same metadata characteristics and are always associated with a datasource. This simplest example of a scene -is a single-band image like a land classification raster. The most complex example is a multi-image scene made up of multi-band images, -like a pre-tiled aerial image where each tile is one piece of a larger coherent scene. - -### Datasource - -Datasources contain information common to all scenes associated with them, such as the number of bands to expect in images associated -with that datasource. A datasource can be specific (e.g. a particular earth observation satellite) or generic -(e.g. a 3-band sensor on a UAV). All scenes must have an associated datasource. Additionally, datasources can define common false-color -composites for thematic visualization. - -### Image - -Images are single or multi-band rasters that can be viewed and edited as a single unit but are always associated with a parent scene. -They are sometimes synonymous with their parent scenes and other times just one of several images associated with their parent scenes. -One common example of an image is a multispectral satellite image; another is a land classification raster. - -### Project - -Projects are user-defined collections of scenes and are the fundamental unit that tools act on, can be published as a tile layer, -or can be exported as GeoTIFFs. - -## Core Functionality - -Raster Foundry supports creating, searching, analyzing, and publishing imagery and raster data. Endpoints are designed around the core -resources outlined above and use HTTP verbs to define actions on those resources. Creating and searching is accomplished primarily through -the resources outlined above. Analysis and publishing may be outside the scope of defining a catalog API spec and are excluded here; however, -all resources are available at Raster Foundry's [documentation site](https://docs.rasterfoundry.com). - -To search for data, users make `GET` requests on `/api/scenes/` using query parameters to filter results in the API. For example, users are -able to limit results to certain datasources, imagery they uploaded, or data acquired over certain periods of time. All query parameters are -[documented](https://docs.rasterfoundry.com/#Scenes) in the API specification that powers the documentation site. - -The same endpoint supports adding new data to the API via a `POST` request and is used in the project internally when adding imagery but -also by users as they add imagery. Updates are supported via `PUT` requests and the object itself is designed to be updated in an ad hoc -manner as thumbnails, footprints, and new files are added to scenes. - - -## Additional Functionality - -In addition to providing an API to search and add imagery, there is some additional functionality. - -### Thumbnails - -Thumbnails are generated either automatically based on user requests or can be added via the API if thumbnails exist for user uploaded data. - -### Tile Service - -Scenes that are grouped into a "project" can be served out as a tile service. Additionally, projects can be color corrected in Raster Foundry's -UI for optimal viewing or users can create false-color composites to create thematic maps. Ordering of scenes and color corrections are defined on -mosaic definitions and ordering defined between the project and its component scenes. Tile layers can be made public or kept private, -if private a map token is required for each tile layer and can be added as a query parameter to tile requests. - -### Analysis - -In addition to publishing projects as a tile layer, analysis can be performed on 1 or more projects and served out as a tile layer. For instance, -an NDWI pixel-based change detection algorithm can be created from two projects with imagery from the same area at two different points in time. -The resulting analysis tiles can be served as a tile layer and embedded in an external application. - -Analysis is done using "tools" and "tool runs." A tool is a formula for performing an operation with undefined parameters and a tool run sets those -parameters (for instance, defining which projects a tool should use). The analysis itself is encoded in JSON and interpreted by back-end servers. - -Future work in this area will include the ability for users to define alerts based on analysis results or exporting vector results such as polygonizing -areas of water, vegetation, or zones of concern based on analysis. Currently only local map algebra operations are supported; however, plans are underway -to add support for the rest of map algebra operations and user defined functions. - -### Area of Interest Monitoring - -A special type of project can be created to monitor an area for new imagery that matches certain criteria. For instance, a user could define a polygon -of interest and limit new imagery added to those with less than 10 percent cloud cover and only from Sentinel 2. As new scenes are added to Raster Foundry -they are evaluated against these user defined filters and automatically added to a project. This allows a user to create a constantly updated basemap -of new imagery by using a project tile URL for an area-of-interest project. In the future users will be able to hook an analysis pipeline to an area of -interest project that gets run when new imagery is added. - -### Scene Grid - -When browsing for imagery it is useful to allow an additional tile layer that summarizes the amount of available data for a web mercator tile at a zoom -level. This information is returned by the `/scene-grids/` endpoint and accepts the same query parameters as the `/scenes/` endpoint and is read-only. diff --git a/non-standard-implementations/raster-foundry/spec.json b/non-standard-implementations/raster-foundry/spec.json deleted file mode 100644 index e8e06b162..000000000 --- a/non-standard-implementations/raster-foundry/spec.json +++ /dev/null @@ -1,4646 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "Raster Foundry", - "description": "An application to find, view, and analyze geospatial data at any scale", - "version": "0.1.0" - }, - "host": "localhost:9000", - "schemes": [ - "http", - "https" - ], - "basePath": "/api", - "produces": [ - "application/json" - ], - "consumes": [ - "application/json" - ], - "x-top-matter": [ - { - "title": "Introduction", - "level": 1, - "content": "The Raster Foundry API allows developers to find, view, and analyze geospatial data in Raster Foundry. As the name implies, it's especially useful for working with large raster datasets like satellite imagery.\n\nRaster Foundry is built with an openly licensed, open source code base. If you'd like to peek under the hood, make a request, or become a contributor, find us on Github.\n" - }, - { - "title": "Authentication", - "level": 2, - "content": "Our API identifies applications and users with JSON Web Tokens (JWT). Refresh tokens can be created in your Raster Foundry account and used to generate example requests signed with valid session tokens (detailed instructions are available here).\n" - } - ], - "x-resources": [ - { - "name": "Projects", - "description": "Projects are user-defined collections of scenes and are the fundamental unit that tools act on.\n", - "further-description": [ - { - "title": "Project permissions", - "content": "Projects are currently private to the user that created them and cannot be discovered by other Raster Foundry users. However, projects can be shared publicly as a tiled web map with a direct link.\nProject permissions will eventually expand to include making projects discoverable to all users or just users within an organization.\n" - } - ] - }, - { - "name": "Scenes", - "description": "Scenes are single or multi-image rasters where every image within the scene shares the same metadata characteristics and are always associated with a datasource. This simplest example of a scene is a single-band image like a land classification raster. The most complex example is a multi-image scene made up of multi-band images, like a pre-tiled aerial image where each tile is one piece of a larger coherent scene.\n", - "further-description": [ - { - "title": "Scene permissions", - "content": "By default, imported scenes are private to the user that uploaded them and scenes generated from public data sources are discoverable by all users.\nScene permissions will eventually expand to include making imported scenes discoverable to all users or just users within an organization.\n" - } - ] - }, - { - "name": "Images", - "description": "Images are single or multi-band rasters that can be viewed and edited as a single unit but are always associated with a parent scene. They are sometimes synonymous with their parent scenes and other times just one of several images associated with their parent scenes. One common example of an image is a multispectral satellite image; another is a land classification raster.\n", - "further-description": [ - { - "title": "Image permissions", - "content": "Images respect the permissions applied to their parent scenes.\n" - } - ] - }, - { - "name": "Uploads", - "description": "Uploads are datasets that a user or application has attempted to upload to Raster Foundry (successfully or unsuccessfully).", - "further-description": [ - { - "title": "Uploads permissions", - "content": "All user uploads are private to that user.\n" - } - ] - }, - { - "name": "Datasources", - "description": "\"Datasources contain information common to all scenes associated with them, such as the number of bands to expect in images associated with that datasource. A datasource can be specific (e.g. a particular earth observation satellite) or generic (e.g. a 3-band sensor on a UAV). All scenes must have an associated datasource.\"\n\n\"Currently, datasources cannot be created through the API and must be requested (preferably as a Github issue in the source repository).\"\n\n\"In the future, users will be able to manage the creation, amendment, and deletion of datasources directly through the API. Also, users will be able to assign transformations like color correction, band composites, or color maps to datasources as a default for themselves and/or their organizations.\"\n" - }, - { - "name": "Tokens", - "description": "Tokens are used to securely identify users and applications accessing the API.\n" - }, - { - "name": "Tools", - "description": "Tools are algorithms that can be applied to projects manually or automatically.\nTools can range from primitive statistical queries, to algebraic functions, to complex logic trees of operations happening in parallel. Tools can be constructed of other tools, custom-defined operations, or both. They can take any number of projects as inputs.\n" - }, - { - "name": "Users", - "description": "Users and third party applications can be managed with the Users resource.\n" - }, - { - "name": "Organizations", - "description": "Organizations are associations of users who share uniform access to permissions-protected resources.\n" - }, - { - "name": "Exports", - "description": "Projects can be exported, but individual scenes and images cannot.\n" - } - ], - "tags": [ - { - "name": "Users", - "description": "Operations involving users and organizations" - }, - { - "name": "Authentication", - "description": "Resources to obtain, use, and delete API tokens" - }, - { - "name": "Imagery", - "description": "Interact with imagery" - }, - { - "name": "Lab", - "description": "Geospatial processing discovery and endpoints" - }, - { - "name": "Statistics", - "description": "Statistical metadata about geospatial data" - } - ], - "paths": { - "/datasources/": { - "x-resource": "Datasources", - "get": { - "summary": "Get a list of datasources", - "description": "Datasources are sensors that share common metadata, like default color corrections. Scenes from\na given datasource can be mosaiced and color corrected together.\n", - "tags": [ - "Datasources" - ], - "parameters": [ - { - "$ref": "#/parameters/owner" - }, - { - "$ref": "#/parameters/name" - } - ], - "responses": { - "200": { - "description": "SUCCESS" - } - } - } - }, - "/uploads/": { - "x-resource": "Uploads", - "get": { - "summary": "Get a list of uploads", - "description": "The uploads API endpoint enables searching, listing, and creating new uploads.\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingBase" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/datasource" - }, - { - "$ref": "#/parameters/uploadStatus" - }, - { - "$ref": "#/parameters/owner" - } - ], - "responses": { - "200": { - "description": "Paginated list of uploads", - "schema": { - "$ref": "#/definitions/UploadPaginated" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Create an upload", - "description": "Create a new upload.\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "Upload", - "in": "body", - "schema": { - "$ref": "#/definitions/UploadCreate" - } - } - ], - "responses": { - "201": { - "description": "Upload created", - "schema": { - "$ref": "#/definitions/Upload" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/uploads/{uuid}/": { - "x-resource": "Uploads", - "get": { - "summary": "Get upload details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Info about upload", - "schema": { - "$ref": "#/definitions/Upload" - } - }, - "404": { - "description": "UUID parameter does not refer to an upload or the user is not able to view the upload it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Update an upload", - "description": "Update an existing upload", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "upload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UploadCreate" - } - } - ], - "responses": { - "204": { - "description": "Update successful (no further processing needed)" - }, - "404": { - "description": "The UUID parameter does not refer to a upload or the user does not have access to the upload it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete an upload", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Deletion successful (no content)" - }, - "404": { - "description": "The UUID parameter does not refer to an upload or the user does not have access to the upload it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/uploads/{uuid}/credentials/": { - "x-resource": "Uploads", - "get": { - "summary": "Get credentials for an AWS S3 bucket", - "tags": [ - "Authentication", - "Imagery" - ], - "parameters": [ - { - "name": "uuid", - "in": "path", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "AWS credentials scoped to the upload bucket with prefix", - "schema": { - "$ref": "#/definitions/UploadCredentialsResponse" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/scenes/": { - "x-resource": "Scenes", - "get": { - "summary": "Get a list of scenes", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingScene" - }, - { - "$ref": "#/parameters/owner" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/maxCloudCover" - }, - { - "$ref": "#/parameters/minCloudCover" - }, - { - "$ref": "#/parameters/minAcquisitionDatetime" - }, - { - "$ref": "#/parameters/maxAcquisitionDatetime" - }, - { - "$ref": "#/parameters/minCreateDatetime" - }, - { - "$ref": "#/parameters/maxCreateDatetime" - }, - { - "$ref": "#/parameters/datasource" - }, - { - "$ref": "#/parameters/month" - }, - { - "$ref": "#/parameters/minDayOfMonth" - }, - { - "$ref": "#/parameters/maxDayOfMonth" - }, - { - "$ref": "#/parameters/maxSunAzimuth" - }, - { - "$ref": "#/parameters/minSunAzimuth" - }, - { - "$ref": "#/parameters/maxSunElevation" - }, - { - "$ref": "#/parameters/minSunElevation" - }, - { - "$ref": "#/parameters/minResolution" - }, - { - "$ref": "#/parameters/maxResolution" - }, - { - "$ref": "#/parameters/tags" - }, - { - "$ref": "#/parameters/bbox" - }, - { - "$ref": "#/parameters/project" - }, - { - "$ref": "#/parameters/ingested" - }, - { - "$ref": "#/parameters/ingestStatus" - } - ], - "responses": { - "200": { - "description": "Paginated list of scenes", - "schema": { - "$ref": "#/definitions/ScenePaginated" - } - } - } - }, - "post": { - "summary": "Create a scene", - "tags": [ - "Imagery" - ], - "responses": { - "201": { - "description": "Successfully created a new scene", - "schema": { - "$ref": "#/definitions/Scene" - } - }, - "400": { - "description": "Client error creating a scene", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/scenes/{uuid}/": { - "x-resource": "Scenes", - "get": { - "summary": "Get scene details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Info about Scene", - "schema": { - "$ref": "#/definitions/Scene" - } - }, - "404": { - "description": "UUID parameter does not refer to an scene or the user is not able to view the scene it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Update a scene", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "scene", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Scene" - } - }, - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Update successful (no further processing needed)" - }, - "404": { - "description": "The UUID parameter does not refer to a scene or the user does not have access to the scene it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a scene", - "description": "Warning: this will delete any associated imagery as well.\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Deletion successful (no content)" - }, - "404": { - "description": "The UUID parameter does not refer to a scene or the user does not have access to the scene it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/scene-grid/{zoom}/{column}/{row}/": { - "x-resource": "Scenes", - "get": { - "summary": "Get scene statistics for a tile", - "tags": [ - "Statistics" - ], - "parameters": [ - { - "$ref": "#/parameters/column" - }, - { - "$ref": "#/parameters/row" - }, - { - "$ref": "#/parameters/zoom" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/maxCloudCover" - }, - { - "$ref": "#/parameters/minCloudCover" - }, - { - "$ref": "#/parameters/minAcquisitionDatetime" - }, - { - "$ref": "#/parameters/maxAcquisitionDatetime" - }, - { - "$ref": "#/parameters/minCreateDatetime" - }, - { - "$ref": "#/parameters/maxCreateDatetime" - }, - { - "$ref": "#/parameters/datasource" - }, - { - "$ref": "#/parameters/month" - }, - { - "$ref": "#/parameters/minDayOfMonth" - }, - { - "$ref": "#/parameters/maxDayOfMonth" - }, - { - "$ref": "#/parameters/maxSunAzimuth" - }, - { - "$ref": "#/parameters/minSunAzimuth" - }, - { - "$ref": "#/parameters/maxSunElevation" - }, - { - "$ref": "#/parameters/minSunElevation" - }, - { - "$ref": "#/parameters/minResolution" - }, - { - "$ref": "#/parameters/maxResolution" - }, - { - "$ref": "#/parameters/tags" - }, - { - "$ref": "#/parameters/ingested" - }, - { - "$ref": "#/parameters/ingestStatus" - } - ], - "responses": { - "200": { - "description": "Statistics for the given bounding box", - "schema": { - "$ref": "#/definitions/SceneGrid" - } - }, - "400": { - "description": "Invalid Parameters", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/projects/": { - "x-resource": "Projects", - "get": { - "summary": "Get a list of projects", - "description": "Only projects that the user has permission to view will be returned.\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingBase" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/owner" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/tags" - } - ], - "responses": { - "200": { - "description": "Paginated list of projects the user is authorized to view", - "schema": { - "$ref": "#/definitions/ProjectPaginated" - } - } - } - }, - "post": { - "summary": "Create a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "project", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Project" - } - } - ], - "responses": { - "202": { - "description": "Project details; at this point scene processes may be in-progress", - "schema": { - "$ref": "#/definitions/Project" - } - } - } - } - }, - "/projects/{uuid}/": { - "x-resource": "Projects", - "get": { - "summary": "Get project details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Info about Project", - "schema": { - "$ref": "#/definitions/Project" - } - }, - "404": { - "description": "UUID parameter does not refer to a project or the user is not able to view the project it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Update a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "project", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Project" - } - }, - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Update successful (no further processing needed)" - }, - "404": { - "description": "The UUID parameter does not refer to a project or the user does not have access to the project it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Deletion successful (no content)" - }, - "404": { - "description": "The UUID parameter does not refer to a project or the user does not have access to the project it refers to", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/projects/{uuid}/areas-of-interest/": { - "get": { - "summary": "Get all areas of interest for a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - } - ], - "responses": { - "200": { - "description": "Json summary of the filters and Polygons that make up AOIs for the given project.", - "schema": { - "$ref": "#/definitions/AoiPaginated" - } - } - } - }, - "post": { - "summary": "Create an area of interest for a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "aoi", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AOI" - } - } - ], - "responses": { - "201": { - "description": "Area of Interest created.", - "schema": { - "$ref": "#/definitions/AOI" - } - }, - "default": { - "description": "Unexpected error.", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/projects/{uuid}/scenes/": { - "x-resource": "Projects", - "get": { - "summary": "Get a list of scenes associated with a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingScene" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/uuid" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/maxCloudCover" - }, - { - "$ref": "#/parameters/minCloudCover" - }, - { - "$ref": "#/parameters/minAcquisitionDatetime" - }, - { - "$ref": "#/parameters/maxAcquisitionDatetime" - }, - { - "$ref": "#/parameters/minCreateDatetime" - }, - { - "$ref": "#/parameters/maxCreateDatetime" - }, - { - "$ref": "#/parameters/datasource" - }, - { - "$ref": "#/parameters/month" - }, - { - "$ref": "#/parameters/minDayOfMonth" - }, - { - "$ref": "#/parameters/maxDayOfMonth" - }, - { - "$ref": "#/parameters/maxSunAzimuth" - }, - { - "$ref": "#/parameters/minSunAzimuth" - }, - { - "$ref": "#/parameters/maxSunElevation" - }, - { - "$ref": "#/parameters/minSunElevation" - }, - { - "$ref": "#/parameters/minResolution" - }, - { - "$ref": "#/parameters/maxResolution" - }, - { - "$ref": "#/parameters/tags" - }, - { - "$ref": "#/parameters/ingested" - }, - { - "$ref": "#/parameters/ingestStatus" - }, - { - "$ref": "#/parameters/pending" - } - ], - "responses": { - "200": { - "description": "Paginated list of scenes associated with this project", - "schema": { - "$ref": "#/definitions/ScenePaginated" - } - } - } - }, - "post": { - "summary": "Add scenes to a project by their ID", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "scenes", - "in": "body", - "required": true, - "description": "UUIDs of scenes to place in project", - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - ], - "responses": { - "201": { - "description": "List of scenes added to project", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Scene" - } - } - } - } - }, - "put": { - "summary": "Replace scenes in a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "scenes", - "in": "body", - "required": true, - "description": "UUIDs of scenes to replace in project", - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - ], - "responses": { - "204": { - "description": "No content, update successful" - } - } - }, - "delete": { - "summary": "Delete scenes from a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "scenes", - "in": "body", - "required": true, - "description": "UUIDs of scenes to delete in project", - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - }, - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "No content, delete successful" - } - } - } - }, - "/projects/{uuid}/scenes/{uuid2}/accept": { - "post": { - "summary": "Approve a pending scene which has passed an area of interest check.", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "$ref": "#/parameters/uuid2" - } - ], - "responses": { - "204": { - "description": "Successfully accepted the Scene." - } - } - } - }, - "/projects/{uuid}/scenes/bulk-add-from-query/": { - "x-resource": "Projects", - "post": { - "summary": "Add scenes to a project based on search parameters", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "combinedSceneQueryParameters", - "description": "combined query parameters for finding scenes to add to this project", - "in": "body", - "schema": { - "$ref": "#/definitions/CombinedSceneQueryParams" - } - } - ], - "responses": { - "201": { - "description": "List of scenes added to project", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Scene" - } - } - } - } - } - }, - "/projects/{uuid}/mosaic/": { - "x-resource": "Projects", - "get": { - "summary": "Get a list of a project's scene IDs and their color-correction parameters", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "An ordered list of scene IDs and corresponding color correction parameters", - "schema": { - "$ref": "#/definitions/MosaicDefinition" - } - } - } - } - }, - "/projects/{uuid}/mosaic/bulk-update-color-corrections/": { - "x-resource": "Projects", - "post": { - "summary": "Save color-correction parameters for all scenes in a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "combinedSceneCorrectionParameters", - "description": "Combined color correction parameters", - "in": "body", - "schema": { - "$ref": "#/definitions/CombinedSceneCorrectionParams" - } - } - ], - "responses": { - "200": { - "description": "Successfully updated all scenes' color correction parameters" - } - } - } - }, - "/projects/{uuid}/mosaic/{uuid2}": { - "x-resource": "Projects", - "get": { - "summary": "Get a project's saved color-correction parameters", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "$ref": "#/parameters/uuid2" - } - ], - "responses": { - "200": { - "description": "Color correction parameters", - "schema": { - "$ref": "#/definitions/ColorCorrection" - } - } - } - }, - "put": { - "summary": "Save color-correction parameters for a particular scene", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "$ref": "#/parameters/uuid2" - }, - { - "name": "updatedColorCorrection", - "description": "Updated color corrections", - "in": "body", - "schema": { - "$ref": "#/definitions/ColorCorrection" - } - } - ], - "responses": { - "204": { - "description": "Successfully updated color correction parameters" - } - } - } - }, - "/projects/{uuid}/order": { - "x-resource": "Projects", - "get": { - "summary": "Get a list of scene IDs belonging to a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Order of scenes in project for mosaic purposes" - } - } - }, - "put": { - "summary": "Set a z-index order for scenes within the specified project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Successfully updated order of scenes in project" - } - } - } - }, - "/areas-of-interest/": { - "get": { - "summary": "Get a list of areas of interest", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/owner" - } - ], - "responses": { - "200": { - "description": "A paginated list of all AOIs the user is authorized to view.", - "schema": { - "$ref": "#/definitions/AoiPaginated" - } - } - } - } - }, - "/areas-of-interest/{uuid}/": { - "get": { - "summary": "Get a specific area of interest", - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Json summary of the given AOI's filters and Polygons.", - "schema": { - "$ref": "#/definitions/AOI" - } - } - } - }, - "put": { - "summary": "Update an area of interest", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "aoi", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AOI" - } - } - ], - "responses": { - "204": { - "description": "Update successful." - }, - "404": { - "description": "The UUID parameter does not refer to a project or the user does not have access to the project it refers to.", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "description": "Unexpected error.", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Deletion successful." - }, - "404": { - "description": "The UUID parameter does not refer to a project or the user does not have access to the project it refers to.", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/map-tokens/": { - "x-resource": "Tokens", - "get": { - "summary": "Get a list of map tokens", - "description": "Map tokens are filtered by user\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/projectId" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/createdBy" - } - ], - "responses": { - "200": { - "description": "Paginated list of map tokens", - "schema": { - "$ref": "#/definitions/MapTokenPaginated" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Create a map token", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "MapToken", - "in": "body", - "schema": { - "$ref": "#/definitions/MapToken" - } - } - ], - "responses": { - "201": { - "description": "Map token created", - "schema": { - "$ref": "#/definitions/MapToken" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/map-tokens/{uuid}/": { - "x-resource": "Tokens", - "get": { - "summary": "Get map token details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Info about map token", - "schema": { - "$ref": "#/definitions/MapToken" - } - }, - "404": { - "description": "UUID parameter does not refer to a map token or the user is not able to view the token it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Update a map token", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "mapToken", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/MapToken" - } - }, - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Update successful (no further processing needed)" - }, - "404": { - "description": "The UUID parameter does not refer to a map token or the user does not have access to the token it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete a map token", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Deletion successful (no content)" - }, - "404": { - "description": "The UUID parameter does not refer to a map token or the user does not have access to the token it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/images/": { - "x-resource": "Images", - "get": { - "summary": "Get a list of images in a project", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingBase" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/sceneId" - }, - { - "$ref": "#/parameters/minRawDataBytes" - }, - { - "$ref": "#/parameters/maxRawDataBytes" - }, - { - "$ref": "#/parameters/minResolution" - }, - { - "$ref": "#/parameters/maxResolution" - }, - { - "$ref": "#/parameters/owner" - } - ], - "responses": { - "200": { - "description": "Paginated list of images", - "schema": { - "$ref": "#/definitions/ImagePaginated" - } - } - } - }, - "post": { - "summary": "Create an image", - "description": "You must associate an image with a scene, either one you create for that image or an existing one that you are adding the newly created image to.\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "image", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Image" - } - } - ], - "responses": { - "202": { - "description": "Project image details; thumbnails and boundary in-progress", - "schema": { - "$ref": "#/definitions/Image" - } - } - } - } - }, - "/images/{uuid}": { - "x-resource": "Images", - "get": { - "summary": "Get the details of an image", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Image details", - "schema": { - "$ref": "#/definitions/Image" - } - }, - "404": { - "description": "Image UUID was not found", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Update an image", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - }, - { - "name": "image", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Image" - } - } - ], - "responses": { - "200": { - "description": "Update successful, no further processing required", - "schema": { - "$ref": "#/definitions/Image" - } - }, - "202": { - "description": "Update successful, further processing required", - "schema": { - "$ref": "#/definitions/Image" - } - }, - "404": { - "description": "Image UUID was not found", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/thumbnails/": { - "x-resource": "Scenes", - "get": { - "summary": "Get a list of thumbnails", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingBase" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/sceneId" - } - ], - "responses": { - "200": { - "description": "Paginated list of thumbnail images", - "schema": { - "$ref": "#/definitions/ThumbnailPaginated" - } - } - } - } - }, - "/thumbnails/{uuid}/": { - "x-resource": "Scenes", - "get": { - "summary": "Get thumbnail details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Details on Thumbnail object", - "schema": { - "$ref": "#/definitions/Thumbnail" - } - }, - "404": { - "description": "Thumbnail UUID was not found", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/tokens/": { - "x-resource": "Tokens", - "get": { - "summary": "Get a list of refresh token summaries\n", - "description": "Note: Only names and identifiers are revealed. Refresh tokens themselves are only revealed once (when they are created) for security purposes.\n", - "tags": [ - "Authentication" - ], - "responses": { - "200": { - "description": "List of refresh token identifiers", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/RefreshToken" - } - } - }, - "404": { - "description": "No refresh tokens found for user", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Request a new refresh token\n", - "parameters": [ - { - "name": "refreshToken", - "in": "body", - "required": true, - "description": "Refresh token object to use when requesting a new JWT", - "schema": { - "type": "object", - "properties": { - "refresh_token": { - "type": "string", - "description": "Refresh token used to generate new JWT" - } - } - } - } - ], - "tags": [ - "Authentication" - ], - "responses": { - "201": { - "description": "Retrieved a new auth token", - "schema": { - "$ref": "#/definitions/AuthToken" - } - }, - "default": { - "description": "Error message if insufficient permissions are present" - } - } - } - }, - "/tokens/{refreshTokenId}/": { - "x-resource": "Tokens", - "delete": { - "parameters": [ - { - "name": "refreshTokenId", - "in": "path", - "required": true, - "type": "string" - } - ], - "summary": "Delete a refresh token and revoke its access", - "tags": [ - "Authentication" - ], - "responses": { - "204": { - "description": "Revocation successful, No Content" - } - } - } - }, - "/tools/": { - "x-resource": "Tools", - "get": { - "summary": "Get a list of tools", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingBase" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/owner" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/minRating" - }, - { - "$ref": "#/parameters/maxRating" - }, - { - "$ref": "#/parameters/toolCategory" - }, - { - "$ref": "#/parameters/toolTag" - }, - { - "$ref": "#/parameters/search" - } - ], - "responses": { - "200": { - "description": "Returns a paginated list of tools", - "schema": { - "$ref": "#/definitions/ToolPaginated" - } - }, - "404": { - "description": "Error message if insufficient permissions or objects not present" - }, - "default": { - "description": "Error message if insufficient permissions" - } - } - }, - "post": { - "summary": "Create a tool", - "tags": [ - "Lab" - ], - "responses": { - "201": { - "description": "Create a new geoprocessing tool", - "schema": { - "$ref": "#/definitions/Tool" - } - }, - "default": { - "description": "Error message if insufficient permissions to create a new tool" - } - } - } - }, - "/tools/{uuid}/": { - "x-resource": "Tools", - "get": { - "summary": "Get details for a particular tool", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Geoprocessing tool record", - "schema": { - "$ref": "#/definitions/Tool" - } - }, - "404": { - "description": "Error message returned if insufficent permissions or tool does not exist" - } - } - }, - "delete": { - "summary": "Delete a tool", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Delete successful" - }, - "default": { - "description": "Delete unsuccessful, either object did not exist or insufficient permissions" - } - } - }, - "put": { - "summary": "Update a tool", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Update an existing geoprocessing tool" - }, - "404": { - "description": "Error message if insufficient permissions to update a tool" - } - } - } - }, - "/tool-tags/": { - "x-resource": "Tools", - "get": { - "summary": "Get a list of tool tags", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/search" - }, - { - "$ref": "#/parameters/owner" - } - ], - "responses": { - "200": { - "description": "Retrieve a paginated list of tool tags", - "schema": { - "$ref": "#/definitions/ToolTagPaginated" - } - }, - "404": { - "description": "Error message if insufficent permissions or no tools exist" - } - } - }, - "post": { - "summary": "Create a tool tag", - "tags": [ - "Lab" - ], - "responses": { - "201": { - "description": "Successfully created a new tag for tools", - "schema": { - "$ref": "#/definitions/ToolTag" - } - }, - "default": { - "description": "Error message if insufficient permissions to create a tool" - } - } - } - }, - "/tool-tags/{uuid}/": { - "x-resource": "Tools", - "get": { - "summary": "Get the details of a tool tag", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Successfully retrieved a tool", - "schema": { - "$ref": "#/definitions/ToolTag" - } - }, - "404": { - "description": "Error message if insufficient permissions or tag does not exist" - } - } - }, - "delete": { - "summary": "Delete a tool tag", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Successfully deleted a tag" - }, - "default": { - "description": "Error message if insufficient permissions to delete a tag" - } - } - }, - "put": { - "summary": "Update a tool tag", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Successfully updated tag" - }, - "default": { - "description": "Unable to delete tag due to insufficient permissions or tag does not exist" - } - } - } - }, - "/tool-categories/": { - "x-resource": "Tools", - "get": { - "summary": "Get a list of tool categories", - "parameters": [ - { - "$ref": "#/parameters/search" - } - ], - "tags": [ - "Lab" - ], - "responses": { - "200": { - "description": "Paginated list of tool categories", - "schema": { - "$ref": "#/definitions/ToolCategoryPaginated" - } - } - } - }, - "post": { - "summary": "Create a tool category", - "tags": [ - "Lab" - ], - "responses": { - "201": { - "description": "Successfully created a new tool category", - "schema": { - "$ref": "#/definitions/ToolCategory" - } - } - } - } - }, - "/tool-categories/{slugLabel}/": { - "x-resource": "Tools", - "get": { - "summary": "Get the details of a tool category", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/slugLabel" - } - ], - "responses": { - "200": { - "description": "Retrieved a single tool category", - "schema": { - "$ref": "#/definitions/ToolCategory" - } - } - } - }, - "put": { - "summary": "Update a tool category", - "tags": [ - "Lab" - ], - "responses": { - "204": { - "description": "Successfully updated a tool category" - } - }, - "parameters": [ - { - "$ref": "#/parameters/slugLabel" - } - ] - }, - "delete": { - "summary": "Delete a tool category", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/slugLabel" - } - ], - "responses": { - "204": { - "description": "Successfully deleted a tool category" - } - } - } - }, - "/tool-runs/": { - "x-resource": "Tools", - "get": { - "summary": "Get a list of tool runs", - "description": "A tool run is a specific implementation of a tool. Tool runs can specify inputs and parameters neccessary to execute a tool.\n", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/project" - }, - { - "$ref": "#/parameters/tool" - }, - { - "$ref": "#/parameters/owner" - }, - { - "$ref": "#/parameters/createdBy" - } - ], - "responses": { - "200": { - "description": "Paginated list of tool runs", - "schema": { - "$ref": "#/definitions/ToolRunPaginated" - } - } - } - }, - "post": { - "summary": "Create a tool run", - "tags": [ - "Lab" - ], - "responses": { - "201": { - "description": "Successfully created tool run", - "schema": { - "$ref": "#/definitions/ToolRun" - } - }, - "400": { - "description": "Incorrect values for creating tool run" - } - } - } - }, - "/tool-runs/{uuid}/": { - "x-resource": "Tools", - "get": { - "summary": "Get details about a tool run", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Details about object", - "schema": { - "$ref": "#/definitions/ToolRun" - } - }, - "404": { - "description": "Error if insufficient permissions or run not found" - } - } - }, - "put": { - "summary": "Update a tool run", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Successfully updated tool run" - }, - "400": { - "description": "Bad parameters for updating tool run" - } - } - }, - "delete": { - "summary": "Delete a tool run", - "tags": [ - "Lab" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Successfully deleted a tool run" - } - } - } - }, - "/exports/": { - "x-resource": "Exports", - "get": { - "summary": "Get a list of exports", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/orderingBase" - }, - { - "$ref": "#/parameters/pageSize" - }, - { - "$ref": "#/parameters/page" - }, - { - "$ref": "#/parameters/organization" - }, - { - "$ref": "#/parameters/project" - }, - { - "$ref": "#/parameters/owner" - }, - { - "$ref": "#/parameters/exportStatus" - } - ], - "responses": { - "200": { - "description": "Paginated list of exports", - "schema": { - "$ref": "#/definitions/ExportPaginated" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "post": { - "summary": "Create an export", - "description": "Create a new export.\n", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "Export", - "in": "body", - "schema": { - "$ref": "#/definitions/ExportCreate" - } - } - ], - "responses": { - "201": { - "description": "Export created", - "schema": { - "$ref": "#/definitions/Export" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/exports/{uuid}/": { - "x-resource": "Exports", - "get": { - "summary": "Get export details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Info about export", - "schema": { - "$ref": "#/definitions/Export" - } - }, - "404": { - "description": "UUID parameter does not refer to an export or the user is not able to view the export it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "put": { - "summary": "Update an export", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "name": "upload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Export" - } - }, - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Update successful (no further processing needed)" - }, - "404": { - "description": "The UUID parameter does not refer to a upload or the user does not have access to the upload it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "default": { - "description": "Unexpected error", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - }, - "delete": { - "summary": "Delete an export", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "204": { - "description": "Deletion successful (no content)" - }, - "404": { - "description": "The UUID parameter does not refer to an export or the user does not have access to the export it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/exports/{uuid}/definition": { - "x-resource": "Exports", - "get": { - "summary": "Get export details", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "Info about export, in export job format", - "schema": { - "$ref": "#/definitions/ExportDefinition" - } - }, - "404": { - "description": "UUID parameter does not refer to an export or the user is not able to view the export it refers to\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - }, - "/exports/{uuid}/files": { - "x-resource": "Exports", - "get": { - "summary": "Get available files for the export", - "tags": [ - "Imagery" - ], - "parameters": [ - { - "$ref": "#/parameters/uuid" - } - ], - "responses": { - "200": { - "description": "List of urls to download exported data", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "404": { - "description": "UUID parameter does not refer to an export or the user is not able to view the export it refers to or export was not finished successfully yet.\n", - "schema": { - "$ref": "#/definitions/Error" - } - } - } - } - } - }, - "parameters": { - "orderingBase": { - "name": "ordering", - "in": "query", - "description": "Field to order results; meaning of label varies based on endpoint", - "type": "array", - "collectionFormat": "pipes", - "items": { - "type": "string", - "enum": [ - "createdAt,desc", - "createdAt,asc", - "modifiedAt,desc", - "modifiedAt,asc" - ] - } - }, - "name": { - "name": "name", - "in": "query", - "description": "name of a datasource to filter to", - "type": "string" - }, - "organization": { - "name": "organization", - "in": "query", - "description": "UUID for organization to filter by", - "type": "string", - "format": "uuid" - }, - "sceneId": { - "name": "sceneId", - "in": "query", - "description": "UUID for scene", - "type": "string", - "format": "uuid" - }, - "projectId": { - "name": "projectId", - "in": "query", - "description": "UUID for project", - "type": "string", - "format": "uuid" - }, - "page": { - "name": "page", - "in": "query", - "description": "Page of results to go to", - "type": "number", - "format": "int32" - }, - "pageSize": { - "name": "pageSize", - "in": "query", - "description": "Number of results per page in paginated response", - "type": "number", - "format": "int32" - }, - "uuid": { - "name": "uuid", - "in": "path", - "required": true, - "type": "string", - "format": "uuid" - }, - "uuid2": { - "name": "uuid2", - "in": "path", - "required": true, - "type": "string", - "format": "uuid" - }, - "slugLabel": { - "name": "slugLabel", - "description": "A url-safe slug label", - "in": "path", - "required": true, - "type": "string" - }, - "minCloudCover": { - "name": "minCloudCover", - "description": "Only return results with cloud cover greater than this number", - "in": "query", - "type": "number", - "minimum": 0, - "maximum": 1, - "required": false - }, - "maxCloudCover": { - "name": "maxCloudCover", - "description": "Only return results with cloud cover less than this number", - "in": "query", - "type": "number", - "required": false - }, - "minAcquisitionDatetime": { - "name": "minAcquisitionDatetime", - "description": "Only return results acquired after this datetime", - "in": "query", - "type": "string", - "required": false, - "format": "datetime" - }, - "maxAcquisitionDatetime": { - "name": "maxAcquisitionDatetime", - "description": "Only return results acquired before this datetime", - "in": "query", - "type": "string", - "required": false, - "format": "datetime" - }, - "minCreateDatetime": { - "name": "minCreateDatetime", - "description": "Only return results created after this datetime", - "in": "query", - "type": "string", - "required": false, - "format": "datetime" - }, - "minSunElevation": { - "name": "minSunElevation", - "description": "Only return results with sun elevation greater than this value", - "in": "query", - "type": "number", - "required": false - }, - "maxSunElevation": { - "name": "maxSunElevation", - "description": "Only return results with sun elevation less than this value", - "in": "query", - "type": "number", - "required": false - }, - "minSunAzimuth": { - "name": "minSunAzimuth", - "description": "Only return results with sun elevation greater than this value", - "in": "query", - "type": "number", - "required": false - }, - "maxSunAzimuth": { - "name": "maxSunAzimuth", - "description": "Only return results with sun azium greater than this value", - "in": "query", - "type": "number", - "required": false - }, - "maxCreateDatetime": { - "name": "maxCreateDatetime", - "description": "Only return results created before this datetime", - "in": "query", - "type": "string", - "required": false, - "format": "datetime" - }, - "tags": { - "name": "tags", - "description": "Only return results that contain these tags", - "in": "query", - "type": "array", - "required": false, - "items": { - "type": "string" - } - }, - "datasource": { - "name": "datasource", - "description": "Only return results belonging to this datasource", - "in": "query", - "type": "array", - "required": false, - "items": { - "type": "string", - "format": "uuid" - } - }, - "uploadStatus": { - "name": "uploadStatus", - "description": "Status of upload", - "in": "query", - "type": "string", - "required": false, - "enum": [ - "CREATED", - "UPLOADING", - "UPLOADED", - "QUEUED", - "PROCESSING", - "COMPLETE", - "FAILED", - "ABORTED" - ] - }, - "month": { - "name": "month", - "description": "Only return results from this month", - "required": false, - "in": "query", - "type": "array", - "items": { - "type": "number", - "format": "int", - "maximum": 12, - "minimum": 1 - } - }, - "minDayOfMonth": { - "name": "minDayOfMonth", - "description": "Only return results with acquisition day-of-month greater-than or equal-to this day", - "in": "query", - "type": "number" - }, - "maxDayOfMonth": { - "name": "maxDayOfMonth", - "description": "Only return results with acquisition day-of-month less-than than or equal-to this day", - "in": "query", - "type": "number" - }, - "orderingScene": { - "name": "ordering", - "in": "query", - "description": "Fields to sort scenes by", - "type": "array", - "collectionFormat": "pipes", - "items": { - "type": "string", - "enum": [ - "createdAt,desc", - "createdAt,asc", - "modifiedAt,desc", - "modifiedAt,asc", - "organization,asc", - "organization,desc", - "datasource,asc", - "datasource,desc", - "month,asc", - "month,desc", - "createDatetime,asc", - "createDatetime,desc", - "acquisitionDatetime,asc", - "acquisitionDatetime,desc", - "sunAzimuth,asc", - "sunAzimuth,desc", - "cloudCover,asc", - "cloudCover,desc" - ] - } - }, - "toolTag": { - "name": "toolTag", - "description": "Only return results that contain these tool tags", - "in": "query", - "type": "array", - "required": false, - "items": { - "type": "string", - "format": "uuid" - } - }, - "toolCategory": { - "name": "toolCategory", - "description": "Only return results that satisfy this category", - "in": "query", - "type": "array", - "required": false, - "items": { - "type": "string" - } - }, - "minRating": { - "name": "minRating", - "description": "Only return results greater than this rating", - "in": "query", - "type": "number", - "required": false - }, - "maxRating": { - "name": "maxRating", - "description": "Only return results less than this rating", - "in": "query", - "type": "number", - "required": false - }, - "search": { - "name": "search", - "description": "Full text search string", - "in": "query", - "type": "string", - "required": false - }, - "minRawDataBytes": { - "name": "minRawDataBytes", - "description": "Only return images larger than this amount of bytes", - "in": "query", - "type": "integer", - "required": false - }, - "maxRawDataBytes": { - "name": "maxRawDataBytes", - "description": "Only return images less than this amount of bytes", - "in": "query", - "type": "integer", - "required": false - }, - "minResolution": { - "name": "minResolution", - "description": "Only return objects that have elements greater than this resolution", - "in": "query", - "type": "number", - "required": false - }, - "maxResolution": { - "name": "maxResolution", - "description": "Only return objects that have elements with a resolution less than this amount", - "in": "query", - "type": "number", - "required": false - }, - "zoom": { - "name": "zoom", - "description": "The zoom level used to split the bbox into a grid", - "in": "path", - "type": "number", - "required": true - }, - "column": { - "name": "column", - "description": "column of tile requested", - "in": "path", - "type": "number", - "required": true - }, - "row": { - "name": "row", - "description": "row of tile requested", - "in": "path", - "type": "number", - "required": true - }, - "bbox": { - "name": "bbox", - "description": "Bounding box of the form \"bbox=southwest_lng,southwest_lat,northeast_lng,northeast_lat\". Delimit multiple with semicolons.", - "in": "query", - "type": "string", - "required": false - }, - "project": { - "name": "project", - "description": "Project uuid to filter only", - "in": "query", - "type": "string", - "format": "uuid", - "required": false - }, - "ingested": { - "name": "ingested", - "description": "Filter by ingest status", - "in": "query", - "type": "boolean", - "required": false - }, - "ingestStatus": { - "name": "ingestStatus", - "description": "Filter by specific ingest status", - "in": "query", - "type": "string", - "required": false - }, - "pending": { - "name": "pending", - "description": "Filter by scene's acceptance for an AOI project", - "in": "query", - "type": "boolean", - "required": false - }, - "tool": { - "name": "toolId", - "description": "Filter by tool's slug label", - "in": "query", - "type": "string", - "format": "uuid", - "required": false - }, - "createdBy": { - "name": "createdBy", - "description": "Filter by creator", - "in": "query", - "type": "string", - "required": false - }, - "owner": { - "name": "owner", - "description": "Filter by object owner", - "in": "query", - "type": "string", - "required": false - }, - "exportStatus": { - "name": "exportStatus", - "description": "Status of export", - "in": "query", - "type": "string", - "required": false, - "enum": [ - "CREATED", - "EXPORTING", - "EXPORTED", - "QUEUED", - "PROCESSING", - "COMPLETE", - "FAILED", - "ABORTED" - ] - } - }, - "definitions": { - "BaseModel": { - "type": "object", - "readOnly": true, - "properties": { - "id": { - "type": "string", - "description": "unique identifier for object", - "format": "uuid" - }, - "organizationId": { - "type": "string", - "description": "uuid for organization" - } - } - }, - "BaseCreate": { - "type": "object", - "properties": { - "owner": { - "type": "string", - "description": "Optional during object creation, owner of an object" - } - } - }, - "MapToken": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/TimeModelMixin" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Human friendly label for map token" - }, - "project": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "UUID" - }, - "name": { - "type": "string" - } - } - } - } - } - ] - }, - "MapTokenPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/MapToken" - } - } - } - } - ] - }, - "MosaicDefinition": { - "type": "object", - "properties": { - "sceneId": { - "type": "string", - "format": "uuid" - }, - "colorCorrection": { - "$ref": "#/definitions/ColorCorrection" - } - } - }, - "AOI": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "format": "uuid" - }, - "area": { - "type": "object" - }, - "filters": { - "$ref": "#/definitions/CombinedSceneQueryParams" - } - } - }, - "ColorCorrection": { - "type": "object", - "properties": { - "redBand": { - "type": "number", - "format": "integer" - }, - "greenBand": { - "type": "number", - "format": "integer" - }, - "blueBand": { - "type": "number", - "format": "integer" - }, - "sigmoidalContrast": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "alpha": { - "type": "number", - "format": "float" - }, - "beta": { - "type": "number", - "format": "float" - } - } - }, - "gamma": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "redGamma": { - "type": "number", - "format": "float" - }, - "greenGamma": { - "type": "number", - "format": "float" - }, - "blueGamma": { - "type": "number", - "format": "float" - } - } - }, - "bandClipping": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "redMax": { - "type": "number", - "format": "int" - }, - "redMin": { - "type": "number", - "format": "int" - }, - "greenMax": { - "type": "number", - "format": "int" - }, - "greenMin": { - "type": "number", - "format": "int" - }, - "blueMax": { - "type": "number", - "format": "int" - }, - "blueMin": { - "type": "number", - "format": "int" - } - } - }, - "tileClipping": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "min": { - "type": "number", - "format": "int" - }, - "max": { - "type": "number", - "format": "int" - } - } - }, - "saturation": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "saturation": { - "type": "number", - "format": "float" - } - } - }, - "equalize": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "autoBalance": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "TimeModelMixin": { - "type": "object", - "readOnly": true, - "properties": { - "createdAt": { - "type": "string", - "description": "timestamp of object creation", - "format": "date-time" - }, - "modifiedAt": { - "type": "string", - "description": "timestamp of object modificiation", - "format": "date-time" - } - } - }, - "UserTrackingMixin": { - "type": "object", - "properties": { - "createdBy": { - "type": "string", - "description": "User who created the object", - "readOnly": true - }, - "modifiedBy": { - "type": "string", - "description": "User who most recently modified the object", - "readOnly": true - }, - "owner": { - "type": "string", - "description": "User who owns the object" - } - } - }, - "User": { - "allOf": [ - { - "$ref": "#/definitions/TimeModelMixin" - }, - { - "type": "object", - "required": [ - "id", - "organizationId", - "role" - ], - "properties": { - "id": { - "type": "string", - "description": "User ID for Raster Foundry" - }, - "organizationId": { - "type": "string", - "format": "uuid", - "description": "UUID of organization to which user belongs" - }, - "role": { - "type": "string", - "description": "User role in organization", - "enum": [ - "USER", - "VIEWER", - "OWNER" - ] - } - } - } - ] - }, - "UserWithOAuth": { - "type": "object", - "properties": { - "user": { - "$ref": "#/definitions/User" - }, - "oauth": { - "$ref": "#/definitions/Auth0User" - } - } - }, - "Auth0User": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "email_verified": { - "type": "boolean" - }, - "username": { - "type": "string" - }, - "phone_number": { - "type": "string" - }, - "phone_verified": { - "type": "boolean" - }, - "user_id": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "identities": { - "type": "array", - "items": { - "type": "string" - } - }, - "user_metadata": { - "type": "object" - }, - "picture": { - "type": "string" - }, - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "given_name": { - "type": "string" - }, - "family_name": { - "type": "string" - } - } - }, - "Auth0UserProfile": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "phone_number": { - "type": "string" - }, - "user_metadata": { - "type": "object" - }, - "username": { - "type": "string" - } - } - }, - "RefreshToken": { - "type": "object", - "properties": { - "device_name": { - "type": "string", - "description": "User created identifier to track refresh tokens" - }, - "id": { - "type": "string", - "description": "Auth0 provided identifier used to delete refresh tokens" - } - } - }, - "AuthToken": { - "type": "object", - "properties": { - "id_token": { - "type": "string", - "description": "JSON Web Token that can be used for authenticating API requests" - }, - "token_type": { - "type": "string", - "description": "Type of token returned by using the refresh token" - } - } - }, - "UserCreate": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Auth0 ID for user" - }, - "organizationId": { - "type": "string", - "format": "uuid", - "description": "UUID for organization that user is being created for" - }, - "role": { - "type": "string", - "description": "Role to create user with in the provided organization", - "enum": [ - "USER", - "VIEWER", - "OWNER" - ] - } - } - }, - "PaginatedResponse": { - "type": "object", - "required": [ - "count", - "hasNext", - "hasPrevious", - "page", - "pageSize" - ], - "properties": { - "count": { - "type": "integer", - "format": "int32", - "readOnly": true, - "description": "number of total objects matching query" - }, - "hasNext": { - "type": "boolean", - "readOnly": true, - "description": "True if more results can be fetched, otherwise false" - }, - "hasPrevious": { - "type": "boolean", - "readOnly": true, - "description": "True if previous results can be fetched, otherwise false" - }, - "page": { - "type": "integer", - "readOnly": true, - "format": "int32", - "description": "Current page of paginated query results" - }, - "pageSize": { - "type": "integer", - "format": "int32", - "description": "Number of results per page", - "readOnly": true - } - } - }, - "UserPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } - } - } - } - ] - }, - "ScenePaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Scene" - } - } - } - } - ] - }, - "OrganizationPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Organization" - } - } - } - } - ] - }, - "Organization": { - "allOf": [ - { - "$ref": "#/definitions/TimeModelMixin" - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Organization" - }, - "name": { - "type": "string", - "description": "Display name for organization" - } - }, - "required": [ - "name", - "id" - ] - } - ] - }, - "Scene": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The display name of the project" - }, - "ingestSizeBytes": { - "type": "integer", - "description": "Size of ingested data in bytes." - }, - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - }, - "tags": { - "type": "array", - "description": "Tags associated with image", - "items": [ - { - "type": "string" - } - ] - }, - "images": { - "type": "array", - "items": { - "$ref": "#/definitions/Image" - } - }, - "thumbnails": { - "type": "array", - "items": { - "$ref": "#/definitions/Thumbnail" - } - }, - "dataSource": { - "type": "string", - "format": "uuid", - "description": "Data source scene originated from" - }, - "dataFootprint": { - "description": "polygon for which this scene has data", - "type": "object", - "readOnly": true - }, - "tileFootprint": { - "type": "object", - "description": "polygon enclosing this scene", - "readOnly": true - }, - "sceneMetadata": { - "type": "object", - "description": "Metadata about the scene -- some aspects we will eventually want to nail down that will\nbe fairly common and/or required for scenes\n" - }, - "metadataFiles": { - "type": "array", - "description": "Metadata files that should be present for processing all\nimages in a scene (e.g. relevant .mtl files or .xml)\n", - "items": [ - { - "type": "string" - } - ] - }, - "filterFields": { - "$ref": "#/definitions/FilterFields" - }, - "statusFields": { - "$ref": "#/definitions/StatusFields" - } - } - } - ] - }, - "FilterFields": { - "type": "object", - "properties": { - "cloudCover": { - "type": "number", - "format": "float32", - "description": "Proportion of cloud coverage for scene" - }, - "acquisitionDate": { - "type": "string", - "format": "datetime", - "description": "Date scene was acquired from instrument (e.g. satellite, drone)" - }, - "sunAzimuth": { - "type": "number", - "format": "float32", - "description": "Azimuth of the sun" - }, - "sunElevation": { - "type": "number", - "format": "float32", - "description": "Elevation of the sun" - } - } - }, - "StatusFields": { - "type": "object", - "properties": { - "thumbnailStatus": { - "type": "string", - "description": "status of thumbnail generation", - "enum": [ - "SUCCESS", - "FAILURE", - "PARTIALFAILURE", - "QUEUED", - "PROCESSING" - ] - }, - "footprintStatus": { - "type": "string", - "description": "status of footprint generation", - "enum": [ - "SUCCESS", - "FAILURE", - "PARTIALFAILURE", - "QUEUED", - "PROCESSING" - ] - }, - "ingestStatus": { - "type": "string", - "description": "status of ingest", - "enum": [ - "NOTINGESTED", - "TOBEINGESTED", - "INGESTING", - "INGESTED", - "FAILED" - ] - } - } - }, - "SceneGrid": { - "type": "array", - "items": [ - { - "type": "number", - "format": "integer" - } - ], - "readOnly": true - }, - "Project": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The display name of the project" - }, - "slugLabel": { - "type": "string", - "description": "URL-safe version of name", - "readOnly": true - }, - "description": { - "type": "string", - "description": "Long-form description of the project" - }, - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - }, - "tileVisibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - }, - "tags": { - "type": "array", - "items": [ - { - "type": "string" - } - ] - }, - "extent": { - "type": "object", - "description": "GeoJSON Geometry of project extent" - }, - "manualOrder": { - "type": "boolean", - "description": "Is true if project scenes are manually ordered" - }, - "isAOIProject": { - "type": "boolean", - "description": "Is true if project is an area-of-interest project" - } - } - } - ] - }, - "Image": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - }, - "filename": { - "type": "string", - "description": "Name of the image file" - }, - "resolutionMeters": { - "type": "number", - "description": "Size of pixel in meters" - }, - "sourceUri": { - "type": "string", - "description": "URI to original source. This should include a protocol-like prefix to identify where it is located http://, s3://, etc." - }, - "rawDataBytes": { - "type": "integer", - "description": "Size of original uploaded imagery in bytes" - }, - "bands": { - "type": "array", - "description": "list of band types for image; a single band denotes a single band image, multiple bands should be listed in order (e.g if it is an RGB tiff then bands should be [red, green blue])", - "items": { - "$ref": "#/definitions/Band" - } - }, - "scene": { - "type": "string", - "format": "uuid", - "description": "Scene that image is associated with" - }, - "image_metadata": { - "type": "object", - "description": "Metadata about this image" - }, - "metadataFiles": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Metadata files that should be present for processing all\nimages in a scene (e.g. relevant .mtl files or .xml)\n" - } - }, - "required": [ - "filename", - "sourceUri" - ] - } - ] - }, - "ProjectPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Project" - } - } - } - } - ] - }, - "AoiPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/AOI" - } - } - } - } - ] - }, - "ImagePaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Image" - } - } - } - } - ] - }, - "Band": { - "type": "object", - "properties": { - "image": { - "type": "string", - "format": "UUID" - }, - "name": { - "type": "string", - "description": "String representation of band name" - }, - "number": { - "type": "integer", - "description": "Band number for image" - }, - "wavelength": { - "type": "array", - "items": { - "type": "integer" - } - } - } - }, - "Thumbnail": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "type": "object", - "properties": { - "widthPx": { - "type": "integer", - "format": "int32", - "description": "The width of the thumbnail, in pixels" - }, - "sceneId": { - "type": "string", - "format": "uuid", - "description": "Scene that image is associated with" - }, - "heightPx": { - "type": "integer", - "format": "int32", - "description": "The height of the thumbnail, in pixels" - }, - "thumbnailSize": { - "type": "string", - "description": "Summary of size", - "enum": [ - "SMALL", - "LARGE", - "SQUARE" - ] - }, - "url": { - "type": "string", - "format": "uri", - "description": "A client-accessible URL pointing to the image file" - } - } - } - ] - }, - "ThumbnailPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Thumbnail" - } - } - } - } - ] - }, - "Tool": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Title of tool displayed to users" - }, - "description": { - "type": "string", - "description": "A long description of the tool, including is use-cases,\npurpose, and any potential references\n" - }, - "organization": { - "description": "The owning organization of the Tool", - "items": { - "$ref": "#/definitions/Organization" - } - }, - "requirements": { - "type": "string", - "description": "A brief description of requirements, including any relevant band requirements" - }, - "tags": { - "type": "array", - "description": "Tool tags associated with a tool", - "items": { - "type": "string" - } - }, - "categories": { - "type": "array", - "description": "Category of geoprocessing tool", - "items": { - "type": "string" - } - }, - "license": { - "type": "string", - "description": "Usage license of tool" - }, - "compatibleDatasources": { - "type": "array", - "description": "Datasources that can be used with this geoprocessing tool", - "items": { - "type": "string" - } - }, - "stars": { - "type": "number", - "description": "User rating of geoprocessing tool" - }, - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - } - } - } - ] - }, - "ToolPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Tool" - } - } - } - } - ] - }, - "ToolTag": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "label": { - "type": "string", - "description": "User displayed label" - } - } - } - ] - }, - "ToolTagPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/ToolTag" - } - } - } - } - ] - }, - "ToolCategory": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "type": "object", - "properties": { - "category": { - "type": "string", - "description": "User displayed label for category" - }, - "slugLabel": { - "type": "string", - "description": "Slug label for use in urls" - } - } - } - ] - }, - "ToolCategoryPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/ToolCategory" - } - } - } - } - ] - }, - "ToolRun": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "type": "object", - "properties": { - "execution_parameters": { - "type": "object", - "description": "Parameters for running the tool" - }, - "project": { - "type": "string", - "format": "uuid", - "description": "Project with which this run is associated" - }, - "tool": { - "type": "string", - "format": "uuid", - "description": "Tool being run" - }, - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - } - } - } - ] - }, - "ToolRunPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/ToolRun" - } - } - } - } - ] - }, - "Error": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - } - } - }, - "OrgParams": { - "type": "object", - "description": "Organization parameters to filter scenes", - "properties": { - "organizations": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - }, - "UserParams": { - "type": "object", - "description": "User parameters to filter scenes", - "properties": { - "createdBy": { - "type": "string" - }, - "modifiedBy": { - "type": "string" - }, - "owner": { - "type": "string" - } - } - }, - "TimestampParams": { - "type": "object", - "description": "Timestamp parameters to filter scenes", - "properties": { - "minCreateDatetime": { - "type": "string", - "format": "datetime" - }, - "maxCreateDateTime": { - "type": "string", - "format": "datetime" - }, - "minModifiedDatetime": { - "type": "string", - "format": "datetime" - }, - "maxModifiedDatetime": { - "type": "string", - "format": "datetime" - } - } - }, - "UploadCreate": { - "type": "object", - "allOf": [ - { - "$ref": "#/definitions/BaseCreate" - }, - { - "type": "object", - "properties": { - "uploadStatus": { - "type": "string", - "description": "Status of upload", - "enum": [ - "CREATED", - "UPLOADING", - "UPLOADED", - "QUEUED", - "PROCESSING", - "COMPLETE", - "FAILED", - "ABORTED" - ] - }, - "files": { - "type": "array", - "items": { - "type": "string" - } - }, - "uploadType": { - "type": "string", - "description": "Source of files and uploads", - "enum": [ - "DROPBOX", - "S3", - "LOCAL" - ] - }, - "fileType": { - "type": "string", - "description": "type of data being uploaded, limited to two options right now", - "enum": [ - "GEOTIFF", - "GEOTIFF_WITH_METADATA" - ] - }, - "datasource": { - "type": "string", - "description": "datasource of tiffs being uploaded", - "format": "uuid" - }, - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - }, - "projectId": { - "type": "string", - "format": "uuid", - "description": "during the import process, add scenes to a project if specified" - } - } - } - ] - }, - "Upload": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "$ref": "#/definitions/UploadCreate" - }, - { - "type": "object", - "properties": { - "files": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "object" - } - } - } - ] - }, - "UploadPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Upload" - } - } - } - } - ] - }, - "UploadCredentials": { - "type": "object", - "properties": { - "AccessKeyId": { - "type": "string" - }, - "SecretAccessKey": { - "type": "string" - }, - "SessionToken": { - "type": "string" - }, - "Expiration": { - "type": "string", - "format": "datetime" - } - } - }, - "UploadCredentialsResponse": { - "type": "object", - "properties": { - "credentials": { - "$ref": "#/definitions/UploadCredentials" - }, - "bucketPath": { - "type": "string" - } - } - }, - "SceneParams": { - "type": "object", - "description": "scene params", - "properties": { - "maxCloudCover": { - "type": "number", - "format": "float32" - }, - "minCloudCover": { - "type": "number", - "format": "float32" - }, - "minAcquisitionDatetime": { - "type": "string", - "format": "datetime" - }, - "maxAcquisitionDatetime": { - "type": "string", - "format": "datetime" - }, - "datasource": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "month": { - "type": "array", - "items": { - "type": "number", - "format": "int" - } - }, - "minDayOfMonth": { - "type": "number", - "format": "int" - }, - "maxDayOfMonth": { - "type": "number", - "format": "int" - }, - "maxSunAzimuth": { - "type": "number", - "format": "float32" - }, - "minSunAzimuth": { - "type": "number", - "format": "float32" - }, - "maxSunElevation": { - "type": "number", - "format": "float32" - }, - "minSunElevation": { - "type": "number", - "format": "float32" - }, - "bbox": { - "type": "string" - }, - "point": { - "type": "string" - }, - "project": { - "type": "string", - "format": "uuid" - }, - "ingested": { - "type": "boolean" - }, - "ingestStatus": { - "type": "string", - "enum": [ - "NOTINGESTED", - "TOBEINGESTED", - "INGESTING", - "INGESTED", - "FAILED" - ] - } - } - }, - "ImageParams": { - "type": "object", - "description": "image params", - "properties": { - "minRawDataBytes": { - "type": "number", - "format": "int" - }, - "maxRawDataBytes": { - "type": "number", - "format": "int" - }, - "minResolution": { - "type": "number", - "format": "float32" - }, - "maxResolution": { - "type": "number", - "format": "float32" - }, - "scene": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - }, - "CombinedSceneQueryParams": { - "type": "object", - "description": "Combined query parameters for filtering scenes", - "discriminator": "type", - "properties": { - "orgParams": { - "$ref": "#/definitions/OrgParams" - }, - "userParams": { - "$ref": "#/definitions/UserParams" - }, - "timestampParams": { - "$ref": "#/definitions/TimestampParams" - }, - "sceneParams": { - "$ref": "#/definitions/SceneParams" - }, - "imageParams": { - "$ref": "#/definitions/ImageParams" - } - } - }, - "SceneCorrectionParam": { - "type": "object", - "description": "A paired scene ID and color correction parameter list", - "properties": { - "sceneId": { - "type": "string", - "format": "uuid" - }, - "params": { - "$ref": "#/definitions/ColorCorrection" - } - } - }, - "CombinedSceneCorrectionParams": { - "type": "array", - "description": "Combined color correction parameters for multiple scenes", - "items": { - "$ref": "#/definitions/SceneCorrectionParam" - } - }, - "ExportCreate": { - "type": "object", - "allOf": [ - { - "$ref": "#/definitions/BaseCreate" - }, - { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "format": "uuid" - }, - "sceneIds": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "exportStatus": { - "type": "string", - "description": "Status of export", - "enum": [ - "CREATED", - "EXPORTING", - "EXPORTED", - "QUEUED", - "PROCESSING", - "COMPLETE", - "FAILED", - "ABORTED" - ] - }, - "exportType": { - "type": "string", - "description": "Source of exports", - "enum": [ - "DROPBOX", - "S3", - "LOCAL" - ] - }, - "visibility": { - "type": "string", - "description": "Level of restriction on viewing", - "enum": [ - "PUBLIC", - "ORGANIZATION", - "PRIVATE" - ] - }, - "toolRunId": { - "type": "string", - "format": "uuid", - "description": "Optional id of a ToolRun. Specifying this will perform an RDD-AST-based export job." - }, - "exportOptions": { - "$ref": "#/definitions/ExportOptions" - } - } - } - ] - }, - "Export": { - "allOf": [ - { - "$ref": "#/definitions/BaseModel" - }, - { - "$ref": "#/definitions/UserTrackingMixin" - }, - { - "$ref": "#/definitions/ExportCreate" - }, - { - "type": "object", - "properties": { - "exportStatus": { - "type": "string", - "description": "Status of export", - "enum": [ - "CREATED", - "EXPORTING", - "EXPORTED", - "QUEUED", - "PROCESSING", - "COMPLETE", - "FAILED", - "ABORTED" - ] - } - } - } - ] - }, - "ExportPaginated": { - "allOf": [ - { - "$ref": "#/definitions/PaginatedResponse" - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/Export" - } - } - } - } - ] - }, - "ExportOptions": { - "type": "object", - "description": "export params", - "properties": { - "bands": { - "type": "array", - "description": "bands in the exported geotiffs", - "items": { - "type": "integer" - } - }, - "rasterSize": { - "type": "integer", - "description": "desired tiff size after export" - }, - "crs": { - "type": "integer", - "description": "epsg projection code" - }, - "mask": { - "type": "object", - "description": "geojson multipolygon" - }, - "stitch": { - "type": "boolean", - "description": "stitch tiles into a single geotiff if possible" - }, - "crop": { - "type": "boolean", - "description": "crop stitched raster by provided mask if possible" - } - } - }, - "ExportDefinition": { - "type": "object", - "properties": { - "exportStatus": { - "type": "string", - "description": "Status of export", - "enum": [ - "NOTEXPORTED", - "TOBEEXPORTED", - "EXPORTING", - "EXPORTED", - "FAILED" - ] - }, - "input": { - "$ref": "#/definitions/InputExportDefinition" - }, - "output": { - "$ref": "#/definitions/OutputExportDefinition" - } - } - }, - "InputExportDefinition": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "format": "uuid" - }, - "resolution": { - "type": "integer", - "description": "required resolution (currently it's zoom level)" - }, - "mask": { - "type": "object", - "description": "geojson multipolygon" - }, - "layers": { - "type": "object", - "properties": { - "layerId": { - "type": "string", - "format": "uuid" - }, - "ingestLocation": { - "type": "string", - "format": "uuid" - }, - "colorCorrections": { - "$ref": "#/definitions/ColorCorrection" - } - } - } - } - }, - "OutputExportDefinition": { - "type": "object", - "properties": { - "rasterSize": { - "type": "integer", - "description": "desired tiff size after export" - }, - "crs": { - "type": "integer", - "description": "epsg projection code" - }, - "stitch": { - "type": "boolean", - "description": "stitch tiles into a single geotiff if possible" - }, - "crop": { - "type": "boolean", - "description": "crop stitched raster by provided mask if possible" - }, - "source": { - "type": "string", - "format": "uuid", - "description": "output export path" - }, - "render": { - "$ref": "#/definitions/Render" - }, - "dropboxCredential": { - "type": "string", - "description": "Dropbox token" - } - } - }, - "Render": { - "type": "object", - "properties": { - "operation": { - "type": "string", - "description": "currently useless Field" - }, - "bands": { - "type": "array", - "description": "bands in the exported geotiffs", - "items": { - "type": "integer" - } - } - } - } - } -} From 5af48b24c1a107eeaf7cd81e3c4157c51afb88ca Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Wed, 1 Nov 2017 17:14:30 -0700 Subject: [PATCH 04/10] Updates with warning, naming --- README.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c2ce07b6..533ba653f 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,28 @@ NDVI, Digital Elevation Models, mosaics, etc. The goal is for all major providers of imagery and other earth data to expose their data as spatio-temporal asset catalogs, so that new code doesn't need to be written whenever a new JSON-based REST API comes out that makes its data available in a slightly different way. This will enable standard library components in many languages. +## WARNING + +The specification is currently in a fairly incomplete state, as there were a few open questions from the +[boulder sprint](https://github.com/radiantearth/boulder-sprint) that need to be resolved, with the various related +specifications moved over, updated and synchronized. + +The top things to be done are: + +* Move static catalog work from [boulder sprint repo](https://github.com/radiantearth/boulder-sprint/tree/master/specs/flat_file) to this repo. +* Align [core-api-examples](https://github.com/radiantearth/boulder-sprint/tree/master/specs/core-api) with each other +to get to a final example. +* Update static catalog with latest thinking in [core-api examples](https://github.com/radiantearth/boulder-sprint/tree/master/specs/core-api) for linking and asset metadata. +* Update names throughout specs to the 'Items'/'Item'/'Asset' +* Align swagger spec with static catalog return types + +Once the core things are done we can release a named version and then aim to get many more people to implement. + +If you did not participate in the boulder sprint but want to help out with the above tasks then join us +on [our gitter](https://gitter.im/Imagery-Catalog-API-Team/Lobby) + + + ## Design Overview An important core principle of the STAC design is to embrace best practices of making data available on the web (like @@ -23,9 +45,9 @@ no moving parts, no clusters or databases to maintain. The goal of STAC is to ex possible, so the static catalog offers a very lower barrier to entry for anyone with geospatial assets to make their data searchable. -#### Active Catalog +#### Catalog API -An active catalog is a RESTful API that responds to queries (like give me all imagery in Oahu gathered on January 15, 2017). +A catalog API is a RESTful API that responds to queries (like give me all imagery in Oahu gathered on January 15, 2017). But its structure and responses are designed to mirror the static catalog, so the same client and crawler tools can consume it. It generally indexes data for efficient responses, and aims to be easy for existing API's to implement as a more standard interface for clients to consume. It is specified in OpenAPI 2.0 (swagger), and will move to OpenAPI 3.0 once the codegen From 537732be6e05300a2c21b2696fe386ab80cc2074 Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Wed, 1 Nov 2017 18:00:23 -0700 Subject: [PATCH 05/10] updated naming to remove the - --- README.md | 6 +++--- implementations.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 533ba653f..99a3bac75 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ ## About -The Spatio-Temporal Asset Catalog (STAC) specification aims to standardize the way geospatial assets are exposed online and queried. A 'spatio-temporal asset' is any file that represents information about the earth captured in a certain space and +The SpatioTemporal Asset Catalog (STAC) specification aims to standardize the way geospatial assets are exposed online and queried. A 'spatiotemporal asset' is any file that represents information about the earth captured in a certain space and time. The initial focus is primarily remotely-sensed imagery (from satellites, but also planes, drones, balloons, etc), but the core is designed to be extensible to SAR, full motion video, point clouds, hyperspectral, LiDAR and derived data like NDVI, Digital Elevation Models, mosaics, etc. -The goal is for all major providers of imagery and other earth data to expose their data as spatio-temporal asset catalogs, +The goal is for all major providers of imagery and other earth data to expose their data as spatiotemporal asset catalogs, so that new code doesn't need to be written whenever a new JSON-based REST API comes out that makes its data available in a slightly different way. This will enable standard library components in many languages. ## WARNING @@ -55,7 +55,7 @@ tooling is stronger there. An active catalog will often be populated by a static #### Core Metadata and Profiles -The Spatio-Temporal Asset Metadata specification defines the core fields that all assets must make available for searching +The SpatioTemporal Asset Metadata specification defines the core fields that all assets must make available for searching in a catalog. Vendors can extend those core fields for the metadata they want to make available, and the community is starting to define shared profiles, with 'earth observation' (satellite imagery) being the first one. This repo has the json profile of STAM, so it can evolve with the rest of the STAC spec more easily. diff --git a/implementations.md b/implementations.md index 73c8d6129..ed7feee60 100644 --- a/implementations.md +++ b/implementations.md @@ -1,6 +1,6 @@ # Implementations -This document lists the various implementations of the Spatio-Temporal Asset Catalog specification. Contributions +This document lists the various implementations of the SpatioTemporal Asset Catalog specification. Contributions to the spec should be based on experience building API's for imagery and other geo-asset catalogs, so suggested changes / improvements to the spec should be based on some software listed here. All listed implementations should have a link to a live server or static catalog that indexes real data, though they do not have to From 961a923fe23cab429b32d51a894e9c311ba1be93 Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Wed, 1 Nov 2017 18:35:19 -0700 Subject: [PATCH 06/10] Updates with issue links --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 99a3bac75..03810f0b3 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,14 @@ specifications moved over, updated and synchronized. The top things to be done are: -* Move static catalog work from [boulder sprint repo](https://github.com/radiantearth/boulder-sprint/tree/master/specs/flat_file) to this repo. -* Align [core-api-examples](https://github.com/radiantearth/boulder-sprint/tree/master/specs/core-api) with each other -to get to a final example. -* Update static catalog with latest thinking in [core-api examples](https://github.com/radiantearth/boulder-sprint/tree/master/specs/core-api) for linking and asset metadata. -* Update names throughout specs to the 'Items'/'Item'/'Asset' -* Align swagger spec with static catalog return types +* Move static catalog work from [boulder sprint repo](https://github.com/radiantearth/boulder-sprint/tree/master/specs/flat_file) to this repo. - #26 +* Compare [core-api-examples](https://github.com/radiantearth/boulder-sprint/tree/master/specs/core-api) with each other +to get to a final decision on Item & Asset JSON - #24 +* Finalize link structure between assets & items - #22 +* Decide how to describe "Product" level information for Assets and Items - #23 +* Update json examples for link structure, asset metadata and product level information - . +* Update specs to the 'Items'/'Item'/'Asset', as well as updates from previous items - #27 +* Align catalog API swagger spec with static catalog / stam JSON and return types. - #29 Once the core things are done we can release a named version and then aim to get many more people to implement. From bf457395e897b7fd35271625dfe419d838bd941d Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Wed, 1 Nov 2017 20:58:06 -0700 Subject: [PATCH 07/10] link updates So they actually work. --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 03810f0b3..27772fe21 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,13 @@ specifications moved over, updated and synchronized. The top things to be done are: -* Move static catalog work from [boulder sprint repo](https://github.com/radiantearth/boulder-sprint/tree/master/specs/flat_file) to this repo. - #26 +* Move static catalog work from [boulder sprint repo](https://github.com/radiantearth/boulder-sprint/tree/master/specs/flat_file) to this repo. - [#26](https://github.com/radiantearth/stac-spec/issues/26) * Compare [core-api-examples](https://github.com/radiantearth/boulder-sprint/tree/master/specs/core-api) with each other -to get to a final decision on Item & Asset JSON - #24 -* Finalize link structure between assets & items - #22 -* Decide how to describe "Product" level information for Assets and Items - #23 -* Update json examples for link structure, asset metadata and product level information - . -* Update specs to the 'Items'/'Item'/'Asset', as well as updates from previous items - #27 -* Align catalog API swagger spec with static catalog / stam JSON and return types. - #29 +to get to a final decision on Item & Asset JSON - [#24](https://github.com/radiantearth/stac-spec/issues/24) +* Finalize link structure between assets & items - [#22](https://github.com/radiantearth/stac-spec/issues/22) +* Decide how to describe "Product" level information for Assets and Items - [#23](https://github.com/radiantearth/stac-spec/issues/23) +* Update specs & json examples to the 'Items'/'Item'/'Asset', as well as updates from previous items - [#27](https://github.com/radiantearth/stac-spec/issues/27) +* Align catalog API swagger spec with static catalog / stam JSON and return types. - [#29](https://github.com/radiantearth/stac-spec/issues/29) Once the core things are done we can release a named version and then aim to get many more people to implement. From 818ba69b308692da56e45526fd0a958bea46477e Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Mon, 6 Nov 2017 15:36:30 -0800 Subject: [PATCH 08/10] updated gitter link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 27772fe21..73f77111a 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ of key decisions. The best way to contribute is to try to implement the specification and give feedback on what worked well and what could be improved. Currently there are a few major things to still work out, so if you are interested in implementing you should -jump on our [gitter channel](https://gitter.im/Imagery-Catalog-API-Team/Lobby#) (TODO: update this link?) and check in +jump on our [gitter channel](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby) (TODO: update this link?) and check in on how ready the spec is and how you can support it. For the next bit of time you'll probably be encouraged to just do what feels best in some areas, so we can capture best practices and standardize. From f335cc51733a4c61dbfffb35b6398dd4b00f79da Mon Sep 17 00:00:00 2001 From: Josh Fix Date: Tue, 7 Nov 2017 12:37:22 -0500 Subject: [PATCH 09/10] refactored features -> items --- spec/spec.yaml | 467 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 467 insertions(+) create mode 100644 spec/spec.yaml diff --git a/spec/spec.yaml b/spec/spec.yaml new file mode 100644 index 000000000..02a3af34a --- /dev/null +++ b/spec/spec.yaml @@ -0,0 +1,467 @@ +swagger: '2.0' +info: + title: A Proposed Imagery Catalog API using the OGC WFS 3.0 standard as a starting point + version: 0.0.3 + description: >- + This document is a proposal draft. Though it is the first one in this folder it is by no means the only one. If others are + contributed they will all be considered equally on Day 1 of the Imagery Catalog API Sprint. This is simply the first one proposed. + If you have additional ideas feel free to either fork this and propose Pull Requests, or create your own new spec-draft and add to this folder. + + + WARNING - THIS IS WORK IN PROGRESS. + + + WARNING - This is a Swagger / OpenAPI 2.0 variant. A final spec should be in OpenAPI 3.0, but this is used for quick code generation purposes. + + contact: + name: Acme Corporation + email: info@example.org + url: 'http://example.org/' + license: + name: CC-BY 4.0 license + url: 'https://creativecommons.org/licenses/by/4.0/' +schemes: + - http +host: data.example.org +basePath: / +paths: + /api: + get: + summary: the API description - this document + operationId: getApiDescription + tags: + - Capabilities + produces: + - application/json + responses: + '200': + description: >- + The formal documentation of this API according to the OpenAPI + specification, version 3.0. I.e., this document. + schema: + type: object + default: + description: An error occured. + schema: + $ref: '#/definitions/exception' + /items: + get: + summary: Retrieve items matching filters + description: >- + Description goes here + operationId: getItems + tags: + - Items + parameters: + - $ref: '#/parameters/bbox' + - $ref: '#/parameters/time' + - $ref: '#/parameters/filter' + - $ref: '#/parameters/limit' + - $ref: '#/parameters/next' + produces: + - application/geo+json + responses: + '200': + description: >- + Description here + schema: + $ref: '#/definitions/ItemCollection' + default: + description: An error occured. + schema: + $ref: '#/definitions/exception' + post: + summary: Retrieve items matching filters + operationId: getItemsPost + tags: + - Items + produces: + - application/geo+json + responses: + '200': + description: >- + Description here + schema: + $ref: '#/definitions/ItemCollection' + default: + description: An error occured. + schema: + $ref: '#/definitions/exception' + '/items/{id}': + get: + summary: Retreive item by id + operationId: getItem + tags: + - Items + parameters: + - $ref: '#/parameters/id' + produces: + - application/geo+json + responses: + '200': + description: An item. + schema: + $ref: '#/definitions/Item' + '404': + description: 'The item with id {id} does not exist.' + schema: + $ref: '#/definitions/exception' + default: + description: An error occured. + schema: + $ref: '#/definitions/exception' +parameters: + next: + name: next + in: query + type: string + description: Token for the next set of paginated data. + limit: + name: limit + in: query + type: integer + description: Defines the maximum number or results retruned by the API + time: + name: time + type: array + description: Adheres to RFC3339 + items: + type: string + in: query + collectionFormat: csv + bbox: + name: bbox + in: query + description: >- + Only items that have a geometry that intersects the bounding box are + selected. The bounding box is provided as four numbers: + + * West, South, East, North + type: array + items: + type: number + minItems: 4 + maxItems: 4 + minimum: -180 + maximum: 180 + collectionFormat: csv + filter: + name: filter + in: query + type: string + description: A placeholder for a future filter implementation + id: + name: id + in: path + description: The id of an item + required: true + type: string +definitions: + exception: + type: object + required: + - code + properties: + code: + type: string + description: + type: string + bbox: + description: >- + West, South, East, North + type: array + items: + minItems: 4 + maxItems: 4 + type: number + minimum: -180 + maximum: 180 + example: + - -180 + - -90 + - 180 + - 90 + link: + type: object + required: + - href + properties: + href: + type: string + rel: + type: string + example: prev + type: + type: string + example: application/geo+json + hreflang: + type: string + example: en + ItemCollection: + type: object + required: + - items + - type + properties: + type: + type: string + enum: + - ItemCollection + items: + type: array + items: + $ref: '#/definitions/Item' + nextPageToken: + type: string + description: A token to obtain the next paginated data set + links: + $ref: '#/definitions/ItemCollectionLinks' + Item: + type: object + required: + - id + - type + - geometry + - links + - properties + properties: + id: + type: string + example: path/to/example.tif + description: 'unique ID, potentially link to file' + bbox: + $ref: '#/definitions/bbox' + geometry: + type: object + description: footprint of the item + type: + type: string + description: The GeoJSON type + enum: + - Item + properties: + $ref: '#/definitions/ItemProperties' + links: + $ref: '#/definitions/ItemLinks' + ItemProperties: + type: object + required: + - start_date + - end_date + description: >- + provides the core metatdata fields plus extensions + properties: + start_date: + $ref: '#/definitions/Time' + end_date: + $ref: '#/definitions/Time' + provider: + type: string + description: Information about the provider + license: + type: string + description: Data license name based on SPDX License List + additionalProperties: + type: object + ItemLinks: + type: object + required: + - self + - thumbnail + properties: + self: + type: string + thumbnail: + type: string + ItemCollectionLinks: + type: object + properties: + next: + type: string + format: url + description: A URL to obtain the next paginated data set. If not present, the client should utilize the `nextPageToken`. + Time: + type: string + description: Adheres to RFC3339 + StringSet: + type: array + items: + type: string + Int64Set: + type: array + items: + type: integer + format: int64 + TimeRange: + description: begin and end timestamps adhering to RFC3339 + properties: + begin: + type: string + end: + type: string + Int64Range: + description: An integer range with begin and end + properties: + begin: + type: integer + format: int64 + end: + type: integer + format: int64 + DoubleRange: + description: A double range with begin and end + properties: + begin: + type: number + format: double + end: + type: number + format: double + Doc: + description: Arbitrary json document + additionalProperties: + type: object + GeoJson: + description: root geojson object + properties: + type: + $ref: '#/definitions/ItemType' + required: + - type + discriminator: type + ItemType: + type: string + enum: + - Point + - MultiPoint + - LineString + - MultiLineString + - Polygon + - MultiPolygon + - GeometryCollection + - Item + - ItemCollection + GeometryCollection: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + geometries: + $ref: '#/definitions/GeometryCollection2D' + required: + - geometries + MultiPolygon: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + coordinates: + $ref: '#/definitions/MultiPolygon2D' + required: + - coordinates + MultiLineString: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + coordinates: + $ref: '#/definitions/MultiLineString2D' + required: + - coordinates + MultiPoint: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + coordinates: + $ref: '#/definitions/MultiPoint2D' + required: + - coordinates + Polygon: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + coordinates: + $ref: '#/definitions/Polygon2D' + required: + - coordinates + LineString: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + coordinates: + $ref: '#/definitions/LineString2D' + required: + - coordinates + Point: + allOf: + - $ref: '#/definitions/GeoJson' + - type: object + properties: + coordinates: + $ref: '#/definitions/Point2D' + required: + - coordinates + GeoPolygon2D: + description: A geojson 2d polygon + type: object + properties: + type: + description: Type of geometry + type: string + enum: + - Polygon + coordinates: + $ref: '#/definitions/Polygon2D' + required: + - type + - coordinates + GeometryCollection2D: + type: array + items: + $ref: '#/definitions/GeoJson' + MultiPolygon2D: + type: array + items: + $ref: '#/definitions/Polygon2D' + Polygon2D: + type: array + minItems: 1 + items: + $ref: '#/definitions/LinearRing2D' + MultiLineString2D: + type: array + items: + $ref: '#/definitions/LineString2D' + LinearRing2D: + type: array + minItems: 4 + items: + $ref: '#/definitions/Point2D' + LineString2D: + type: array + minItems: 2 + items: + $ref: '#/definitions/Point2D' + MultiPoint2D: + type: array + minItems: 2 + items: + $ref: '#/definitions/Point2D' + Point2D: + description: A 2d geojson point + type: array + minimum: 2 + maximum: 2 + items: + type: number + format: double +tags: + - name: Capabilities + description: >- + Essential characteristics of this API including information about the + data. + - name: Items + description: Access to data (items). From 2a6ba9944ca5b52249c29ee158dd8e16ff040626 Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Tue, 7 Nov 2017 18:04:25 -0800 Subject: [PATCH 10/10] updated main spec with additional info, got rid of day 2 draft spec --- spec/spec-draft-sprint-day-2.yaml | 467 ------------------------------ spec/spec.yaml | 37 ++- 2 files changed, 24 insertions(+), 480 deletions(-) delete mode 100644 spec/spec-draft-sprint-day-2.yaml diff --git a/spec/spec-draft-sprint-day-2.yaml b/spec/spec-draft-sprint-day-2.yaml deleted file mode 100644 index 2061ccd36..000000000 --- a/spec/spec-draft-sprint-day-2.yaml +++ /dev/null @@ -1,467 +0,0 @@ -swagger: '2.0' -info: - title: A Proposed Imagery Catalog API using the OGC WFS 3.0 standard as a starting point - version: 0.0.2 - description: >- - This document is a proposal draft. Though it is the first one in this folder it is by no means the only one. If others are - contributed they will all be considered equally on Day 1 of the Imagery Catalog API Sprint. This is simply the first one proposed. - If you have additional ideas feel free to either fork this and propose Pull Requests, or create your own new spec-draft and add to this folder. - - - WARNING - THIS IS WORK IN PROGRESS. - - - WARNING - This is a Swagger / OpenAPI 2.0 variant. A final spec should be in OpenAPI 3.0, but this is used for quick code generation purposes. - - contact: - name: Acme Corporation - email: info@example.org - url: 'http://example.org/' - license: - name: CC-BY 4.0 license - url: 'https://creativecommons.org/licenses/by/4.0/' -schemes: - - http -host: data.example.org -basePath: / -paths: - /api: - get: - summary: the API description - this document - operationId: getApiDescription - tags: - - Capabilities - produces: - - application/json - responses: - '200': - description: >- - The formal documentation of this API according to the OpenAPI - specification, version 3.0. I.e., this document. - schema: - type: object - default: - description: An error occured. - schema: - $ref: '#/definitions/exception' - /features: - get: - summary: Retrieve features matching filters - description: >- - Description goes here - operationId: getFeatures - tags: - - Features - parameters: - - $ref: '#/parameters/bbox' - - $ref: '#/parameters/time' - - $ref: '#/parameters/filter' - - $ref: '#/parameters/limit' - - $ref: '#/parameters/next' - produces: - - application/geo+json - responses: - '200': - description: >- - Description here - schema: - $ref: '#/definitions/FeatureCollection' - default: - description: An error occured. - schema: - $ref: '#/definitions/exception' - post: - summary: Retrieve items matching filters - operationId: getFeaturesPost - tags: - - Features - produces: - - application/geo+json - responses: - '200': - description: >- - Description here - schema: - $ref: '#/definitions/FeatureCollection' - default: - description: An error occured. - schema: - $ref: '#/definitions/exception' - '/features/{id}': - get: - summary: Retreive item by id - operationId: getFeature - tags: - - Features - parameters: - - $ref: '#/parameters/id' - produces: - - application/geo+json - responses: - '200': - description: A feature. - schema: - $ref: '#/definitions/Feature' - '404': - description: 'The feature with id {id} does not exist.' - schema: - $ref: '#/definitions/exception' - default: - description: An error occured. - schema: - $ref: '#/definitions/exception' -parameters: - next: - name: next - in: query - type: string - description: Token for the next set of paginated data. - limit: - name: limit - in: query - type: integer - description: Defines the maximum number or results retruned by the API - time: - name: time - type: array - description: Adheres to RFC3339 - items: - type: string - in: query - collectionFormat: csv - bbox: - name: bbox - in: query - description: >- - Only features that have a geometry that intersects the bounding box are - selected. The bounding box is provided as four numbers: - - * West, South, East, North - type: array - items: - type: number - minItems: 4 - maxItems: 4 - minimum: -180 - maximum: 180 - collectionFormat: csv - filter: - name: filter - in: query - type: string - description: A placeholder for a future filter implementation - id: - name: id - in: path - description: The id of a feature - required: true - type: string -definitions: - exception: - type: object - required: - - code - properties: - code: - type: string - description: - type: string - bbox: - description: >- - West, South, East, North - type: array - items: - minItems: 4 - maxItems: 4 - type: number - minimum: -180 - maximum: 180 - example: - - -180 - - -90 - - 180 - - 90 - link: - type: object - required: - - href - properties: - href: - type: string - rel: - type: string - example: prev - type: - type: string - example: application/geo+json - hreflang: - type: string - example: en - FeatureCollection: - type: object - required: - - features - - type - properties: - type: - type: string - enum: - - FeatureCollection - features: - type: array - items: - $ref: '#/definitions/Feature' - nextPageToken: - type: string - description: A token to obtain the next paginated data set - links: - $ref: '#/definitions/FeatureCollectionLinks' - Feature: - type: object - required: - - id - - type - - geometry - - links - - properties - properties: - id: - type: string - example: path/to/example.tif - description: 'unique ID, potentially link to file' - bbox: - $ref: '#/definitions/bbox' - geometry: - type: object - description: footprint of the feature - type: - type: string - description: The GeoJSON type - enum: - - Feature - properties: - $ref: '#/definitions/FeatureProperties' - links: - $ref: '#/definitions/FeatureLinks' - FeatureProperties: - type: object - required: - - start_date - - end_date - description: >- - provides the core metatdata fields plus extensions - properties: - start_date: - $ref: '#/definitions/Time' - end_date: - $ref: '#/definitions/Time' - provider: - type: string - description: Information about the provider - license: - type: string - description: Data license name based on SPDX License List - additionalProperties: - type: object - FeatureLinks: - type: object - required: - - self - - thumbnail - properties: - self: - type: string - thumbnail: - type: string - FeatureCollectionLinks: - type: object - properties: - next: - type: string - format: url - description: A URL to obtain the next paginated data set. If not present, the client should utilize the `nextPageToken`. - Time: - type: string - description: Adheres to RFC3339 - StringSet: - type: array - items: - type: string - Int64Set: - type: array - items: - type: integer - format: int64 - TimeRange: - description: begin and end timestamps adhering to RFC3339 - properties: - begin: - type: string - end: - type: string - Int64Range: - description: An integer range with begin and end - properties: - begin: - type: integer - format: int64 - end: - type: integer - format: int64 - DoubleRange: - description: A double range with begin and end - properties: - begin: - type: number - format: double - end: - type: number - format: double - Doc: - description: Arbitrary json document - additionalProperties: - type: object - GeoJson: - description: root geojson object - properties: - type: - $ref: '#/definitions/FeatureType' - required: - - type - discriminator: type - FeatureType: - type: string - enum: - - Point - - MultiPoint - - LineString - - MultiLineString - - Polygon - - MultiPolygon - - GeometryCollection - - Feature - - FeatureCollection - GeometryCollection: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - geometries: - $ref: '#/definitions/GeometryCollection2D' - required: - - geometries - MultiPolygon: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - coordinates: - $ref: '#/definitions/MultiPolygon2D' - required: - - coordinates - MultiLineString: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - coordinates: - $ref: '#/definitions/MultiLineString2D' - required: - - coordinates - MultiPoint: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - coordinates: - $ref: '#/definitions/MultiPoint2D' - required: - - coordinates - Polygon: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - coordinates: - $ref: '#/definitions/Polygon2D' - required: - - coordinates - LineString: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - coordinates: - $ref: '#/definitions/LineString2D' - required: - - coordinates - Point: - allOf: - - $ref: '#/definitions/GeoJson' - - type: object - properties: - coordinates: - $ref: '#/definitions/Point2D' - required: - - coordinates - GeoPolygon2D: - description: A geojson 2d polygon - type: object - properties: - type: - description: Type of geometry - type: string - enum: - - Polygon - coordinates: - $ref: '#/definitions/Polygon2D' - required: - - type - - coordinates - GeometryCollection2D: - type: array - items: - $ref: '#/definitions/GeoJson' - MultiPolygon2D: - type: array - items: - $ref: '#/definitions/Polygon2D' - Polygon2D: - type: array - minItems: 1 - items: - $ref: '#/definitions/LinearRing2D' - MultiLineString2D: - type: array - items: - $ref: '#/definitions/LineString2D' - LinearRing2D: - type: array - minItems: 4 - items: - $ref: '#/definitions/Point2D' - LineString2D: - type: array - minItems: 2 - items: - $ref: '#/definitions/Point2D' - MultiPoint2D: - type: array - minItems: 2 - items: - $ref: '#/definitions/Point2D' - Point2D: - description: A 2d geojson point - type: array - minimum: 2 - maximum: 2 - items: - type: number - format: double -tags: - - name: Capabilities - description: >- - Essential characteristics of this API including information about the - data. - - name: Features - description: Access to data (features). diff --git a/spec/spec.yaml b/spec/spec.yaml index 02a3af34a..7bd3bba5b 100644 --- a/spec/spec.yaml +++ b/spec/spec.yaml @@ -1,22 +1,31 @@ swagger: '2.0' info: - title: A Proposed Imagery Catalog API using the OGC WFS 3.0 standard as a starting point + title: An API for SpatioTemporal Asset Catalogs version: 0.0.3 description: >- - This document is a proposal draft. Though it is the first one in this folder it is by no means the only one. If others are - contributed they will all be considered equally on Day 1 of the Imagery Catalog API Sprint. This is simply the first one proposed. - If you have additional ideas feel free to either fork this and propose Pull Requests, or create your own new spec-draft and add to this folder. + The SpatioTemporal Asset Catalog specification aims to standardize the way geospatial assets are exposed online and queried. + A 'spatiotemporal asset' is any file that represents information about the earth captured in a certain space and time. Most of the initial + use cases are related to imagery, but the api is designed to enable search of any spatiotemporal data items. SpatioTemporal Asset Catalogs + can be completely static, implemented as flat files on the web that can be crawled. This API has the same + responses as a static catalog, but also offers querying capabilities in addition to exposing data online. This API was inspired by + WFS 3.0, and the goal is to make it compatible with that specification. - WARNING - THIS IS WORK IN PROGRESS. + WARNING - THIS IS WORK IN PROGRESS. Implementations are encouraged, but please give feedback on github. - - WARNING - This is a Swagger / OpenAPI 2.0 variant. A final spec should be in OpenAPI 3.0, but this is used for quick code generation purposes. + TODO - Update responses to be in line with static catalogs, give example + + TODO - Add in schema responses + + TODO - Explain extensibility, how to return different content & operations + + TODO - Add the querying capabilities + contact: - name: Acme Corporation - email: info@example.org - url: 'http://example.org/' + name: 'STAC Spec Contributors' + email: stac-spec@googlegroups.com + url: 'https://github.com/radiantearth/stac-spec/' license: name: CC-BY 4.0 license url: 'https://creativecommons.org/licenses/by/4.0/' @@ -48,7 +57,7 @@ paths: get: summary: Retrieve items matching filters description: >- - Description goes here + Returns a pageable GeoJSON feature collection of the items matching the query operationId: getItems tags: - Items @@ -71,7 +80,9 @@ paths: schema: $ref: '#/definitions/exception' post: - summary: Retrieve items matching filters + summary: >- + Retrieve items matching filters. The request is a string that matches the GET query exactly. POST is primarily to be used when + the request length exceeds GET maximums (which is not uncommon with geospatial queries) operationId: getItemsPost tags: - Items @@ -80,7 +91,7 @@ paths: responses: '200': description: >- - Description here + Returns a pageable GeoJSON feature collection of the items matching the query schema: $ref: '#/definitions/ItemCollection' default: