import base64 import re import io import PIL from PIL import Image from PIL.Image import Image as PILImage from PIL.ExifTags import TAGS, GPSTAGS from typing import Tuple, IO, AnyStr from dataclasses import dataclass from geoapi.exceptions import InvalidEXIFData from geoapi.log import logging logger = logging.getLogger(__name__) @dataclass class ImageData: thumb: PILImage resized: PILImage coordinates: Tuple[float, float] @dataclass class ImageOverlay: thumb: PILImage original: PILImage class ImageService: THUMBSIZE = (100, 100)
from geoapi.celery_app import app from geoapi.exceptions import InvalidCoordinateReferenceSystem, MissingServiceAccount from geoapi.models import User, ObservableDataProject, Task from geoapi.utils.agave import AgaveUtils, get_system_users, get_metadata_using_service_account from geoapi.log import logging from geoapi.services.features import FeaturesService from geoapi.services.imports import ImportsService from geoapi.services.vectors import SHAPEFILE_FILE_ADDITIONAL_FILES import geoapi.services.point_cloud as pointcloud from geoapi.tasks.lidar import convert_to_potree, check_point_cloud, get_point_cloud_info from geoapi.db import db_session from geoapi.services.notifications import NotificationsService from geoapi.services.users import UserService logger = logging.getLogger(__file__) def _parse_rapid_geolocation(loc): coords = loc[0] lat = coords["latitude"] lon = coords["longitude"] return lat, lon def is_member_of_rapp_project_folder(path): """ Check to see if path is contained within RApp project folder :param path: str """ return "/RApp/" in path