Source code for GeoHealthCheck.plugins.probe.ogc3dtiles
from GeoHealthCheck.probe import Probe
import requests
[docs]class OGC3DTiles(Probe):
"""
OGC3DTiles
"""
NAME = 'GET Tileset.json and tile data'
DESCRIPTION = 'Request tileset.json, ' + \
'and recursively find and request tile data url'
RESOURCE_TYPE = 'OGC:3DTiles'
REQUEST_METHOD = 'GET'
CHECKS_AVAIL = {
'GeoHealthCheck.plugins.check.checks.HttpStatusNoError': {
'default': True
},
}
"""Checks avail"""
[docs] def perform_request(self):
url_base = self._resource.url
# Remove trailing '/' if present
if url_base.endswith('/'):
url_base = url_base[:-1]
elif url_base.endswith('/tileset.json'):
url_base = url_base.split('/tileset.json')[0]
# Request tileset.json
try:
tile_url = url_base + '/tileset.json'
self.log('Requesting: %s url=%s' % (self.REQUEST_METHOD, tile_url))
self.response = Probe.perform_get_request(self, tile_url)
self.run_checks()
except requests.exceptions.RequestException as e:
msg = "Request Err: Error requesting tileset.json %s %s" \
% (e.__class__.__name__, str(e))
self.result.set(False, msg)
# If error occurs during request of tileset.json, no use going on
return
# Get data url from tileset.json and request tile data
try:
tile_root = self.response.json()['root']
data_uri = self.get_3d_tileset_content_uri(tile_root)
data_url = url_base + '/' + data_uri
self.log('Requesting: %s url=%s' % (self.REQUEST_METHOD, data_url))
self.response = Probe.perform_get_request(self, data_url)
self.run_checks()
except requests.exceptions.RequestException as e:
msg = "Request Err: Error requesting tile data %s %s" \
% (e.__class__.__name__, str(e))
self.result.set(False, msg)
def get_3d_tileset_content_uri(self, tile):
# Use recursion to find tile data url
for child in tile['children']:
if 'content' in child:
return child['content']['uri']
result = self.get_3d_tileset_content_uri(child)
return result