Пример #1
0
def load_street_segments(conn):
    cursor = conn.cursor()
    q = "SELECT id, way_id, node_from, node_to, name, highway, alt_name, ST_AsBinary(geom) from " + dbschema + ".street_segments"

    segs = {}
    connected_segs = {}

    cursor.execute(q)

    for id, way_id, node_from, node_to, name, highway, alt_name, geom in cursor.fetchall(
    ):
        geom = loads_wkb(str(geom))
        name = name or ''
        segs[id] = (way_id, node_from, node_to, name, highway, alt_name)
        seg = dict(id=id,
                   way_id=way_id,
                   node_from=node_from,
                   node_to=node_to,
                   name=name,
                   highway=highway,
                   alt_name=alt_name,
                   geom=geom)
        for node in (node_from, node_to):
            if not node in connected_segs:
                connected_segs[node] = []
            connected_segs[node].append(seg)

    return segs, connected_segs
Пример #2
0
def wkbpts_to_wkbline(wkb_pts,wkt=False):
    """
    :param wkt_pts: pts wkb {list}
    :return:
    """
    ls_pts = []
    for wkb in wkb_pts:
        pt = loads_wkb(wkb,hex = True)
        ls_pts.append(pt)
    line = LineString(ls_pts)
    if not wkt:
        return line.wkb_hex
    else:
        return line.wkt
Пример #3
0
    def get_geoms(self, layer, extent=None):
        if layer['name'] in self._layers_geoms:  # pragma: no cover
            # already build
            return self._layers_geoms[layer['name']]

        layer_geoms = {}
        self._layers_geoms[layer['name']] = layer_geoms
        if extent:
            geom = Polygon((
                (extent[0], extent[1]),
                (extent[0], extent[3]),
                (extent[2], extent[3]),
                (extent[2], extent[1]),
            ))
            for z, r in enumerate(layer['grid_ref']['resolutions']):
                layer_geoms[z] = geom

        if self.options is None or (self.options.near is None
                                    and self.options.geom):
            for g in layer['geoms']:
                with stats.timer_context(['geoms_get', layer['name']]):
                    connection = psycopg2.connect(g['connection'])
                    cursor = connection.cursor()
                    sql = 'SELECT ST_AsBinary(geom) FROM (SELECT {}) AS g'.format(
                        g['sql'])
                    logger.info('Execute SQL: {}.'.format(sql))
                    cursor.execute(sql)
                    geoms = [
                        loads_wkb(binary_type(r[0]))
                        for r in cursor.fetchall()
                    ]
                    geom = cascaded_union(geoms)
                    if extent:
                        geom = geom.intersection(
                            Polygon((
                                (extent[0], extent[1]),
                                (extent[0], extent[3]),
                                (extent[2], extent[3]),
                                (extent[2], extent[1]),
                            )))
                    for z, r in enumerate(layer['grid_ref']['resolutions']):
                        if ('min_resolution' not in g or g['min_resolution'] <= r) and \
                                ('max_resolution' not in g or g['max_resolution'] >= r):
                            layer_geoms[z] = geom
                    cursor.close()
                    connection.close()
        return layer_geoms
Пример #4
0
    def get_geoms(self, layer, extent=None):
        if not hasattr(self, 'layers_geoms'):
            self.layers_geoms = {}
        if layer['name'] in self.layers_geoms:  # pragma: no cover
            # already build
            return self.layers_geoms[layer['name']]

        layer_geoms = {}
        self.layers_geoms[layer['name']] = layer_geoms
        if extent:
            geom = Polygon((
                (extent[0], extent[1]),
                (extent[0], extent[3]),
                (extent[2], extent[3]),
                (extent[2], extent[1]),
            ))
            for z, r in enumerate(layer['grid_ref']['resolutions']):
                layer_geoms[z] = geom

        if self.options is None or (
            self.options.near is None and self.options.geom
        ):
            for g in layer['geoms']:
                connection = psycopg2.connect(g['connection'])
                cursor = connection.cursor()
                sql = 'SELECT ST_AsBinary(geom) FROM (SELECT %s) AS g' % g['sql']
                logger.info('Execute SQL: %s.' % sql)
                cursor.execute(sql)
                geoms = [loads_wkb(binary_type(r[0])) for r in cursor.fetchall()]
                geom = cascaded_union(geoms)
                if extent:
                    geom = geom.intersection(Polygon((
                        (extent[0], extent[1]),
                        (extent[0], extent[3]),
                        (extent[2], extent[3]),
                        (extent[2], extent[1]),
                    )))
                for z, r in enumerate(layer['grid_ref']['resolutions']):
                    if ('min_resolution' not in g or g['min_resolution'] <= r) and \
                            ('max_resolution' not in g or g['max_resolution'] >= r):
                        layer_geoms[z] = geom
                cursor.close()
                connection.close()
        return layer_geoms
Пример #5
0
def load_street_segments(conn):
    cursor = conn.cursor()
    q = "SELECT id, way_id, node_from, node_to, name, highway, alt_name, ST_AsBinary(geom) from " + dbschema + ".street_segments"

    segs = {}
    connected_segs = {}

    cursor.execute(q)

    for id, way_id, node_from, node_to, name, highway, alt_name, geom in cursor.fetchall():
        geom = loads_wkb(str(geom))
        name = name or ''
        segs[id] = (way_id, node_from, node_to, name, highway, alt_name)
        seg = dict(id=id,way_id=way_id,node_from=node_from,node_to=node_to,name=name,highway=highway,alt_name=alt_name, geom=geom)
        for node in (node_from, node_to):
            if not node in connected_segs:
                connected_segs[node] = []
            connected_segs[node].append(seg)

    return segs, connected_segs
    def test_wkb_added(self):
        bounding_box = (-115.927734375, 34.52466147177172, -78.31054687499999, 44.84029065139799)
        polygon = box(*bounding_box).envelope
        d_start = date(2017, 3, 12)  # 2017-03-12
        landsat_filters = LandsatQueryFilters()
        landsat_filters.collection_number.set_value("PRE")
        landsat_filters.acquired.set_exclude_value(d_start)
        landsat_filters.aoi.set_geometry(polygon.wkb)
        # landsat_filters.geometry_bag.geometry_binaries.append(polygon.wkb)

        expected = landsat_filters.get_sql()

        query_filter = landsat_filters.get_query_filter()

        landsat_filters_2 = LandsatQueryFilters(query_filter=query_filter)
        expected_2 = landsat_filters_2.get_sql()
        #
        self.maxDiff = None
        self.assertMultiLineEqual(expected, expected_2)

        self.assertMultiLineEqual(polygon.wkt, loads_wkb(landsat_filters_2.aoi.query_params.geometry_bag.geometry_binaries[0]).wkt)