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 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
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
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
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)