Esempio n. 1
0
def _register_arcgis_layers(service, arc=None):
    """
    Register layers from an ArcGIS REST service
    """
    arc = arc or ArcMapService(service.base_url)
    logger.info("Registering layers for %s" % service.base_url)
    for layer in arc.layers:
        valid_name = slugify(layer.name)
        count = 0
        layer_uuid = str(uuid.uuid1())
        bbox = [layer.extent.xmin, layer.extent.ymin, layer.extent.xmax, layer.extent.ymax]
        typename = layer.id

        existing_layer = None
        logger.info("Registering layer  %s" % layer.name)
        try:
            existing_layer = Layer.objects.get(typename=typename, service=service)
        except Layer.DoesNotExist:
            pass

        llbbox = mercator_to_llbbox(bbox)

        if existing_layer is None:
            # Need to check if layer already exists??
            logger.info("Importing layer  %s" % layer.name)
            saved_layer, created = Layer.objects.get_or_create(
                typename=typename,
                service=service,
                defaults=dict(
                    name=valid_name,
                    store=service.name,  # ??
                    storeType="remoteStore",
                    workspace="remoteWorkspace",
                    title=layer.name,
                    abstract=layer._json_struct["description"] or _("Not provided"),
                    uuid=layer_uuid,
                    owner=None,
                    srid="EPSG:%s" % layer.extent.spatialReference.wkid,
                    bbox_x0=llbbox[0],
                    bbox_x1=llbbox[2],
                    bbox_y0=llbbox[1],
                    bbox_y1=llbbox[3],
                ),
            )

            saved_layer.set_default_permissions()
            saved_layer.save()

            service_layer, created = ServiceLayer.objects.get_or_create(service=service, typename=layer.id)
            service_layer.layer = saved_layer
            service_layer.title = (layer.name,)
            service_layer.description = (saved_layer.abstract,)
            service_layer.styles = None
            service_layer.save()

            create_arcgis_links(saved_layer)

        count += 1
    message = "%d Layers Registered" % count
    return_dict = {"status": "ok", "msg": message}
    return return_dict
Esempio n. 2
0
def _register_arcgis_layers(service, arc=None):
    """
    Register layers from an ArcGIS REST service
    """
    arc = arc or ArcMapService(service.base_url)
    for layer in arc.layers:
        valid_name = slugify(layer.name)
        count = 0
        layer_uuid = str(uuid.uuid1())
        bbox = [
            layer.extent.xmin, layer.extent.ymin, layer.extent.xmax,
            layer.extent.ymax
        ]
        typename = layer.id

        existing_layer = None

        try:
            existing_layer = Layer.objects.get(typename=typename,
                                               service=service)
        except Layer.DoesNotExist:
            pass

        llbbox = mercator_to_llbbox(bbox)

        if existing_layer is None:
            # Need to check if layer already exists??
            saved_layer, created = Layer.objects.get_or_create(
                typename=typename,
                service=service,
                defaults=dict(
                    name=valid_name,
                    store=service.name,  # ??
                    storeType="remoteStore",
                    workspace="remoteWorkspace",
                    title=layer.name,
                    abstract=layer._json_struct['description']
                    or _("Not provided"),
                    uuid=layer_uuid,
                    owner=None,
                    srid="EPSG:%s" % layer.extent.spatialReference.wkid,
                    bbox_x0=llbbox[0],
                    bbox_x1=llbbox[2],
                    bbox_y0=llbbox[1],
                    bbox_y1=llbbox[3],
                ))

            saved_layer.set_default_permissions()
            saved_layer.save()

            service_layer, created = ServiceLayer.objects.get_or_create(
                service=service, typename=layer.id)
            service_layer.layer = saved_layer
            service_layer.title = layer.name,
            service_layer.description = saved_layer.abstract,
            service_layer.styles = None
            service_layer.save()

            create_arcgis_links(saved_layer)

        count += 1
    message = "%d Layers Registered" % count
    return_dict = {'status': 'ok', 'msg': message}
    return return_dict