def admin_check_extents(request): """ This view allows administrators to visualize data and configured extents. Since it's the first, we implemented this in a very rough way. If there is to be more admin tools like this one. Move this to a separate Django app and style HTML properly. """ path_extent_native = sql_extent("SELECT ST_Extent(geom) FROM core_path;") path_extent = api_bbox(path_extent_native) dem_extent_native = sql_extent( "SELECT ST_Extent(rast::geometry) FROM altimetry_dem;") dem_extent = api_bbox(dem_extent_native) tiles_extent_native = settings.SPATIAL_EXTENT tiles_extent = api_bbox(tiles_extent_native) viewport_native = settings.LEAFLET_CONFIG['SPATIAL_EXTENT'] viewport = api_bbox(viewport_native, srid=settings.API_SRID) def leafletbounds(bbox): return [[bbox[1], bbox[0]], [bbox[3], bbox[2]]] context = dict( path_extent=leafletbounds(path_extent), path_extent_native=path_extent_native, dem_extent=leafletbounds(dem_extent) if dem_extent else None, dem_extent_native=dem_extent_native, tiles_extent=leafletbounds(tiles_extent), tiles_extent_native=tiles_extent_native, viewport=leafletbounds(viewport), viewport_native=viewport_native, SRID=settings.SRID, API_SRID=settings.API_SRID, ) return render(request, 'common/check_extents.html', context)
def test_api_bbox(self): bbox = api_bbox(self.bbox, srid=2154, buffer=0.5) self.assertEqual(bbox, (-3.541720187208087, -7.128188339796316, 8.85446791766016, 5.0971257963327625)) bbox_no_buffer = api_bbox(self.bbox, srid=2154, buffer=0.0) self.assertEqual(bbox_no_buffer, (-0.4442674114234903, -4.028058663629689, 5.756043049259614, 1.9970003967648557))
def test_api_bbox(self): bbox = api_bbox(self.bbox, srid=2154, buffer=0.5) self.assertAlmostEqual(bbox[0], -3.54172018720) self.assertAlmostEqual(bbox[1], -7.12818833979) self.assertAlmostEqual(bbox[2], 8.85446791766) self.assertAlmostEqual(bbox[3], 5.09712579633) bbox_no_buffer = api_bbox(self.bbox, srid=2154, buffer=0.0) self.assertAlmostEqual(bbox_no_buffer[0], -0.44426741142) self.assertAlmostEqual(bbox_no_buffer[1], -4.02805866362) self.assertAlmostEqual(bbox_no_buffer[2], 5.75604304925) self.assertAlmostEqual(bbox_no_buffer[3], 1.99700039676)
def admin_check_extents(request): """ This view allows administrators to visualize data and configured extents. Since it's the first, we implemented this in a very rough way. If there is to be more admin tools like this one. Move this to a separate Django app and style HTML properly. """ path_extent_native = sql_extent("SELECT ST_Extent(geom) FROM l_t_troncon;") path_extent = api_bbox(path_extent_native) try: dem_extent_native = sql_extent( "SELECT ST_Extent(rast::geometry) FROM mnt;") dem_extent = api_bbox(dem_extent_native) except DatabaseError: # mnt table missing dem_extent_native = None dem_extent = None tiles_extent_native = settings.SPATIAL_EXTENT tiles_extent = api_bbox(tiles_extent_native) viewport_native = settings.LEAFLET_CONFIG['SPATIAL_EXTENT'] viewport = api_bbox(viewport_native, srid=settings.API_SRID) def leafletbounds(bbox): return [[bbox[1], bbox[0]], [bbox[3], bbox[2]]] context = dict( path_extent=leafletbounds(path_extent), path_extent_native=path_extent_native, dem_extent=leafletbounds(dem_extent) if dem_extent else None, dem_extent_native=dem_extent_native, tiles_extent=leafletbounds(tiles_extent), tiles_extent_native=tiles_extent_native, viewport=leafletbounds(viewport), viewport_native=viewport_native, SRID=settings.SRID, API_SRID=settings.API_SRID, ) return render(request, 'common/check_extents.html', context)
if not hasattr(check_srid_has_meter_unit, '_checked'): cursor = connection.cursor() cursor.execute( """ SELECT * FROM spatial_ref_sys WHERE srtext ILIKE '%%meter%%' AND srid=%s;""", [settings.SRID]) results = cursor.fetchall() if len(results) == 0: err_msg = 'Unit of SRID EPSG:%s is not meter.' % settings.SRID raise ImproperlyConfigured(err_msg) check_srid_has_meter_unit._checked = True if settings.TEST and not settings.SOUTH_TESTS_MIGRATE: pre_syncdb.connect(check_srid_has_meter_unit, dispatch_uid="geotrek.core.checksrid") post_syncdb.connect(run_initial_sql_post_syncdb, dispatch_uid="geotrek.core.sqlautoload") # During tests, the signal is received twice unfortunately # https://code.djangoproject.com/ticket/17977 else: pre_migrate.connect(check_srid_has_meter_unit, dispatch_uid="geotrek.core.checksrid") post_migrate.connect(run_initial_sql_post_migrate, dispatch_uid="geotrek.core.sqlautoload") """ Computed client-side setting. """ settings.LEAFLET_CONFIG['SPATIAL_EXTENT'] = api_bbox( settings.SPATIAL_EXTENT, buffer=settings.VIEWPORT_MARGIN)
if not hasattr(check_srid_has_meter_unit, '_checked'): cursor = connection.cursor() cursor.execute( """ SELECT * FROM spatial_ref_sys WHERE srtext ILIKE '%%meter%%' AND srid=%s;""", [settings.SRID]) results = cursor.fetchall() if len(results) == 0: err_msg = 'Unit of SRID EPSG:%s is not meter.' % settings.SRID raise ImproperlyConfigured(err_msg) check_srid_has_meter_unit._checked = True if settings.TEST and not settings.SOUTH_TESTS_MIGRATE: pre_syncdb.connect(check_srid_has_meter_unit, dispatch_uid="geotrek.core.checksrid") post_syncdb.connect(run_initial_sql_post_syncdb, dispatch_uid="geotrek.core.sqlautoload") # During tests, the signal is received twice unfortunately # https://code.djangoproject.com/ticket/17977 else: pre_migrate.connect(check_srid_has_meter_unit, dispatch_uid="geotrek.core.checksrid") post_migrate.connect(run_initial_sql_post_migrate, dispatch_uid="geotrek.core.sqlautoload") """ Computed client-side setting. """ settings.LEAFLET_CONFIG['SPATIAL_EXTENT'] = api_bbox(settings.SPATIAL_EXTENT, buffer=0.5)
load_sql_files(app_label) def check_srid_has_meter_unit(sender, **kwargs): if not hasattr(check_srid_has_meter_unit, '_checked'): cursor = connection.cursor() cursor.execute(""" SELECT * FROM spatial_ref_sys WHERE srtext ILIKE '%%meter%%' AND srid=%s;""", [settings.SRID]) results = cursor.fetchall() if len(results) == 0: err_msg = 'Unit of SRID EPSG:%s is not meter.' % settings.SRID raise ImproperlyConfigured(err_msg) check_srid_has_meter_unit._checked = True if settings.TEST and not settings.SOUTH_TESTS_MIGRATE: pre_syncdb.connect(check_srid_has_meter_unit, dispatch_uid="geotrek.core.checksrid") post_syncdb.connect(run_initial_sql_post_syncdb, dispatch_uid="geotrek.core.sqlautoload") # During tests, the signal is received twice unfortunately # https://code.djangoproject.com/ticket/17977 else: pre_migrate.connect(check_srid_has_meter_unit, dispatch_uid="geotrek.core.checksrid") post_migrate.connect(run_initial_sql_post_migrate, dispatch_uid="geotrek.core.sqlautoload") """ Computed client-side setting. """ settings.LEAFLET_CONFIG['SPATIAL_EXTENT'] = api_bbox(settings.SPATIAL_EXTENT, buffer=0.5)