Example #1
0
def read(fp, prop_map, filterer=None, source_filename=None, layer_name=None):
    """Read shapefile.

    :param fp: file-like object
    :param prop_map: dictionary mapping source properties to output properties
    :param source_filename: Filename to read, only applicable if fp is a zip file
    """
    # search for a shapefile in the zip file, unzip if found
    unzip_dir = tempfile.mkdtemp()
    shp_name = source_filename
    zipped_file = get_compressed_file_wrapper(fp.name)

    if shp_name is None:
        for name in zipped_file.infolist():
            base, ext = os.path.splitext(name.filename)
            if ext == ".shp":
                if shp_name is not None:
                    raise Exception("Found multiple shapefiles in zipfile")
                shp_name = name.filename

        if shp_name is None:
            raise Exception("Found 0 shapefiles in zipfile")

    zipped_file.extractall(unzip_dir)
    zipped_file.close()

    # Open the shapefile
    with fiona.open(os.path.join(unzip_dir, shp_name)) as source:
        collection = fiona_dataset.read_fiona(source, prop_map, filterer)

    shutil.rmtree(unzip_dir)

    return collection
Example #2
0
def read(fp, prop_map, filterer=None, source_filename=None, layer_name=None):
    """Read shapefile.

    :param fp: file-like object
    :param prop_map: dictionary mapping source properties to output properties
    :param source_filename: Filename to read, only applicable if fp is a zip file
    """
    #search for a shapefile in the zip file, unzip if found
    unzip_dir = tempfile.mkdtemp()
    shp_name = source_filename
    zipped_file = get_compressed_file_wrapper(fp.name)

    if shp_name is None:
        for name in zipped_file.infolist():
            base, ext = os.path.splitext(os.path.basename(name.filename))
            if base.startswith("."):
                continue
            if ext == ".shp":
                if shp_name is not None:
                    raise Exception("Found multiple shapefiles in zipfile")
                shp_name = name.filename

        if shp_name is None:
            raise Exception("Found 0 shapefiles in zipfile")

    zipped_file.extractall(unzip_dir)
    zipped_file.close()

    #Open the shapefile
    with fiona.open(os.path.join(unzip_dir, shp_name)) as source:
        collection = fiona_dataset.read_fiona(source, prop_map, filterer)

    shutil.rmtree(unzip_dir)

    return collection
Example #3
0
def read(fp, prop_map, filterer=None, source_filename=None, layer_name=None):
    """Read FileGeoDatabase.

    :param fp: file-like object
    :param prop_map: dictionary mapping source properties to output properties
    :param source_filename: Filename to read, only applicable if fp is a zip file
    """
    #search for a shapefile in the zip file, unzip if found
    unzip_dir = tempfile.mkdtemp(suffix=".gdb")
    gdb_name = source_filename
    zipped_file = get_compressed_file_wrapper(fp.name)

    if gdb_name is None:
        for name in zipped_file.infolist():
            dirname = os.path.dirname(name.filename)
            base, ext = os.path.splitext(dirname)
            if ext == ".gdb":
                if gdb_name is not None and gdb_name != dirname:
                    raise Exception("Found multiple .gdb entries in zipfile")
                gdb_name = dirname

        if gdb_name is None:
            raise Exception("Unabled to find .gdb directory in zipfile, and filenameInZip not set")

    zipped_file.extractall(unzip_dir)
    zipped_file.close()

    #Open the shapefile
    with fiona.open(os.path.join(unzip_dir, gdb_name), layer=layer_name) as source:
        collection = fiona_dataset.read_fiona(source, prop_map, filterer)

    shutil.rmtree(unzip_dir)

    return collection
Example #4
0
def read(fp,
         prop_map,
         filterer=None,
         source_filename=None,
         layer_name=None,
         merge_on=None):
    """Read geojson file.

    :param fp: file-like object
    :param prop_map: dictionary mapping source properties to output properties
    :param source_filename: Filename to read, only applicable if fp is a zip file
    """
    filename = os.path.basename(fp.name)
    root, ext = os.path.splitext(filename)

    unzip_dir = tempfile.mkdtemp()

    if ext == ".geojson" or ext == ".json":
        file_to_process = fp.name
    else:
        # search for a geojson file in the zip file, unzip if found
        shp_name = source_filename
        zipped_file = get_compressed_file_wrapper(fp.name)

        if shp_name is None:
            for name in zipped_file.infolist():
                base, ext = os.path.splitext(name.filename)
                if ext == ".geojson":
                    if shp_name is not None:
                        raise Exception("Found multiple shapefiles in zipfile")
                    shp_name = name.filename

            if shp_name is None:
                raise Exception("Found 0 shapefiles in zipfile")

        zipped_file.extractall(unzip_dir)
        zipped_file.close()
        file_to_process = os.path.join(unzip_dir, shp_name)

    # Open the shapefile
    with fiona.open(file_to_process) as source:
        collection = fiona_dataset.read_fiona(source,
                                              prop_map,
                                              filterer,
                                              merge_on=merge_on)

    shutil.rmtree(unzip_dir)

    return collection
Example #5
0
def read(fp,
         prop_map,
         filterer=None,
         source_filename=None,
         layer_name=None,
         merge_on=None):
    """Read FileGeoDatabase.

    :param fp: file-like object
    :param prop_map: dictionary mapping source properties to output properties
    :param source_filename: Filename to read, only applicable if fp is a zip file
    """
    # search for a shapefile in the zip file, unzip if found
    unzip_dir = tempfile.mkdtemp(suffix=".gdb")
    gdb_name = source_filename
    zipped_file = get_compressed_file_wrapper(fp.name)

    if gdb_name is None:
        for name in zipped_file.infolist():
            dirname = os.path.dirname(name.filename)
            base, ext = os.path.splitext(dirname)
            if ext == ".gdb":
                if gdb_name is not None and gdb_name != dirname:
                    raise Exception("Found multiple .gdb entries in zipfile")
                gdb_name = dirname

        if gdb_name is None:
            raise Exception(
                "Unabled to find .gdb directory in zipfile, and filenameInZip not set"
            )

    zipped_file.extractall(unzip_dir)
    zipped_file.close()

    # Open the shapefile
    with fiona.open(os.path.join(unzip_dir, gdb_name),
                    layer=layer_name) as source:
        collection = fiona_dataset.read_fiona(source,
                                              prop_map,
                                              filterer,
                                              merge_on=merge_on)

    shutil.rmtree(unzip_dir)

    return collection