def render_to_response(self, context, **response_kwargs): epsg = proj4_to_epsg(pyproj.Proj(str(self.object.projection))) if epsg: full_extent = self.object.full_extent initial_extent = self.object.initial_extent else: epsg = 102100 projection = pyproj.Proj('+units=m +init=epsg:3857') full_extent = self.object.full_extent.project(projection) initial_extent = self.object.initial_extent.project(projection) data = { 'currentVersion': '10.1', 'serviceDescription': self.object.description, 'mapName': self.object.name, 'description': self.object.description, 'copyrightText': '', 'supportsDynamicLayers': True, 'layers': [ { 'id': v.index, 'name': v.name, 'defaultVisibility': True, 'parentLayerId': -1, 'subLayerIds': None, 'minScale': 0, 'maxScale': 0 } for v in self.object.variable_set.all() ], 'spatialReference': {'wkid': epsg}, 'singleFusedMapCache': False, 'initialExtent': extent_to_envelope(initial_extent, epsg), 'fullExtent': extent_to_envelope(full_extent, epsg), 'supportedImageFormatTypes': ','.join(SUPPORTED_IMAGE_FORMATS), 'capabilities': 'Map,Query', 'supportedQueryFormat': 'JSON' } if self.object.supports_time: data['timeInfo'] = { 'timeExtent': [date_to_timestamp(self.object.time_start), date_to_timestamp(self.object.time_end)], 'timeRelation': 'esriTimeRelationOverlaps', 'defaultTimeInterval': self.object.time_interval, 'defaultTimeIntervalUnits': TIME_UNITS_MAP.get(self.object.time_interval_units), 'hasLiveData': False } return HttpResponse(json.dumps(data), content_type='application/json')
def get_layer_data(variable): epsg = proj4_to_epsg(variable.full_extent.projection) if epsg: full_extent = variable.full_extent else: epsg = 102100 projection = pyproj.Proj('+units=m +init=epsg:3857') full_extent = variable.full_extent.project(projection) data = { 'id': variable.index, 'name': variable.name, 'type': 'Raster Layer', 'description': variable.description, 'geometryType': None, 'hasZ': False, 'hasM': False, 'copyrightText': None, 'parentLayer': None, 'subLayers': None, 'minScale': 0, 'maxScale': 0, 'defaultVisibility': True, 'extent': extent_to_envelope(full_extent, epsg), 'displayField': variable.variable, 'maxRecordCount': 1000, 'supportsStatistics': False, 'supportsAdvancedQueries': False, 'capabilities': 'Map,Query', 'supportedQueryFormats': 'JSON', 'isDataVersioned': False } if variable.supports_time: data['timeInfo'] = { 'timeExtent': [date_to_timestamp(variable.time_start), date_to_timestamp(variable.time_end)], 'timeInterval': variable.service.time_interval, 'timeIntervalUnits': TIME_UNITS_MAP.get(variable.service.time_interval_units), 'exportOptions': { 'useTime': True, 'timeDataCumulative': False }, 'hasLiveData': False } return data