1.2.0 • Published 3 years ago

@map-colonies/csw-client v1.2.0

Weekly downloads
90
License
ISC
Repository
github
Last release
3 years ago

CSW-CLIENT

This package provides client-side API for OGC CSW service(s) written in TypeScript.

Suits for Node.JS and React/Angular applications

Package boilerplate based on ts-npm-package-boilerplate

This Client library is based on Jsonix and ogc-schemas libraries.

Code samples are provided by TypeScript.

Installation

Install package by NPM

npm install @map-colonies/csw-client --save

Install package by YARN

yarn add @map-colonies/csw-client --save

!!! IMPORTANT: Apply integrated PATCHES

Add following script to your package.json

"scripts": {
  .
  .
  .
  "patch:deps": "cd ./node_modules/@map-colonies/csw-client && patch-package --patch-dir ./dist/patches"
}

You can add patch:deps script to one of the npm hooks or run it manually.

For example add it to postinstall hook:

"scripts": {
  "postinstall": "yarn run patch:deps && <your_own_postinstall>",
  .
  .
  .
  "patch:deps": "cd ./node_modules/@map-colonies/csw-client && patch-package --patch-dir ./dist/patches"
}

Usage

// import CswClient class 
import { CswClient, ICapabilities } from from '@map-colonies/csw-client';

// later in code
const csw = new CswClient('<YOUR_OGC_CSW_SRV_URL>', <YOUR_REQUEST_EXECUTOR_FUNC>, <CONFIG>);
// trigger one of the exposed methods
csw.GetDomain('<propertyName>').then((data: ICapabilities) => {
  // your code
}); 

Implemented operations/methods

Client library instantiation

  • Instantiation - new

      // import CswClient class 
      import { CswClient } from from '@map-colonies/csw-client';
      import Axios, { Method } from 'axios';
    
      // import desired ADDITIONAL schemas
      const ISO19139_GCO_20060504 = require('ogc-schemas').ISO19139_GCO_20060504;
      const ISO19139_GMD_20060504 = require('ogc-schemas').ISO19139_GMD_20060504;
      const GML_3_2_0 = require('ogc-schemas').GML_3_2_0;
    
      // define your own requestExecutor
      const myRequest = async (url: string, method: string, params: Record<string, unknown>): Promise<any> => {
        const errorMsg = 'CLIENT HTTP ERROR BY AXIOS';
        return Axios.request({
          url,
          method: method as Method,
          ...params,
        })
          .then((res) => res)
          .catch((error) => {
            console.error(errorMsg);
            throw error;
          });
      };
    
      // later in code
      const cswConfig = {
        schemas: [
          GML_3_2_0,
          ISO19139_GCO_20060504,
          ISO19139_GMD_20060504,
        ],
        nameSpaces: {
          namespacePrefixes: { // define ADDITIONAL namespace prefixes
            'http://schema.mapcolonies.com': 'mc',
            'http://www.isotc211.org/2005/gmd': 'gmd',
            'http://www.isotc211.org/2005/gco': 'gco',
          },
        },
        credentials: {},
      };
      const csw = new CswClient('http://127.0.0.1:56477/?version=2.0.2&service=CSW', myRequest, cswConfig);

Basic OWS operations

  • GetCapabilities(): Promise

    Allow clients to retrieve information describing the service instance

      csw.GetCapabilities().then((data: ICapabilities) => {
        ... // your code
      });
  • DescribeRecord(): Promise

    Allows a client to discover elements of the information model supported by the target catalog service

      csw.DescribeRecord().then((data) => {
        ... // your code
      });

CSW queries

  • GetDomain(propertyName: string): Promise

    Obtain runtime information about the range of values of a metadata record element or request parameter.

      csw.GetDomain('title').then((data) => {
        ... // your code
      });
  • GetRecords(start: number, max: number, opts: { filter?: IFilterField[]; sort?: ISortField[] }, outputSchema: string): Promise

    Get metadata records according to defined filter and sort order

     const options = {
       filter: [
         {
           field: 'mcgc:geojson',
           bbox: {
             llat: 31.90,
             llon: 36.80,
             ulat: 31.91,
             ulon: 36.81,
           },
         },
         {
           field: 'mcgc:name',
           like: 'magic_place',
         },
       ],
       sort: [
         {
           field: 'mcgc:name',
           desc: false,
         },
         {
           field: 'mcgc:creation_date',
           desc: true,
         },
    
       ]
     };
     csw.GetRecords(1, 10, options, 'http://schema.myschema.com').then((data) => {
       ... // your code
     });
  • GetRecordsById(id_list: string[]): Promise

    Get metadata records by ID list

     csw.GetRecordsById(['1', '2', '5']).then((data) => {
       ... // your code
     });

CSW CRUD operations

  • InsertRecords(records: any[]): Promise Create catalog records
     csw.InsertRecords(records).then((data) => {
       ... // your code
     });
  • UpdateRecord(record: any): Promise Modify catalog record
     csw.UpdateRecord(records).then((data) => {
       ... // your code
     });
  • DeleteRecords(filters: IFilterField[]): Promise Delete catalog records according to defined filter
     csw.DeleteRecords(filters).then((data) => {
       ... // your code
     });

Utils

  • xmlStringToJson(xmlString: string): any

    Converts XML-like string to JSON object according to defined schemas

     const obj = csw.xmlStringToJson(xmlString);
  • jsonToXml(json: any): XMLDocument
    Converts JSON object to XMLDocument according to defined schemas

     const xmlDoc: XMLDocument = csw.jsonToXml(json);
  • xmlToJson(xml: XMLDocument): any Converts XMLDocument to JSON object according to defined schemas
     const obj = csw.xmlToJson(xml);
  • xmlToString(xml: XMLDocument): string Converts XMLDocument to XML-like string according to defined schemas
     const str = csw.xmlToString(xml);

OGC Filters

  • Operators:

    • Logical Operators:
      • AND
            let filter: any = new FilterBuilder().PropertyName('dc:title').isLike('%water%');
            filter = filter.and(new FilterBuilder().PropertyName('dc:subject').isLike('%polution%'));
      • OR
            let filter: any = new FilterBuilder().PropertyName('dc:title').isLike('%water%');
            filter = filter.or(new FilterBuilder().PropertyName('dc:title').isLike('%oil%'));
  • Spatial Operatos:

    • BBOX
      let filter: any = new FilterBuilder().PropertyName('dc:title').isLike('%water%');
      filter = filter.and(new FilterBuilder().BBOX(-80, 150, 80, -150));
  • Comparison
    • isLike
    • isBetween
    • isEqualTo
    • isLessThanOrEqualTo
    • isGreaterThan
    • isLessThan
    • isGreaterThanOrEqualTo
    • isNotEqualTo

OGC Sort

  const sort: SortBuilder = new SortBuilder().Sort('dc:title');
  sort.Sort('dc:dummy', true);

Applyed patches ( ./patches/*.patch )

1.2.0

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago