def test_dev_get_split_shapefile(self):
        raise SkipTest('development only')
        self.set_debug()

        shp_path = '/home/benkoziol/l/data/nfie/linked_catchment_shapefiles/linked_13-RioGrande.shp'
        rd = RequestDataset(uri=shp_path)
        field = rd.get()
        self.log.debug('loading from file')
        field.geom.value
        node_count = map(get_node_count, field.geom.value)
        select = np.array(node_count) > 10000
        to_split = field['GRIDCODE'][select]
        for gc in to_split.value.flat:
            self.log.debug('target gridcode: {}'.format(gc))
            idx = np.where(field['GRIDCODE'].value == gc)[0][0]
            target_geom = field.geom.value[idx]
            split_geom = get_split_polygon_by_node_threshold(target_geom, 10000)
            # write_fiona(split_geom, gc)
            self.assertAlmostEqual(split_geom.area, target_geom.area)
            field.geom.value[idx] = split_geom
            self.assertAlmostEqual(field.geom.value[idx].area, target_geom.area)
        self.log.debug(field.geom.geom_type)
        # field.geom[select].parent.write('/tmp/rio-grande-assembled.shp', driver=DriverVector)

        # write_fiona(field.geom.value, 'rio-grande-assembled')
        self.log.debug('writing shapefile')
        field.write('/tmp/rio-grande-assembled.shp', driver=DriverVector)
    def test_dev_get_split_shapefile(self):
        raise SkipTest('development only')
        self.set_debug()

        shp_path = '/home/benkoziol/l/data/nfie/linked_catchment_shapefiles/linked_13-RioGrande.shp'
        rd = RequestDataset(uri=shp_path)
        field = rd.get()
        self.log.debug('loading from file')
        field.geom.value
        node_count = map(get_node_count, field.geom.value)
        select = np.array(node_count) > 10000
        to_split = field['GRIDCODE'][select]
        for gc in to_split.value.flat:
            self.log.debug('target gridcode: {}'.format(gc))
            idx = np.where(field['GRIDCODE'].value == gc)[0][0]
            target_geom = field.geom.value[idx]
            split_geom = get_split_polygon_by_node_threshold(
                target_geom, 10000)
            # write_fiona(split_geom, gc)
            self.assertAlmostEqual(split_geom.area, target_geom.area)
            field.geom.value[idx] = split_geom
            self.assertAlmostEqual(field.geom.value[idx].area,
                                   target_geom.area)
        self.log.debug(field.geom.geom_type)
        # field.geom[select].parent.write('/tmp/rio-grande-assembled.shp', driver=DriverVector)

        # write_fiona(field.geom.value, 'rio-grande-assembled')
        self.log.debug('writing shapefile')
        field.write('/tmp/rio-grande-assembled.shp', driver=DriverVector)
예제 #3
0
    def iter_records(self,
                     return_uid=False,
                     select_uid=None,
                     slc=None,
                     dest_crs=None):
        # Use records attached to the object or load records from source data.
        to_iter = self.records or self._get_records_(
            select_uid=select_uid, slc=slc, dest_crs=dest_crs)

        if self.records is not None and slc is not None:
            to_iter = to_iter[slc[0]:slc[1]]

        for ctr, record in enumerate(to_iter):
            if self._has_provided_records and 'geom' not in record:
                record['geom'] = shape(record['geometry'])
                # Only use the geometry objects from here. Maintaining the list of coordinates is superfluous.
                record.pop('geometry')
            self._validate_record_(record)

            # Modify the geometry if a node threshold is provided. This breaks the polygon object into pieces with the
            # approximate node count.
            if self.node_threshold is not None and get_node_count(
                    record['geom']) > self.node_threshold:
                record['geom'] = get_split_polygon_by_node_threshold(
                    record['geom'], self.node_threshold)

            if return_uid:
                uid = record['properties'][self.name_uid]
                yld = (uid, record)
            else:
                yld = record
            yield yld
    def test_get_split_polygon_by_node_threshold(self):
        mp = long_lines.mp
        geom = wkt.loads(mp)

        # write_fiona(geom, '01-original_geom')
        actual = get_split_polygon_by_node_threshold(geom, 10)
        # write_fiona(actual, '01-assembled')
        self.assertAlmostEqual(geom.area, actual.area)
    def test_get_split_polygon_by_node_threshold(self):
        mp = long_lines.mp
        geom = wkt.loads(mp)

        # write_fiona(geom, '01-original_geom')
        actual = get_split_polygon_by_node_threshold(geom, 10)
        # write_fiona(actual, '01-assembled')
        self.assertAlmostEqual(geom.area, actual.area)
예제 #6
0
    def test_get_split_polygon_by_node_threshold(self):
        mp = long_lines.mp
        geom = wkt.loads(mp)
        desired_areas = [
            8.625085418953529e-08, 1.079968352698555e-06,
            4.1784871773306116e-05, 2.5076269922661793e-05,
            3.3855701685935655e-09, 2.8657206177145753e-06,
            1.0972327342376188e-06, 8.786092310138479e-05,
            0.00010110750647968422, 9.000945595248119e-05,
            8.294314903503167e-05, 3.771759628159003e-05,
            7.109809049616299e-05, 0.00010110750647961063,
            0.0001011075064794719, 0.0001011075064794719,
            0.00010068346095469527, 4.5613938714394565e-05,
            2.58521435096663e-05, 0.00010055844609512709,
            0.00010110750647961063, 0.0001011075064794719,
            0.0001011075064794719, 0.00010110750647974937,
            0.00010102553077737228, 3.5445725182157024e-05,
            2.3017920373339736e-06, 6.356456832123063e-05,
            0.00010110750647968422, 0.00010110750647954548,
            0.00010110750647954548, 0.00010110750647982296,
            0.00010110750647940675, 0.00010077363977375008,
            1.3861408815707898e-05, 5.540594942042427e-06,
            2.9946101143502452e-05, 8.322365017149943e-05,
            0.0001011075064794719, 0.00010110750647974937,
            0.00010110750647933316, 0.00010110750647961063,
            9.141939119146819e-05, 1.8935129580488383e-05,
            1.2868802415556094e-05, 6.997506385223853e-05,
            0.00010110750647974937, 0.00010110750647933316,
            0.00010110750647961063, 8.961198923834417e-05,
            2.210381570757395e-05, 5.629701317779406e-05,
            0.00010110750647982296, 0.00010110750647940675,
            8.200102962203643e-05, 6.525027997827258e-06,
            2.3998405756057673e-05, 9.951035052363768e-05,
            5.635100120283968e-05, 2.6333871794810716e-05,
            2.1377064578012194e-05
        ]

        # write_fiona(geom, '01-original_geom')
        actual = get_split_polygon_by_node_threshold(geom, 10)
        # write_fiona(actual, '01-assembled')
        self.assertAlmostEqual(geom.area, actual.area)

        actual_areas = [g.area for g in actual]
        for idx in range(len(desired_areas)):
            self.assertAlmostEqual(actual_areas[idx], desired_areas[idx])
    def test_dev_get_split_polygon_by_node_threshold_many_nodes(self):
        raise SkipTest('development only')
        self.set_debug()

        shp_path = '/home/benkoziol/l/data/nfie/linked_catchment_shapefiles/linked_13-RioGrande.shp'

        with fiona.open(shp_path) as source:
            for record in source:
                if record['properties']['GRIDCODE'] == 2674572:
                    geom = shape(record['geometry'])

        # write_fiona(geom, '01-original_geom')
        actual = get_split_polygon_by_node_threshold(geom, 10000)
        # write_fiona(actual, '01-assembled')
        self.assertAlmostEqual(geom.area, actual.area)

        for p in actual:
            print len(p.exterior.coords)

        write_fiona(actual, 'assembled')
    def test_dev_get_split_polygon_by_node_threshold_many_nodes(self):
        raise SkipTest('development only')
        self.set_debug()

        shp_path = '/home/benkoziol/l/data/nfie/linked_catchment_shapefiles/linked_13-RioGrande.shp'

        with fiona.open(shp_path) as source:
            for record in source:
                if record['properties']['GRIDCODE'] == 2674572:
                    geom = shape(record['geometry'])

        # write_fiona(geom, '01-original_geom')
        actual = get_split_polygon_by_node_threshold(geom, 10000)
        # write_fiona(actual, '01-assembled')
        self.assertAlmostEqual(geom.area, actual.area)

        for p in actual:
            print len(p.exterior.coords)

        write_fiona(actual, 'assembled')