Table of Contents

GIDB API

General information

General image database (GIDB) support WEB API, which is available only through HTTPS end-point. In GIDB terms “image” is aggregation of metadata + raster. The images are grouped by projects. All requests must contain your login and password which are sent as HTTP Basic authentication header:

C#:

string authInfo = username + ":" + password;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
WebRequest request = System.Net.WebRequest.Create(apiURL);
request.Headers["Authorization"] = "Basic " + authInfo;
WebResponse response = request.GetResponse();

JavaScript:

$.ajax({
	url: apiURL,
	dataType: "json",
	beforeSend: function (xhr) {
		xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
	},
	success: function (data, textStatus, jqXHR) {},
	error: function (jqXHR, textStatus, errorThrown) {}
});

Metadata of GIDB's images

The metadata of GIDB's images represents as:

Graphically it can be represented as follows:

API

Function Verb Description
API/GetAllProjects GET Retrieves metadata for all projects, filtered by the access rights of the current user
API/FindImages/{projectId}/{minLongitude}/ {minLatitude}/{maxLongitude}/{maxLatitude}/ {maxresults} POST PPerforms a spatial query for images using a bounding box. The returned set of images is a random sample if more images than 'maxresults' are found. The message body can optionally specify a metadata search condition*
API/FindNearestImages/{projectId}/{longitude}/ {latitude}/{maxdistance}/{maxresults} POST Searches for a set of images nearest to the specified position. Only images within the specified maximum distance are considered. The message body can optionally specify a metadata search condition*
API/GetImage/{projectId}/{imageId} GET Returns the attributes for an image specified by id
API/GetImageSharedMetadata/{projectId}/{imageId} GET Returns shared metadata for an image
API/GetTile/{projectId}/{imageId}/{quadKey?} GET Returns the raw tile data for an image straight from backend storage, regardless the storage format of the tile. This will include tile data in a format that a web client possibly cant handle

* - to return a set of images with the metadata Yaw property in the range 180 to 270 specify the condition as: MetadataXML.value('(/Metadata/Yaw)[1]','float') > 180 and MetadataXML.value('(/Metadata/Yaw)[1]','float'). Do not forget add header “Content-Type: text/plain; charset=utf-8”

The minimal image data contains information about the image and tile sizes. To calculate the number of levels and number of tiles at lowest level, the following equations can be used:

C#

int size = Math.Max(ImageWidth,ImageHeight);
int TileSize = = Math.Max(TileSizeX,TileSizeY);
int levels = (int) Math.Ceiling(Math.Log(size / TileSize) / Math.Log(2));
int LowestLevelColumns = ImageWidth/TileSize;
int LowestLevelRows = ImageHeight/TileSize

JavaScript#

var size = Math.max(ImageWidth, ImageHeight);
var levels = Math.ceil(Math.log(size / TileSize) / Math.log(2));
var lowestLevelColumns = ImageWidth/TileSize;
var lowestLevelRows = ImageHeight/TileSize

Top level (level 0) quad key is the empty string. Other quadkeys can be calculated from:

C#

public static string TileXYToQuadKey(int tileX, int tileY, int level)
{
	StringBuilder quadKey = new StringBuilder();
	for (int i = level; i > 0; i--)
	{
		char digit = '0';
		int mask = 1 << (i - 1);
		if ((tileX & mask) != 0)
		{
			digit++;
		}
		if ((tileY & mask) != 0)
		{
			digit++;
			digit++;
		}
		quadKey.Append(digit);
	}
	return quadKey.ToString();
}

JavaScript

function TileXYToQuadKey(tileX, tileY, level) {
	quadKey = "";
	for (var lev = level; lev > 0; lev--) {
		digit = '0';
		mask = 1 << (lev - 1);
		if ((tileX & mask) != 0) {
			digit++;
		}
		if ((tileY & mask) != 0) {
			digit++;
			digit++;
		}
		quadKey += digit;
	}
	return quadKey;
}

WMS representation of the images positions

GIDB supports WMS representation of the image positions, which is available only through HTTPS end-point: