This is an API for the Augmented City (AC) platform. For more information, please visit our website https://www.augmented.city
Local coordinate system is a right-handed cartesian coordinate system of a single reconstruction. It’s based on camera coordinate system. The local camera coordinate system of an image is defined in a way that the X axis points to the right, the Y axis to the bottom, and the Z axis to the front as seen from the image.
The local reconstruction coordinate system has no metric scale. Each reconstruction has a unique coordinate system with its own scale.
AC supports two geographic coordinate systems ECEF and ENU.
ECEF, also known as ECR, is a geographic and Cartesian coordinate system and is sometimes known as a "conventional terrestrial" system. It represents positions as X, Y, and Z coordinates. The point is defined as the center of mass of Earth, hence the term geocentric coordinates. Read more on Wikipedia
Local tangent plane coordinates (LTP) are a geographic coordinate system based on the tangent plane defined by the local vertical direction and the Earth's axis of rotation. It consists of three coordinates: one represents the position along the northern axis, one along the local eastern axis, and one represents the vertical position. The local ENU coordinates are formed from a plane tangent to the Earth's surface fixed to a specific location and hence it is sometimes known as a "Local Tangent" or "local geodetic" plane. By convention the east axis is labeled x, the north y and the up z. Read more on Wikipedia
GeoPose is a geographically-anchored pose with 6 degrees of freedom. Position is presented as WGS-84 Geodetic point, rotation is presented as quaternion in ENU coordinate system. Example:
{
"position": {
"lat": 59.93930066333559,
"lon": 30.216465340943543,
"h": 6.6434114027277181
}
"quaternion": {
"w": -0.3363841028150708,
"x": 0.6584681350287606,
"y": -0.4366714830997145,
"z": -0.5124289866630708
}
}
Select a reference geodetic point (lat_ref, lon_ref, h_ref), which will be the origin of your local coordinate system. For example, this could be the first position of a camera.
Convert geodetic position of GeoPose to position in ECEF coordinate system:
import math
a = 6378137
b = 6356752.3142
f = (a - b) / a
e_sq = f * (2 - f)
# Converts WGS-84 Geodetic point (lat, lon, h) to the
# Earth-Centered Earth-Fixed (ECEF) coordinates (x, y, z).
def geodetic_to_ecef(lat, lon, h):
lamb = math.radians(lat)
phi = math.radians(lon)
s = math.sin(lamb)
N = a / math.sqrt(1 - e_sq * s * s)
sin_lambda = math.sin(lamb)
cos_lambda = math.cos(lamb)
sin_phi = math.sin(phi)
cos_phi = math.cos(phi)
x = (h + N) * cos_lambda * cos_phi
y = (h + N) * cos_lambda * sin_phi
z = (h + (1 - e_sq) * N) * sin_lambda
return x, y, z
# Converts the Earth-Centered Earth-Fixed (ECEF) coordinates (x, y, z) to
# East-North-Up coordinates in a Local Tangent Plane that is centered at the
# (WGS-84) Geodetic point (lat_ref, lon_ref, h_ref).
def ecef_to_enu(x, y, z, lat_ref, lon_ref, h_ref):
lamb = math.radians(lat_ref)
phi = math.radians(lon_ref)
s = math.sin(lamb)
N = a / math.sqrt(1 - e_sq * s * s)
sin_lambda = math.sin(lamb)
cos_lambda = math.cos(lamb)
sin_phi = math.sin(phi)
cos_phi = math.cos(phi)
x0 = (h_ref + N) * cos_lambda * cos_phi
y0 = (h_ref + N) * cos_lambda * sin_phi
z0 = (h_ref + (1 - e_sq) * N) * sin_lambda
xd = x - x0
yd = y - y0
zd = z - z0
xEast = -sin_phi * xd + cos_phi * yd
yNorth = -cos_phi * sin_lambda * xd - sin_lambda * sin_phi * yd + cos_lambda * zd
zUp = cos_lambda * cos_phi * xd + cos_lambda * sin_phi * yd + sin_lambda * zd
return xEast, yNorth, zUp
Use quaternion as is.
def geodetic_to_enu(lat, lon, h, lat_ref, lon_ref, h_ref):
x, y, z = geodetic_to_ecef(lat, lon, h)
return ecef_to_enu(x, y, z, lat_ref, lon_ref, h_ref)
geopose = {"position": {
"lat": 59.93930063661516,
"lon": 30.21646537256484,
"h": 6.6359911204808377
}
"quaternion": {
"w": 0.24078175147153705,
"x": 0.23898354967230406,
"y": -0.6720152706953141,
"z": -0.6582601971079732
}}
lat_ref = 59.93930066333559
lon_ref = 30.216465340943543
h_ref = 0.434114027277181
lat = geopose['position']['lat']
lon = geopose['position']['lon']
h = geopose['position']['h']
position_ref = geodetic_to_enu(lat_ref, lon_ref, h_ref, lat_ref, lon_ref, h_ref)
print(f"Reference ENU position: {position_ref}")
position = geodetic_to_enu(lat, lon, h, lat_ref, lon_ref, h_ref)
quaternion = [geopose['quaternion']['w'], geopose['quaternion']['x'],
geopose['quaternion']['y'], geopose['quaternion']['z']]
print(f'Object ENU position: {position}\nObject ENU orientation: {quaternion}')
Output:
Reference ENU position: (0.0, 0.0, 0.0)
Object ENU position: (0.0017677017435744347, -0.0029769590309327576, 6.201877094031028)
Object ENU orientation: [0.24078175147153705, 0.23898354967230406, -0.6720152706953141, -0.6582601971079732]
For detailed information about coordinate systems, see Geographic coordinate system.
Check WebXR OSCP client
Check OSCP Unity Client example
Augmented City implementation of OSCP API
See more on https://www.openarcloud.org/oscp and https://github.com/OpenArCloud
Get camera geopose. See GeoPose
id required | string (StringId) |
timestamp required | integer (Timestamp) The number of milliseconds since the Unix Epoch. |
type required | string Ex. geopose. Unused property |
required | Array of objects (Sensor) |
required | Array of objects (SensorReading) |
Array of objects (GeoPoseResp) Previous geoposes. Unused property | |
object (LocalizationHint) List of reconstruction identifiers. The service will perform localization sequentially in each reconstruction according to the order specified in the list until the first successful result is obtained. If hint_only is true, the service will localize only in the specified reconstructions. If hint_only is false, the service will continue localization attempts in the nearest reconstructions |
{- "id": "string",
- "timestamp": 0,
- "type": "string",
- "sensors": [
- {
- "id": "string",
- "type": "camera"
}
], - "sensorReadings": [
- {
- "timestamp": 0,
- "sensorId": "string",
- "reading": {
- "sequenceNumber": 0,
- "imageFormat": "JPG",
- "size": [
- 0,
- 0
], - "imageBytes": "string",
- "imageOrientation": {
- "mirrored": false,
- "rotation": 0
}
}
}
], - "priorPoses": [
- {
- "id": "string",
- "timestamp": 0,
- "accuracy": {
- "position": 0,
- "orientation": 0
}, - "type": "string",
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "reconstruction_id": 390
}
], - "hint": {
- "reconstructions": [
- 123,
- 456
], - "hint_only": false
}
}
{- "id": "string",
- "timestamp": 0,
- "accuracy": {
- "position": 0,
- "orientation": 0
}, - "type": "string",
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "reconstruction_id": 390
}
Get camera geopose and objects scene. See GeoPose
id required | string (StringId) |
timestamp required | integer (Timestamp) The number of milliseconds since the Unix Epoch. |
type required | string Ex. geopose. Unused property |
required | Array of objects (Sensor) |
required | Array of objects (SensorReading) |
Array of objects (GeoPoseResp) Previous geoposes. Unused property | |
object (LocalizationHint) List of reconstruction identifiers. The service will perform localization sequentially in each reconstruction according to the order specified in the list until the first successful result is obtained. If hint_only is true, the service will localize only in the specified reconstructions. If hint_only is false, the service will continue localization attempts in the nearest reconstructions |
{- "id": "string",
- "timestamp": 0,
- "type": "string",
- "sensors": [
- {
- "id": "string",
- "type": "camera"
}
], - "sensorReadings": [
- {
- "timestamp": 0,
- "sensorId": "string",
- "reading": {
- "sequenceNumber": 0,
- "imageFormat": "JPG",
- "size": [
- 0,
- 0
], - "imageBytes": "string",
- "imageOrientation": {
- "mirrored": false,
- "rotation": 0
}
}
}
], - "priorPoses": [
- {
- "id": "string",
- "timestamp": 0,
- "accuracy": {
- "position": 0,
- "orientation": 0
}, - "type": "string",
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "reconstruction_id": 390
}
], - "hint": {
- "reconstructions": [
- 123,
- 456
], - "hint_only": false
}
}
{- "geopose": {
- "id": "string",
- "timestamp": 0,
- "accuracy": {
- "position": 0,
- "orientation": 0
}, - "type": "string",
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "reconstruction_id": 390
}, - "scrs": [
- {
- "id": "string",
- "type": "string",
- "content": {
- "id": "string",
- "type": "string",
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "placekey": [
- "string"
], - "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "size": 0,
- "bbox": "string",
- "custom_data": {
- "sticker_id": 1290,
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}, - "tenant": "string",
- "timestamp": 0
}
]
}
Get SCRs covering h3Index
topic required | string |
h3Index | string |
[- {
- "id": "string",
- "type": "string",
- "content": {
- "id": "string",
- "type": "string",
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "placekey": [
- "string"
], - "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "size": 0,
- "bbox": "string",
- "custom_data": {
- "sticker_id": 1290,
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}, - "tenant": "string",
- "timestamp": 0
}
]
Get SCRs by GPS and radius
lat required | number <double> Latitude |
lon required | number <double> Longitude |
r required | number <float> Search radius, m |
project_id | integer (ProjectId) Example: project_id=3 Project id. Return objects belonging to the specified project id. Only one project_id could be specified. Return objects belonging to the public project if project id isn't specified. |
reconstruction_id | integer (ReconstructionId) Example: reconstruction_id=390 Reconstruction id. Return objects belonging to the specified reconstruction. Only one reconstruction_id could be specified. Return all objects around if reconstruction id isn't specified. |
[- {
- "id": "string",
- "type": "string",
- "content": {
- "id": "string",
- "type": "string",
- "title": "string",
- "description": "string",
- "keywords": [
- "string"
], - "placekey": [
- "string"
], - "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "ecefPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "localPose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "size": 0,
- "bbox": "string",
- "custom_data": {
- "sticker_id": 1290,
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}, - "tenant": "string",
- "timestamp": 0
}
]
Get the list of augmented cities. Localization is possible only inside scanned and reconstructed areas. Information about reconstructed areas will be provided in the future.
[- {
- "city_id": 0,
- "city": "Saint Petersburg",
- "country": "Russia",
- "description": {
- "circle": {
- "center": {
- "type": "Point",
- "coordinates": [
- 0,
- 0
]
}, - "radius": 0.1
}
}
}
]
Get augmented city by gps point
p_latitude required | number <double> GPS latitude |
p_longitude required | number <double> GPS longitude |
{- "city_id": 0,
- "city": "Saint Petersburg",
- "country": "Russia",
- "description": {
- "circle": {
- "center": {
- "type": "Point",
- "coordinates": [
- 0,
- 0
]
}, - "radius": 0.1
}
}
}
Create a new task to reconstruct a series of images. The task passes to the status of waiting for image upload after creation. After receiving a signal that the images have been uploaded, the task is added to the queue for processing.
client required | string Application name | ||||||||
daytime required | string (ScanDaytime) Enum: "DAY" "EVENING" "NIGHT"
| ||||||||
device required | string Phone or camera model | ||||||||
name required | string Location name | ||||||||
required | Array of objects (ScanPassages) | ||||||||
user required | string User login or id |
{- "client": "AC Scanner version_name: 1.0 version_type: release",
- "daytime": "DAY",
- "device": "Mi MIX 3",
- "name": "Elm street",
- "passages": [
- {
- "style": "LINEAR_AUTO",
- "points": [
- [
- {
- "filename": "image_1.jpg",
- "camera": {
- "pose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "intrinsics": {
- "fx": 0.1,
- "fy": 0.1,
- "cx": 0.1,
- "cy": 0.1
}, - "height_above_ground_level": 0.1
}, - "geolocation": {
- "latitude": 25.000933,
- "longitude": -70.999828,
- "altitude": 7,
- "accuracy": 2,
- "altitudeAccuracy": 5,
- "altitudeReference": "WGS84",
- "heading": 0,
- "speed": 0
}, - "gravity": {
- "x": 0,
- "y": -1,
- "z": 0
}
}
]
]
}
], - "user": "user@mail.com"
}
{- "task_id": "736fde4d-9029-4915-8189-01353d6982cb",
- "images": [
- "image.jpg"
], - "stage": "UPLOAD",
- "status": {
- "code": 0,
- "message": "Reconstructed 97 % [219 / 226]"
}, - "reconstruction_id": 390
}
Upload images for reconstruction. You can upload one image or a group of images at a time. To send a signal that the upload is complete, call the method without image data. After receiving such a signal that images are being uploaded, the service adds the task to the queue and changes its status to IN_QUEUE. When the status is changed, new images cannot be uploaded.
task_id required | string <uuid> (ReconstructionTaskId) Reconstruction task id. Only one task_id could be specified |
Image or images list. Call with no images data to finish uploading and start reconstruction
image | string <binary> (ImageWithExif) A JPEG-encoded image, must include GPS data in EXIF tags |
{- "task_id": "736fde4d-9029-4915-8189-01353d6982cb",
- "images": [
- "image.jpg"
], - "stage": "UPLOAD",
- "status": {
- "code": 0,
- "message": "Reconstructed 97 % [219 / 226]"
}, - "reconstruction_id": 390
}
Get series reconstruction task status by task id. Several task ids could be specified. Return status for known task ids. Return nothing for unknown task ids.
Property reconstruction_id
is available only if reconstruction is done successfully.
Property status
is available after the reconstruction task has moved to the DONE
stage.
Property images
is available only during the UPLOAD
stage. Use the property to check which images have been uploaded.
task_id required | Array of strings <uuid> (ReconstructionTaskIds) [ items <uuid > ] Task id |
[- {
- "task_id": "736fde4d-9029-4915-8189-01353d6982cb",
- "images": [
- "image.jpg"
], - "stage": "UPLOAD",
- "status": {
- "code": 0,
- "message": "Reconstructed 97 % [219 / 226]"
}, - "reconstruction_id": 390
}
]
Add a custom object by 3d pose
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (Pose) |
Array of objects (Frame3d) = 4 items | |
required | object (ObjectDescription) |
{- "reconstruction_id": 390,
- "pose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "frame": [
- {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}
], - "description": {
- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
}
{- "objects_info": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Add a custom object by geopose. See GeoPose
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPose) |
required | object (ObjectDescription) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "description": {
- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
}
{- "objects_info": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Add a custom object by geopose from angles. See GeoPose.
Geopose rotation is expressed as a heading, pitch, and roll.
Heading is the rotation about the negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about the positive x axis. Applied in that order.
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPoseFromAngles) |
required | object (ObjectDescription) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "angles": {
- "heading": 0,
- "pitch": 0,
- "roll": 0
}
}, - "description": {
- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
}
{- "objects_info": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Add a custom object by geopose from height above ground level. See GeoPose.
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPoseFromHagl) |
required | object (ObjectDescription) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "heightAboveGroundLevel": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "description": {
- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
}
{- "objects_info": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Add a custom object by geopose from height above ground level and angles. See GeoPose.
Geopose rotation is expressed as a heading, pitch, and roll.
Heading is the rotation about the negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about the positive x axis. Applied in that order.
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPoseFromHaglAndAngles) |
required | object (ObjectDescription) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "heightAboveGroundLevel": 0
}, - "angles": {
- "heading": 0,
- "pitch": 0,
- "roll": 0
}
}, - "description": {
- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
}
{- "objects_info": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Add a custom object by marked image. The image must be localizable in the system. Before calling the method check the image with localization api.
required | object (ObjectWithMarkedImage) |
image required | string <binary> (ImageWithExif) A JPEG-encoded image, must include GPS data in EXIF tags |
{- "objects_info": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Update object local pose
placeholder_id required | integer (PlaceholderId) Example: 1551 Placeholder id |
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (Pose) |
Array of objects (Frame3d) = 4 items |
{- "reconstruction_id": 390,
- "pose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "frame": [
- {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}
]
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Update object geopose. See GeoPose
placeholder_id required | integer (PlaceholderId) Example: 1551 Placeholder id |
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPose) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Update object geopose from angles. See GeoPose
placeholder_id required | integer (PlaceholderId) Example: 1551 Placeholder id |
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPoseFromAngles) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "h": 0
}, - "angles": {
- "heading": 0,
- "pitch": 0,
- "roll": 0
}
}
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Update object geopose from height above ground level. See GeoPose
placeholder_id required | integer (PlaceholderId) Example: 1551 Placeholder id |
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPoseFromHagl) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "heightAboveGroundLevel": 0
}, - "quaternion": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Update object geopose from height above ground level and angles. See GeoPose
placeholder_id required | integer (PlaceholderId) Example: 1551 Placeholder id |
reconstruction_id required | integer (ReconstructionId) Reconstruction id |
required | object (GeoPoseFromHaglAndAngles) |
{- "reconstruction_id": 390,
- "geopose": {
- "position": {
- "lat": 0,
- "lon": 0,
- "heightAboveGroundLevel": 0
}, - "angles": {
- "heading": 0,
- "pitch": 0,
- "roll": 0
}
}
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Update AR object's content.
required | Model3dData (object) or InfostickerData (object) or VideoData (object) or ImageData (object) |
{- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Update AR object's content partially, all properties are not mandatory. Only sent properties would be changed, others remain untouched
required | Model3dDataPartialUpdate (object) or InfostickerDataPartialUpdate (object) or VideoDataPartialUpdate (object) or ImageDataPartialUpdate (object) |
{- "sticker": {
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
{- "status": {
- "code": 0,
- "message": "string"
}
}
Get objects by placeholders ids
p_placeholder_ids required | Array of integers (PlaceholderId) Placeholders ids |
p_language | string Default: "en" Object content language |
{- "p_placeholder_ids": [
- 1551
], - "p_language": "ru"
}
[- {
- "placeholder": {
- "placeholder_id": 1551
}, - "sticker": {
- "created_by": "string",
- "created_date": "string",
- "changed_by": "string",
- "changed_date": "string",
- "sticker_id": 1290,
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
]
Get placeholders list by gps
p_latitude required | number <double> GPS latitude |
p_longitude required | number <double> GPS longitude |
p_radius required | number <float> Search radius |
[- {
- "placeholder": {
- "placeholder_id": 1551,
- "gps": {
- "latitude": 25.000933,
- "longitude": -70.999828,
- "altitude": 7
}
}
}
]
Prepare for localization for given geolocation. Causes server to load nearby reconstructions for localization. Returns an error when localization in this location is not possible.
lat required | number <double> GPS latitude |
lon required | number <double> GPS longitude |
alt | number <double> GPS altitude (optional) |
dop | number <float> GPS HDOP (optional) |
{- "status": {
- "code": 0,
- "message": "string"
}
}
Localize uploaded image. Return camera pose and optional placeholders scene, surfaces scene and objects content. Camera, placeholders and surfaces coordinates are local coordinates in reconstruction coordinate system identified by reconstruction id.
required | object (ImageDescription) Describes gps position and camera parameters |
image required | string <binary> (Image) A JPEG-encoded image |
object (LocalizationHint) List of reconstruction identifiers. The service will perform localization sequentially in each reconstruction according to the order specified in the list until the first successful result is obtained. If hint_only is true, the service will localize only in the specified reconstructions. If hint_only is false, the service will continue localization attempts in the nearest reconstructions |
{- "camera": {
- "pose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "intrinsics": {
- "fx": 0.1,
- "fy": 0.1,
- "cx": 0.1,
- "cy": 0.1
}, - "height_above_ground_level": 0.1
}, - "reconstruction_id": 390,
- "placeholders": [
- {
- "placeholder_id": "string",
- "pose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "frame": [
- {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}
]
}
], - "surfaces": [
- {
- "pose": {
- "position": {
- "x": 0.1,
- "y": 0.1,
- "z": 0.1
}, - "orientation": {
- "w": 1,
- "x": 0,
- "y": 0,
- "z": 0
}
}, - "frame": [
- {
- "x": 0.1,
- "y": 0.1
}, - {
- "x": 0.1,
- "y": 0.1
}, - {
- "x": 0.1,
- "y": 0.1
}, - {
- "x": 0.1,
- "y": 0.1
}
]
}
], - "objects": [
- {
- "placeholder": {
- "placeholder_id": "string"
}, - "sticker": {
- "sticker_id": "string",
- "type": "3D",
- "sticker_text": "string",
- "path": "string",
- "description": "string",
- "property1": "string",
- "property2": "string",
- "subtype": "OBJECT",
- "model_id": "string",
- "model_scale": "0.5",
- "grounded": "0",
- "vertically_aligned": "0"
}
}
], - "status": {
- "code": 0,
- "message": "string"
}
}
Get a list of resources by filter
resource_ids | Array of strings |
types | Array of strings |
{- "resource_ids": [
- "string"
], - "types": [
- "string"
]
}
[- {
- "resource_id": "63bd82a9-73e2-4163-96da-bb76efef796d",
- "name": "My 3d model",
- "type": "3d",
- "created_by": "user",
- "changed_by": "user",
- "created_date": 1665354857677,
- "changed_date": 1665354857677,
- "refs": [
]
}
]
Get a list of 3D models. Each 3D model has a preview image and can have several different file formats in order to use them with different platforms. 3d model has at least one file format.
platform | string (Platform) Enum: "ios" "android" "uwp" Filter for platform |
[- {
- "resource_id": "63bd82a9-73e2-4163-96da-bb76efef796d",
- "name": "My 3d model",
- "type": "3d",
- "created_by": "user",
- "changed_by": "user",
- "created_date": 1665354857677,
- "changed_date": 1665354857677,
- "refs": [
]
}
]
Add 3d model to server
name required | string | ||||||||
<platform> required | string <binary> 3d model file. Possible platform names:
| ||||||||
preview required | string <binary> A JPEG-encoded image |
{- "id": "string",
- "status": {
- "code": 0,
- "message": "string"
}
}
Update 3d model at server
name | string | ||||||||
<platform> | string <binary> 3d model file. Possible platform names:
| ||||||||
preview | string <binary> A JPEG-encoded image |
{- "id": "string",
- "status": {
- "code": 0,
- "message": "string"
}
}
[- {
- "resource_id": "63bd82a9-73e2-4163-96da-bb76efef796d",
- "name": "My image",
- "type": "image",
- "created_by": "user",
- "changed_by": "user",
- "created_date": 1665354857677,
- "changed_date": 1665354857677,
}
]
{- "resource_id": "63bd82a9-73e2-4163-96da-bb76efef796d",
- "name": "My image",
- "type": "image",
- "created_by": "user",
- "changed_by": "user",
- "created_date": 1665354857677,
- "changed_date": 1665354857677,
}
[- {
- "resource_id": "63bd82a9-73e2-4163-96da-bb76efef796d",
- "name": "My image",
- "type": "image",
- "created_by": "user",
- "changed_by": "user",
- "created_date": 1665354857677,
- "changed_date": 1665354857677,
}
]
{- "resource_id": "63bd82a9-73e2-4163-96da-bb76efef796d",
- "name": "My image",
- "type": "image",
- "created_by": "user",
- "changed_by": "user",
- "created_date": 1665354857677,
- "changed_date": 1665354857677,
}