• Stars
    star
    310
  • Rank 134,926 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 9 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

GeoPackage JavaScript Library

GeoPackage JS

GeoPackage JS is an implementation of the OGC GeoPackage spec. This library works in both the browser and Node 12+.

GeoPackage Viewer

GeoPackage Viewer

Cloning this repository and opening the docs/index.html in your browser will run the demo locally.

Installation

Build Status NPM Coverage Status

$ npm install @ngageoint/geopackage

GeoPackage JS Library

The GeoPackage Libraries were developed at the National Geospatial-Intelligence Agency (NGA) in collaboration with BIT Systems. The government has "unlimited rights" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the MIT license.

Pull Requests

If you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license.

Software source code previously released under an open source license and then modified by NGA staff is considered a "joint work" (see 17 USC ยง 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license.

About

GeoPackage JS is a GeoPackage Library JavaScript implementation of the Open Geospatial Consortium GeoPackage spec. It is listed as an OGC GeoPackage Implementation by the National Geospatial-Intelligence Agency.

The GeoPackage JavaScript library currently provides the ability to read GeoPackage files. This library works both in the browser and in Node. In the browser tiles are rendered using HTML5 Canvas and GeoPackages are read using sql.js. In Node tiles are rendered PureImage and GeoPackages are read using node-sqlite3.

Changelog

5.0.1
  • Added in FeatureTileGenerator
  • Added in UrlTileGenerator
  • Rebuilt CanvasKit to add support for webp and jpeg
5.0.0
  • GeoPackage JS's API has been updated to more closely match GeoPackage Java v6.4.0
    • Not yet implemented: 2D Gridded Tile Coverage Extension and OGC API Feature Generator
  • GeoPackageExtensions is now ExtensionManager
  • GeoPackageAPI is now GeoPackageManager
  • Added FeatureTileTableLink extension
  • Added support for extended geometry types
  • Added Properties extension
  • Added ZoomOther extension
  • Added support for drawing extended geometry types
  • Updated to use NGA simple features javascript libraries
  • Updated to use NGA projections javascript library
  • Added UserCustomRow
  • Reworked UserRow, UserTable, and UserColumn and updated all super types
  • Added in FeatureConnection, TileConnection, AttributesConnection and UserCustomConnections.
  • Added GeoPackageCache
4.2.3
  • fix cached geometry error
4.2.2
  • fix simplify error
4.2.1
  • Fix for drawing geometries outside of the 3857 bounds
4.2.0
  • Support for drawing vector data into EPSG:4326 tiles
  • Added createStandardWGS84TileTable
4.1.0
  • Typescript updates
  • Extract converters, leaflet plugin, mobile optimizer, and viewer into their own packages
4.0.0
  • Alter tables functions (copy, rename for table and columns)
  • Publish separate node and browser module
  • GeoPackageJS can now be run in Node.js worker_threads and Web Workers
2.1.0
  • Implementation of the Feature Style Extension and Contents ID Extension
2.0.8
  • Checks for Electron when returning a tile creator
2.0
  • All new API utilizing Promises
1.1.4
  • Adds a method to retrieve tiles in EPSG:4326
1.1.3
  • Fixes issue #115
1.1.2
  • fix case where GeoPackage Zoom does not correspond to the web map zoom
1.1.1
  • fix more instances of proj4 bug for react
  • fixed tile generation for images with different x and y pixel densities
1.1.0
  • accept pull request adding support for react
  • fix bug with projected tiles that spanned the date line
1.0.25
  • ensure we use proj4 2.4.3 instead of 2.4.4
1.0.22
  • Fixed bug where querying for indexed features only returned the geometry instead of the entire feature
1.0.19
  • Remove dependency on Lwip

Usage

View the latest docs.

Browser Usage

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Test</title>
  <script src="/path/to/geopackage.min.js"></script>
</head>
<body>
<input id="fileInput" type="file"/>
<script src="./index.js"></script>
</body>
</html>
// Specify folder containing the sql-wasm.wasm file.
// By default, geopackage loads from https://server/public/sql-wasm.wasm
const {
  GeoPackageManager,
  Canvas,
  TileUtils,
  GeoPackageTileRetriever,
  FeatureTiles,
  FeatureIndexManager,
  BoundingBox,
  setSqljsWasmLocateFile
} = window.GeoPackage

setSqljsWasmLocateFile(file => 'public/' + file);

// attach an event listener onto a file input
document.getElementById('fileInput').addEventListener('change',  function () {
  const file =this.files[0];
  const fileReader = new FileReader();
  fileReader.onload = function() {
    loadByteArray(new Uint8Array(fileReader.result));
  }
  fileReader.readAsArrayBuffer(file);
}, false);

function loadByteArray(array) {
  GeoPackageManager.open(array).then(async (geoPackage) => {
    // get the tile table names
    const tileTables = geoPackage.getTileTables();

    for (let i = 0; i < tileTables.length; i++) {
      const table = tileTables[i];
      // get tile dao
      const tileDao = geoPackage.getTileDao(table);

      // get table info
      const tableInfo = geoPackage.getInfoForTable(tileDao);

      // Get a GeoPackageTile and then draw it into a canvas.
      const canvas = Canvas.create(TileUtils.TILE_PIXELS_DEFAULT, TileUtils.TILE_PIXELS_DEFAULT);
      const context = canvas.getContext('2d');
      const gpr = new GeoPackageTileRetriever(tileDao);
      const x = 0;
      const y = 0;
      const zoom = 0;

      // Get the GeoPackageTile for a particular web mercator tile
      const geoPackageTile = await gpr.getTile(x, y, zoom)
      // get the tile data as a Buffer
      let tileData = geoPackageTile.getData();
      // Get the GeoPackageImage from the GeoPackageTile
      const geoPackageImage = await geoPackageTile.getGeoPackageImage()
      // draw the tile and use the canvas to get the Data URL
      context.drawImage(geoPackageImage.getImage(), 0, 0);
      const base64String = canvas.toDataURL('image/png');

      // In node.js, users must dispose of any GeoPackageImage and Canvas created to prevent memory leaks
      Canvas.disposeImage(geoPackageImage);
      Canvas.disposeCanvas(canvas);

      // Query tile table directly.
      const tileRow = tileDao.queryForTile(x, y, zoom);
      tileData = tileRow.getTileData();  // the raw bytes from the GeoPackage
    }

    // get the feature table names
    const featureTables = geoPackage.getFeatureTables();

    for (let i = 0; i < featureTables.length; i++) {
      const table = featureTables[i];
      // get the feature dao
      const featureDao = geoPackage.getFeatureDao(table);

      // get the info for the table
      const tableInfo = geoPackage.getInfoForTable(featureDao);

      // draw tiles using features
      const canvas = Canvas.create(TileUtils.TILE_PIXELS_DEFAULT, TileUtils.TILE_PIXELS_DEFAULT);
      const context = canvas.getContext('2d');
      const ft = new FeatureTiles(geoPackage, featureDao);
      var x = 0;
      var y = 0;
      var zoom = 0;
      const geoPackageImage = await ft.drawTile(x, y, zoom);
      context.drawImage(geoPackageImage.getImage(), 0, 0);
      const base64String = canvas.toDataURL('image/png');
      Canvas.disposeImage(geoPackageImage);
      Canvas.disposeCanvas(canvas);

      // iterate over indexed features that intersect the bounding box
      const featureIndexManager = new FeatureIndexManager(geoPackage, table);
      const resultSet = featureIndexManager.query();
      for (const featureRow of resultSet) {
        // ...
      }
      resultSet.close();

      // iterate over all features in a table in the geojson format
      const geoJSONResultSet = geoPackage.queryForGeoJSONFeatures(table);
      for (const feature of geoJSONResultSet) {
        // ...
      }
      geoJSONResultSet.close();
    }
  }).catch(function(error) {
    console.error(error);
  });
}

Web Worker Usage

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <script src="/path/to/geopackage.min.js"></script>
</head>
<body>
<input id="fileInput" type="file" onchange="openConnection(this.files)"/>
<canvas id="canvas" width="256px" height="256px"></canvas>
<br>
<input id="table" type="text">Table:</input>
<br>
<input id="column" type="number">X:</input>
<br>
<input id="row" type="number">Y:</input>
<br>
<input id="zoom" type="number">Zoom:</input>
<br>
<button onclick="drawFeatureTileInCanvas(document.getElementById('table').value, document.getElementById('column').value, document.getElementById('row').value, document.getElementById('zoom').value)">GetFeatureTile</button>
<br>
<button onclick="drawTileInCanvas(document.getElementById('table').value, document.getElementById('column').value, document.getElementById('row').value, document.getElementById('zoom').value)">DrawTileInCanvas</button>
<br>
<button onclick="getFeatureTableAsGeoJSON(document.getElementById('table').value)">GetFeatureTableAsGeoJSON</button>
<br>
<button onclick="closeConnection()">Close</button>
<br>
<script src="./index.js"></script>
</body>
</html>
index.js
// canvas for drawing, will need to be defined in html file.
var canvas = document.getElementById('canvas');

// setup worker
var geopackageWorker;
if (window.Worker) {
  geopackageWorker = new Worker("worker.js");

  // handle responses from the geopackage web worker
  geopackageWorker.onmessage = function(e) {
    // draw tile
    if (e.data.type === 'tile') {
      const ctx = canvas.getContext('2d');
      ctx.putImageData(e.data.tileImageData, 0, 0);
      // print geojson
    } else if (e.data.type === 'geojson') {
      console.log(e.data.geojson)
    }
  }
}

/**
 * Attach this method to a file input onchange event to open a geopackage connection
 * files[0] should be a valid .gpkg file
 * @param files - event.target.files
 */
openConnection = function(files) {
  var f = files[0];
  var r = new FileReader();
  r.onload = function() {
    var array = new Uint8Array(r.result);
    // create a connection to the geopackage
    geopackageWorker.postMessage({
      type: 'load',
      file: array
    });
  }
  r.readAsArrayBuffer(f);
}

/**
 * Closes the geopackage connection inside the worker
 */
closeConnection = function () {
  geopackageWorker.postMessage({
    type: 'close',
  });
}

/**
 * Will request the x,y,z feature tile to be drawn
 * @param table
 * @param x
 * @param y
 * @param z
 */
drawFeatureTileInCanvas = function (table, x, y, z) {
  console.log([table, x, y, z]);
  geopackageWorker.postMessage({
    type: 'get-feature-tile',
    table: table,
    x: x,
    y: y,
    z: z,
    width: canvas.width,
    height: canvas.height
  });
}

/**
 * Will request the x,y,z file to be drawn
 * @param table
 * @param x
 * @param y
 * @param z
 */
drawTileInCanvas = function (table, x, y, z) {
  geopackageWorker.postMessage({
    type: 'get-tile',
    table: table,
    x: x,
    y: y,
    z: z,
    width: canvas.width,
    height: canvas.height
  });
}

/**
 * Will request the features of a table in geojson format
 * @param table
 */
getFeatureTableAsGeoJSON = function (table) {
  geopackageWorker.postMessage({
    type: 'get-geojson',
    table: table
  });
}
worker.js
// import the geopackage browser library
self.importScripts('/path/to/geopackage.min.js');
const {
  GeoPackageManager,
  Canvas,
  TileUtils,
  GeoPackageTileRetriever,
  FeatureTiles,
  BoundingBox,
  setSqljsWasmLocateFile
} = GeoPackage;

// specify the location of the sql.wasm file
setSqljsWasmLocateFile(file => 'public/' + file);

// message listener
onmessage = function(e) {
  // open geopackage connection to fileData provided in message
  if (e.data.type === 'load') {
    GeoPackageManager.open(e.data.file).then(gp => {
      self.gp = gp;
    });
    // close the geopackage connection
  } else if (e.data.type === 'close') {
    self.gp.close();
    // request a tile from a feature table
  } else if (e.data.type === 'get-feature-tile') {
    const table = e.data.table;
    const x = parseInt(e.data.x);
    const y = parseInt(e.data.y);
    const z = parseInt(e.data.z);
    const width = parseInt(e.data.width);
    const height = parseInt(e.data.height);
    const featureDao = self.gp.getFeatureDao(table);
    const ft = new FeatureTiles(self.gp, featureDao, width, height);
    ft.drawTile(x, y, z).then(tile => {
      postMessage({
        type: 'tile',
        tileImageData: tile.getImageData()
      });
    });
    // request a tile from a tile table
  } else if (e.data.type === 'get-tile') {
    const table = e.data.table;
    const x = parseInt(e.data.x);
    const y = parseInt(e.data.y);
    const z = parseInt(e.data.z);
    const width = parseInt(e.data.width);
    const height = parseInt(e.data.height);
    self.gp.xyzTile(table, x, y, z, width, height).then(gpTile => {
      gpTile.getGeoPackageImage().then(gpImage => {
        postMessage({
          type: 'tile',
          tileImageData: gpImage.getImageData()
        });
      })
    })
    // request the features from a feature table in geojson format
  } else if (e.data.type === 'get-geojson') {
    const table = e.data.table;
    const features = [];
    const featureResultSet = self.gp.queryForGeoJSONFeatures(table);
    for(const feature of featureResultSet) {
      features.push(feature);
    }
    featureResultSet.close();
    const featureCollection = {
      type: 'FeatureCollection',
      features: features
    }
    postMessage({
      type: 'geojson',
      geojson: featureCollection
    });
  }
}

NodeJS Usage

const {
  setCanvasKitWasmLocateFile,
  GeoPackageManager,
  GeoPackageTileRetriever,
  FeatureTiles,
  Canvas,
  FeatureIndexManager,
  BoundingBox,
  TileUtils
} = require('@ngageoint/geopackage');
const { Projections } = require('@ngageoint/projections-js')
const { GeometryType } = require('@ngageoint/simple-features-js')

// specify the CanvasKit WebAssembly module's location.
setCanvasKitWasmLocateFile(file => '/path/to/node_modules/@ngageoint/geopackage/dist/canvaskit/' + file);

// open the .gpkg file
GeoPackageManager.open('/path/to/file.gpkg').then(async (geoPackage) => {
  // get the tile table names
  const tileTables = geoPackage.getTileTables();

  for (let i = 0; i < tileTables.length; i++) {
    const table = tileTables[i];
    // get tile dao
    const tileDao = geoPackage.getTileDao(table);

    // get table info
    const tableInfo = geoPackage.getInfoForTable(tileDao);

    // Get a GeoPackageTile and then draw it into a canvas.
    const canvas = Canvas.create(TileUtils.TILE_PIXELS_DEFAULT, TileUtils.TILE_PIXELS_DEFAULT);
    const context = canvas.getContext('2d');
    const gpr = new GeoPackageTileRetriever(tileDao);
    const x = 0;
    const y = 0;
    const zoom = 0;

    // Get the GeoPackageTile for a particular web mercator tile
    const geoPackageTile = await gpr.getTile(x, y, zoom)
    // get the tile data as a Buffer
    let tileData = geoPackageTile.getData();
    // Get the GeoPackageImage from the GeoPackageTile
    const geoPackageImage = await geoPackageTile.getGeoPackageImage()
    // draw the tile and use the canvas to get the Data URL
    context.drawImage(geoPackageImage.getImage(), 0, 0);
    const base64String = canvas.toDataURL('image/png');

    // In node.js, users must dispose of any GeoPackageImage and Canvas created to prevent memory leaks
    Canvas.disposeImage(geoPackageImage);
    Canvas.disposeCanvas(canvas);

    // Query tile table directly.
    const tileRow = tileDao.queryForTile(x, y, zoom);
    tileData = tileRow.getTileData();  // the raw bytes from the GeoPackage
  }

  // get the feature table names
  const featureTables = geoPackage.getFeatureTables();

  for (let i = 0; i < featureTables.length; i++) {
    const table = featureTables[i];
    // get the feature dao
    const featureDao = geoPackage.getFeatureDao(table);

    // get the info for the table
    const tableInfo = geoPackage.getInfoForTable(featureDao);

    // draw tiles using features
    const canvas = Canvas.create(TileUtils.TILE_PIXELS_DEFAULT, TileUtils.TILE_PIXELS_DEFAULT);
    const context = canvas.getContext('2d');
    const ft = new FeatureTiles(geoPackage, featureDao);
    var x = 0;
    var y = 0;
    var zoom = 0;
    const geoPackageImage = await ft.drawTile(x, y, zoom);
    context.drawImage(geoPackageImage.getImage(), 0, 0);
    // canvas.toDataURL('image/png'));
    Canvas.disposeImage(geoPackageImage);
    Canvas.disposeCanvas(canvas);

    // iterate over indexed features that intersect the bounding box
    const featureIndexManager = new FeatureIndexManager(geoPackage, table);
    const resultSet = featureIndexManager.queryWithBoundingBoxAndProjection(new BoundingBox(0, -90, 180, 90), Projections.getWGS84Projection());
    for (const featureRow of resultSet) {
      // ...
    }
    resultSet.close();

    // iterate over all features in a table in the geojson format
    const geoJSONResultSet = geoPackage.queryForGeoJSONFeatures(table);
    for (const feature of geoJSONResultSet) {
      // ...
    }
    geoJSONResultSet.close();
  }
});

More Repositories

1

geoq

Django web application to collect geospatial features and manage feature collection among groups of users
JavaScript
652
star
2

hootenanny

Hootenanny conflates multiple maps into a single seamless map.
JavaScript
337
star
3

sarpy

A basic Python library to demonstrate reading, writing, display, and simple processing of complex SAR data using the NGA SICD standard.
Python
257
star
4

gamification-server

Server to track gamification elements (badges, points, tags) to work pages or apps
JavaScript
239
star
5

MATLAB_SAR

A basic MATLAB library to demonstrate reading, writing, display, and simple processing of complex SAR data using the NGA SICD standard.
MATLAB
212
star
6

mrgeo

MrGeo is a geospatial toolkit designed to provide raster-based geospatial capabilities that can be performed at scale. MrGeo is built upon Apache Spark and the Hadoop ecosystem to leverage the storage and processing of hundreds of commodity computers. See the wiki for more details.
Java
199
star
7

opensphere

OpenSphere
JavaScript
185
star
8

elasticgeo

ElasticGeo provides a GeoTools data store that allows geospatial features from an Elasticsearch index to be published via OGC services using GeoServer.
Java
167
star
9

fog-machine

iOS Swift framework for parallel processing
Swift
121
star
10

scale

Processing framework for containerized algorithms
Python
105
star
11

mage-server

Mobile Awareness GEOINT Environment Server
TypeScript
88
star
12

geopackage-android

GeoPackage Android Library
Java
87
star
13

geopackage-java

GeoPackage Java Library
Java
77
star
14

tiff-java

Tagged Image File Format Java Library
Java
72
star
15

six-library

Sensor Independent XML Library
C++
69
star
16

social-media-picture-explorer

Backend for social-media-picture-explorer-ui, a tool for using deep learning to interactively explore social media
Jupyter Notebook
52
star
17

geopackage-ios

GeoPackage iOS Library
Objective-C
50
star
18

geoevents

The GeoEvents project is a dynamic and customizable open source web presence that provides a common operational picture to consolidate activities, manage content, and provides a single point of discovery. GeoEvents was used by deployers and first responders in over 100 real-world events.
JavaScript
40
star
19

mage-android

Mobile Awareness GEOINT Environment Android
Kotlin
40
star
20

GeoPackage

Main Page for NGA GeoPackage Efforts
39
star
21

MAGE

Main Page for the Mobile Awareness GEOINT Environment
JavaScript
38
star
22

geopackage-mapcache-android

GeoPackage MapCache Android App
Python
35
star
23

mage-ios

Mobile Awareness GEOINT Environment iOS
Swift
34
star
24

simple-features-geojson-java

Simple Features GeoJSON Java Library
Java
33
star
25

geopackage-android-map

GeoPackage Android Map Library
Java
33
star
26

mapcache-electron

Desktop application for creating and editing GeoPackages
JavaScript
31
star
27

geopackage-core-java

GeoPackage Core Java Library
Java
31
star
28

tiff-ios

Tagged Image File Format iOS Library
Objective-C
30
star
29

geoint-standards

co-create and grow GEOINT standards transparenlty
HTML
30
star
30

opensphere-desktop

opensphere-desktop
Java
29
star
31

hootenanny-ui

Hootenanny UI is a submodule of the Hootennany vector conflation project.
JavaScript
28
star
32

voxel-globe

calibrates aerial camera models and constructs 3D models from video sequences
Python
26
star
33

endpoint.js

Web application discovery, execution and streaming library
JavaScript
26
star
34

geoq-chef-installer

Chef recipes and configuration files to install the 'geoq' app onto a Virtual Machine
Ruby
25
star
35

map-of-world-api

Map of the World API supports multiple web-based mapping libraries and provides a consistent set of methods for interacting with any supported implementations
JavaScript
25
star
36

Nounalyzer

Analyze the nouns and entities in a rss feed
HTML
21
star
37

mapcache-server

MapCache Server
JavaScript
21
star
38

geopackage-mapcache-ios

GeoPackage MapCache iOS App
Objective-C
21
star
39

simple-features-wkb-java

Simple Features Well-Known Binary Java Library
Java
20
star
40

mgrs-java

Military Grid Reference System Java Library
Java
19
star
41

state-of-the-data

content suitability assessment tools
Python
19
star
42

social-media-picture-explorer-ui

A user interface to explore social media more graphically
JavaScript
19
star
43

leaflet-geopackage

Leaflet GeoPackage
JavaScript
19
star
44

Rational-Polynomial-Coefficients-Mapper

C++ class that uses RPC coefficients to map an object space coordinate represented in Latitude, Longitude, and Altitude to a sensor position represented in X,Y
C++
19
star
45

csm

Community Sensor Model
C++
18
star
46

conduit

content curation tool
JavaScript
18
star
47

anti-piracy-android-app

Anti-Shipping Activity Messages (ASAM) App for Android displays location and descriptive information about hostile acts against ships and mariners. The app caches warning data and works without a Wi-Fi or cellular connection.
Java
18
star
48

simple-features-java

Simple Features Java Library
Java
16
star
49

sarpy_apps

Python
16
star
50

anti-piracy-iOS-app

Anti-Shipping Activity Messages (ASAM) App for iOS displays location and descriptive information about hostile acts against ships and mariners. The app caches warning data and works without a Wi-Fi or cellular connection.
Swift
16
star
51

mage-ios-sdk

Mobile Awareness GEOINT Environment iOS SDK
Objective-C
15
star
52

geopackage-viewer-js

JavaScript
15
star
53

geoint-in-motion

data comparison tools written in python
Python
14
star
54

disconnected-content-explorer-iOS

Disconnected Interactive Content Explorer (DICE) is an app for iOS, Android, and Windows that allows users to load interactive content generated in HTML, CSS, and Javascript to a mobile device so the device can display interactive content without a network connection.
Objective-C
14
star
55

disconnected-content-explorer-android

Disconnected Interactive Content Explorer (DICE) is an app for iOS, Android, and Windows that allows users to load interactive content generated in HTML, CSS, and Javascript to a mobile device so the device can display interactive content without a network connection.
Java
13
star
56

color-java

Color Java Library
Java
13
star
57

keycloak-login.gov-integration

HTML
12
star
58

rfi-generator

The RFI Generator helps first responders and HQ analysts work Requests for Information (RFIs) within a geospatial context.
JavaScript
12
star
59

simple-features-proj-java

Simple Features Projection Java Library
Java
11
star
60

Geospatial-Analysis-Integrity-Tool

The Geospatial Analysis Integrity Tool (GAIT) validates data against a data model. GAIT checks geometry, feature codes, attribute values and domains, and metadata. The tool writes its results as line and point shapefiles to an output directory. GAIT can execute against data in MGCP, GIFD, TDS, and VMap data models.
C
11
star
61

mgrs-ios

Military Grid Reference System iOS Library
Swift
10
star
62

Sensor_Integration_Framework

The purpose of this document is to provide guidance required for sensor data producers and consumers to implement a sensor information enterprise that meets operational requirements, achieves United States (U.S.) Department of Defense (DoD) and Intelligence Community (IC) Chief Information Officer (CIO) goals, and conforms to applicable policy.
10
star
63

mrgeo-geoserver-plugin

Java
9
star
64

cocreate

Open source environment for development, integration and testing
Python
9
star
65

opensphere-yarn-workspace

opensphere-yarn-workspace
Dockerfile
9
star
66

opensphere-asm

opensphere-asm
JavaScript
9
star
67

opensphere-electron

Run OpenSphere in an Electron container.
JavaScript
9
star
68

Spectral-Library-Reader

C++ Library that reads the splib06a file, which is a custom binary spectral reflectance database file created by USGS
C++
8
star
69

mgrs-android

Military Grid Reference System Android Library
Java
8
star
70

mgrs-js

Military Grid Reference System Javascript Library
TypeScript
8
star
71

ogc-api-features-json-java

OGC API Features JSON Java Library
Java
8
star
72

wedge-maker-4-gis

An ArcGIS Python toolbox for creating wedge and arcband shapes
Python
8
star
73

projections-ios

Projections iOS Library
Objective-C
7
star
74

SWIRSignalDetection

analyzes shortwave infrared reflectance
Cuda
7
star
75

geogig

Java
7
star
76

grid-js

Grid Javascript Library
TypeScript
7
star
77

tk_builder

Python
7
star
78

coordinate-reference-systems-java

Coordinate Reference Systems Java Library
Java
7
star
79

scale-ui

UI front-end for Scale - Processing framework for containerized algorithms
TypeScript
6
star
80

DigitalGlobeReader

C++
6
star
81

geopackage-geojson-js

GeoPackage GeoJSON Converter
JavaScript
6
star
82

mage-android-wear

Mobile Awareness GEOINT Environment Android Wear
Java
6
star
83

seed

Standard for discovery and consumption of Docker containerized jobs.
SCSS
6
star
84

geowave-osm

OSM Data processing for GeoWave
Java
5
star
85

mage-android-wear-bridge

MAGE Android Wear Bridge
Java
5
star
86

hootenanny-rpms

RPMs needed for a Hootenanny install
Shell
5
star
87

simple-features-wkb-ios

Simple Features Well-Known Binary iOS Library
Objective-C
5
star
88

simple-features-wkt-java

Simple Features Well-Known Text Java Library
Java
5
star
89

mage-chronostouch-android

Mobile Awareness GEOINT Environment Chronostouch Android
Java
5
star
90

seed-silo

Rest API for discovering Seed images
Go
5
star
91

seed-cli

Algorithm developer CLI supporting Seed compliant image publish and testing.
Go
5
star
92

geowave-vagrant

Vagrant environment for geowave development.
Shell
5
star
93

marlin-ios

Swift
4
star
94

geogig-qgis-client-plugin

Python
4
star
95

ogc-api-features-json-ios

OGC API Features JSON iOS Library
Objective-C
4
star
96

opensphere-plugin-example

opensphere-plugin-example
JavaScript
4
star
97

geoevents-chef-installer

This is a set of Chef recipes (think of them as macros to automatically build a running Virtual Machine) that will work to set the geoevents app up on either a local Virtualbox VM or onto an Amazon Web Service VM.
Ruby
4
star
98

gars-java

Global Area Reference System Java Library
Java
3
star
99

simple-features-proj-ios

Simple Features Projection iOS Library
Objective-C
3
star
100

opensphere-build-index

opensphere-build-index
JavaScript
3
star