Esempio n. 1
0
def test_almost_touching_linestrings_with_same_name_and_parent_id_get_merged(
        session, tables):
    # the following geometries do not touch directly but has to be merged
    session.add(
        tables.osm_linestring(id=1,
                              name="Oberseestrasse",
                              parent_id=1337,
                              osm_id=24055427,
                              geometry=WKTElement(
                                  """LINESTRING(981453.976751762
                    5978726.11248254,981467.114366002 5978716.22031828,981491.02892942
                    5978722.30674579,981536.264123906 5978726.22239555)""",
                                  srid=3857)))

    session.add(
        tables.osm_linestring(id=2,
                              name="Oberseestrasse",
                              parent_id=1337,
                              osm_id=308577271,
                              geometry=WKTElement(
                                  """LINESTRING(981558.359202398
                    5978726.38726504,981674.610293174 5978708.37529047)""",
                                  srid=3857)))

    session.commit()

    merge_corresponding_linestrings()

    assert session.query(
        tables.osm_merged_linestring).get(1).member_ids == [1, 2]
    assert session.query(tables.osm_linestring).get(1).merged_into == 24055427
    assert session.query(tables.osm_linestring).get(2).merged_into == 24055427
Esempio n. 2
0
def test_osm_polygon_country_code_get_set_with_most_intersecting_country(
        session, tables):
    session.add(
        tables.country_osm_grid(country_code='CH',
                                geometry=WKTElement(
                                    "POLYGON((0 0,4 0,4 1,0 1,0 0))",
                                    srid=3857)))

    session.add(
        tables.country_osm_grid(country_code='DE',
                                geometry=WKTElement(
                                    "POLYGON((0 0,4 0,4 4,0 4,0 0))",
                                    srid=3857)))

    session.add(
        tables.osm_polygon(id=1,
                           name="Some country with missing country_code",
                           place_rank=4,
                           geometry=WKTElement(
                               "POLYGON((0 0,4 0,4 4,0 4,0 0))", srid=3857)))

    session.commit()

    set_country_codes()

    assert session.query(tables.osm_polygon).get(1).country_code == 'de'
Esempio n. 3
0
def test_PolygonDataColumn_auto_db(mocker):

    raws = [
        WKTElement("POLYGON ((0 0, 1 0, 1 1, 0 0))"),
        WKTElement("POLYGON ((0 0 0, 1 0 0, 1 1 0, 0 0 0))")
    ]

    for raw in raws:

        mock_list = [raw]

        mocker.patch('dtocean_core.data.definitions.get_one_from_column',
                     return_value=mock_list,
                     autospec=True)

        meta = CoreMetaData({
            "identifier": "test",
            "structure": "test",
            "title": "test",
            "tables": ["mock.mock", "position"]
        })

        test = PolygonDataColumn()

        query_factory = InterfaceFactory(AutoQuery)
        QueryCls = query_factory(meta, test)

        query = QueryCls()
        query.meta.result = meta

        query.connect()
        result = test.get_data(query.data.result, meta)

        assert result.exterior.coords[0][0] == 0.
        assert result.exterior.coords[1][0] == 1.
    def test_Raster(self):
        polygon = WKTElement('POLYGON((0 0,1 1,0 1,0 0))', srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 5))
        session.add(o)
        session.flush()
        session.expire(o)

        assert isinstance(o.rast, RasterElement)

        height = session.execute(o.rast.ST_Height()).scalar()
        assert height == 5

        width = session.execute(o.rast.ST_Width()).scalar()
        assert width == 5

        # The top left corner is covered by the polygon
        top_left_point = WKTElement('Point(0 1)', srid=4326)
        top_left = session.execute(o.rast.ST_Value(top_left_point)).scalar()
        assert top_left == 1

        # The bottom right corner has NODATA
        bottom_right_point = WKTElement('Point(1 0)', srid=4326)
        bottom_right = session.execute(
            o.rast.ST_Value(bottom_right_point)).scalar()
        assert bottom_right is None
    def test_insert_geog_poi(self):
        conn = self.conn

        conn.execute(
            Poi.__table__.insert(),
            [{
                'geog': 'SRID=4326;POINT(1 1)'
            }, {
                'geog': WKTElement('POINT(1 1)', srid=4326)
            }, {
                'geog': WKTElement('SRID=4326;POINT(1 1)', extended=True)
            }, {
                'geog': from_shape(Point(1, 1), srid=4326)
            }])

        results = conn.execute(Poi.__table__.select())
        rows = results.fetchall()

        for row in rows:
            assert isinstance(row[2], WKBElement)
            wkt = session.execute(row[2].ST_AsText()).scalar()
            assert wkt == 'POINT(1 1)'
            srid = session.execute(row[2].ST_SRID()).scalar()
            assert srid == 4326
            assert row[2] == from_shape(Point(1, 1), srid=4326)
Esempio n. 6
0
def create_a_dummy_object_instance():
    geo2d = GeometryModel()
    geo2d.type = 'position2d'
    geo2d.geometry_type = 'POINT'
    geo2d.geometry = WKTElement('POINT(0 0)')
    geo3d = GeometryModel()
    geo3d.type = 'primitive3d'
    geo3d.geometry_type = 'POINTZ'
    #geo3d.geometry_type = 'LINESTRINGZ'
    #geo3d.geometry_type = 'POLYGONZ'
    geo3d.geometry = WKTElement('POINT(0 0 0)')
    #geo3d.geometry = WKTElement('LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)')
    #geo3d.geometry = WKTElement('POLYGON((0 0 8, 0 1 8, 1 1 8, 1 0 8, 0 0 8))')

    obj_desc = ObjectDescription()
    obj_desc.type = 'test_object'
    obj_desc.geometry_model2d = geo2d
    obj_desc.geometry_model3d = geo3d

    pose = Pose()
    pose.ref_system = 'origin'
    pose.pose = '1,2,1,0,0,0,1'

    obj_inst = ObjectInstance()
    obj_inst.alias = '6'
    obj_inst.pose = pose
    obj_inst.object_description = obj_desc

    db().add(obj_inst)
    db().commit()
Esempio n. 7
0
def test_osm_polygon_parent_id_get_set_with_nearest_rank(
        session, schema, tables):
    session.add(
        tables.osm_polygon(id=1,
                           name="Some Polygon with missing parent",
                           place_rank=20,
                           type='city',
                           geometry_center=WKTElement("POINT(2 2)",
                                                      srid=3857)))

    session.add(
        tables.osm_polygon(
            id=2,
            name="Some Polygon with higher rank, covering the other polygon",
            place_rank=8,
            type='continent',
            geometry=WKTElement("POLYGON((0 0,4 0,4 4,0 4,0 0))", srid=3857)))

    session.add(
        tables.osm_polygon(
            id=3,
            name="Some Polygon with same rank, covering the other polygon",
            place_rank=16,
            type='country',
            geometry=WKTElement("POLYGON((0 0,4 0,4 4,0 4,0 0))", srid=3857)))

    session.commit()

    set_parent_ids()

    assert session.query(tables.osm_polygon).get(1).parent_id == 3
def test_when_street_with_same_parent_id_but_almost_same_name_exists(
        session, tables):
    session.add(
        tables.osm_housenumber(id=1,
                               parent_id=1337,
                               osm_id=88267051,
                               normalized_street="bochslenrasse",
                               geometry_center=WKTElement(
                                   "POINT(653642.999259018 6623211.41263188)",
                                   srid=3857)))

    session.add(
        tables.osm_linestring(id=2,
                              osm_id=42,
                              parent_id=1337,
                              normalized_name="bochslenstrasse",
                              geometry=WKTElement(
                                  """LINESTRING(653664.707113796
                                       6623110.56066385,653621.291404239
                                       6623312.26459991)""",
                                  srid=3857)))

    session.commit()

    set_street_ids_by_street_name()

    assert session.query(tables.osm_housenumber).get(1).street_id == 42
def test_when_housenumber_street_contains_full_street_name(session, tables):
    session.add(
        tables.osm_housenumber(id=1,
                               parent_id=1337,
                               osm_id=88267051,
                               normalized_street="citepreville19",
                               geometry_center=WKTElement(
                                   "POINT(653642.999259018 6623211.41263188)",
                                   srid=3857)))

    session.add(
        tables.osm_linestring(id=2,
                              osm_id=42,
                              parent_id=1337,
                              normalized_name="citepreville",
                              geometry=WKTElement(
                                  """LINESTRING(653664.707113796
                                       6623110.56066385,653621.291404239
                                       6623312.26459991)""",
                                  srid=3857)))

    session.commit()

    set_street_ids_by_street_name()

    assert session.query(tables.osm_housenumber).get(1).street_id == 42
Esempio n. 10
0
def test_touching_linestrings_with_same_name_and_parent_id_get_merged(
        session, tables):
    session.add(
        tables.osm_linestring(
            id=1,
            osm_id=1111,
            name="Rigiweg",
            parent_id=1337,
            geometry=WKTElement(
                """LINESTRING(944848.776557897 5985402.86960293,
                    944850.474743831 5985427.66032806,944850.064193386
                    5985444.35251452)""",
                srid=3857)))

    session.add(
        tables.osm_linestring(
            id=2,
            osm_id=2222,
            name="Rigiweg",
            parent_id=1337,
            geometry=WKTElement(
                """LINESTRING(944850.064193386 5985444.35251452,
                    944841.125390515 5985474.18953402,944830.553716556 5985520.36149253,
                    944826.821439784 5985550.17127335)""",
                srid=3857)))

    session.commit()

    merge_corresponding_linestrings()

    assert session.query(
        tables.osm_merged_linestring).get(1).member_ids == [1, 2]
    assert session.query(tables.osm_linestring).get(1).merged_into == 1111
    assert session.query(tables.osm_linestring).get(2).merged_into == 1111
Esempio n. 11
0
def test_multiple_touching_linestrings_with_same_name_and_parent_id_get_merged(
        session, tables):
    # following geometries are simplified from the osm linestring with the osm_id 35901448
    session.add(
        tables.osm_linestring(
            id=1,
            osm_id=1111,
            name="Dorfstrasse",
            parent_id=1337,
            geometry=WKTElement(
                """LINESTRING(945262.014242162 5985606.22988835,
                    945125.963423109 5985669.20516832,944921.48130943 5985680.63151807,
                    944732.478813664 5985815.76883825,
                    944577.598658291 5985883.07702847)""",
                srid=3857)))

    session.add(
        tables.osm_linestring(
            id=2,
            osm_id=2222,
            name="Dorfstrasse",
            parent_id=1337,
            geometry=WKTElement("""LINESTRING(944410.8312014 5985761.48265348,
                    944216.360920161 5985861.25509228)""",
                                srid=3857)))

    session.add(
        tables.osm_linestring(
            id=3,
            osm_id=3333,
            name="Dorfstrasse",
            parent_id=1337,
            geometry=WKTElement("""LINESTRING(944410.8312014 5985761.48265348,
                    944577.598658291 5985883.07702847)""",
                                srid=3857)))

    session.add(
        tables.osm_linestring(
            id=4,
            osm_id=4444,
            name="Dorfstrasse",
            parent_id=1337,
            geometry=WKTElement(
                """LINESTRING(945286.283371876 5985592.46613797,
                    945284.781130476 5985609.66739185,945262.014242162 5985606.22988835,
                    945266.045101078 5985588.14864235,
                    945286.283371876 5985592.46613797)""",
                srid=3857)))

    session.commit()

    merge_corresponding_linestrings()

    assert session.query(
        tables.osm_merged_linestring).get(1).member_ids == [1, 2, 3, 4]
    assert session.query(tables.osm_linestring).get(1).merged_into == 1111
    assert session.query(tables.osm_linestring).get(2).merged_into == 1111
    assert session.query(tables.osm_linestring).get(3).merged_into == 1111
    assert session.query(tables.osm_linestring).get(4).merged_into == 1111
Esempio n. 12
0
    def on_get(self, req, resp, args):
        page = args.get('page', 1)
        per_page_limit = args.get('limit', PER_PAGE_LIMIT)

        buses = self.session.query(Bus).filter()
        if args.get('bbox'):
            bounding_box = BoundingBox(args.get('bbox'))
            polygon_text = bounding_box.to_polygon_text()
            bbox = WKTElement(polygon_text, srid=4326)
            buses = buses.filter(Bus.geom.contained(bbox))
        elif args.get('center_lat') and args.get('center_lon'):
            if args.get('radius'):
                radius = float(args.get('radius')) / 1000.0
                bounding_box = get_bounding_box(
                    latitude_in_degrees=args.get('center_lat'),
                    longitude_in_degrees=args.get('center_lon'),
                    half_side_in_km=radius)
                polygon_text = bounding_box.to_polygon_text()
                bbox = WKTElement(polygon_text, srid=4326)
                buses = buses.filter(Bus.geom.contained(bbox))
            else:
                pt = WKTElement('POINT({0} {1})'.format(
                    args['center_lon'], args['center_lat']),
                                srid=4326)
                buses = buses.order_by(Bus.geom.distance_box(pt))

        if args.get(
                'direction_id'
        ) != None:  # explicit None cast (because direction_id=0 exists)
            buses = buses.filter(Bus.direction_id == args['direction_id'])

        if args.get('route_id'):
            buses = buses.filter(
                Bus.original_route_id == args['route_id'].upper())

        # detect temporary condition of duplicated records
        if buses.distinct(Bus.fetched_at).count() > 1:
            last_fetch = self.session.query(func.max(
                Bus.fetched_at)).filter().scalar()
            buses = buses.filter(Bus.fetched_at == last_fetch)

        bus_schema = BusSchema_v1()
        paginator = pager(buses, page, per_page_limit)

        #  serializer  results
        bus_schema = BusSchema_v1()
        results = bus_schema.dump(paginator.items, many=True).data
        #  build body
        body = dict(
            has_next=paginator.has_next,
            total_results=paginator.total,
            total_pages=paginator.pages,
            results=results,
            page_size=len(results),
            page_number=paginator.page,
        )
        resp.body = json.dumps(body, ensure_ascii=False)
Esempio n. 13
0
 def test_function_call(self):
     e = WKTElement('SRID=3857;POINT(1 2 3)', extended=True)
     f = e.ST_Buffer(2)
     eq_sql(f, 'ST_Buffer('
            'ST_GeomFromEWKT(:ST_GeomFromEWKT_1), '
            ':ST_Buffer_1)')
     assert f.compile().params == {
         u'ST_Buffer_1': 2,
         u'ST_GeomFromEWKT_1': 'SRID=3857;POINT(1 2 3)'
     }
Esempio n. 14
0
 def test_function_call(self):
     e = WKTElement(self._ewkt, extended=True)
     f = e.ST_Buffer(2)
     eq_sql(f, 'ST_Buffer('
            'ST_GeomFromEWKT(:ST_GeomFromEWKT_1), '
            ':ST_Buffer_1)')
     assert f.compile().params == {
         u'ST_Buffer_1': 2,
         u'ST_GeomFromEWKT_1': self._ewkt
     }
Esempio n. 15
0
def area_interseccion(ageb, poligono):
    # Geometría de la intersección del polígono de entrada con el ageb
    interseccion = session.scalar(
        ageb.geom.ST_Intersection(WKTElement(str(shape(poligono)), srid=4326)))
    # Convertimos la geometría de la intersección en formato WKTElement
    interseccion_wkte = WKTElement(str(to_shape(interseccion)), srid=4326)
    # Obtenemos el área de la geometría de la interseccion
    area_interseccion = session.scalar(
        select([func.ST_Area(func.ST_Transform(interseccion_wkte, 4486))]))

    return area_interseccion
 def test_neq_other_types(self):
     a = WKBElement(self._ewkb, extended=True)
     b = WKBElement(self._wkb, srid=self._srid)
     c = WKTElement(self._wkt, srid=self._srid)
     d = WKTElement(self._ewkt, extended=True)
     e = WKBElement(self._hex, extended=True)
     all_elements = [a, b, c, d, None, 1, "test"]
     for i, j in permutations(all_elements, 2):
         assert i != j
     for i in all_elements[1:]:
         assert i != e and e != i
Esempio n. 17
0
 def test_function_call(self):
     e = WKTElement('POINT(1 2)')
     f = e.ST_Buffer(2)
     eq_sql(f, 'ST_Buffer('
            'ST_GeomFromText(:ST_GeomFromText_1, :ST_GeomFromText_2), '
            ':ST_Buffer_1)')
     assert f.compile().params == {
         u'ST_Buffer_1': 2,
         u'ST_GeomFromText_1': 'POINT(1 2)',
         u'ST_GeomFromText_2': -1
     }
Esempio n. 18
0
 def test_ST_Equal_WKTElement_WKTElement(self):
     expr = func.ST_Equals(WKTElement('POINT(1 2)'),
                           WKTElement('POINT(1 2)'))
     eq_sql(expr, 'ST_Equals('
            'ST_GeomFromText(:ST_GeomFromText_1, :ST_GeomFromText_2), '
            'ST_GeomFromText(:ST_GeomFromText_3, :ST_GeomFromText_4))')
     assert expr.compile().params == {
         u'ST_GeomFromText_1': 'POINT(1 2)',
         u'ST_GeomFromText_2': -1,
         u'ST_GeomFromText_3': 'POINT(1 2)',
         u'ST_GeomFromText_4': -1,
     }
Esempio n. 19
0
 def test_ST_Equal_WKTElement_WKTElement(self):
     expr = func.ST_Equals(WKTElement('SRID=3857;POINT(1 2 3)',
                                      extended=True),
                           WKTElement('SRID=3857;POINT(1 2 3)',
                                      extended=True))
     eq_sql(expr, 'ST_Equals('
            'ST_GeomFromEWKT(:ST_GeomFromEWKT_1), '
            'ST_GeomFromEWKT(:ST_GeomFromEWKT_2))')
     assert expr.compile().params == {
         u'ST_GeomFromEWKT_1': 'SRID=3857;POINT(1 2 3)',
         u'ST_GeomFromEWKT_2': 'SRID=3857;POINT(1 2 3)',
     }
Esempio n. 20
0
    def by_location(cls, location, distance_threshold=0.025):
        location = WKTElement(location.to_wkt(), srid=4326)
        distance = func.ST_Distance(cls.location_wkt, location)

        airport = DBSession.query(cls, distance.label('distance')) \
            .order_by(distance).first()

        if airport is not None and (distance_threshold is None or
                                    airport.distance < distance_threshold):
            return airport.Airport
        else:
            return None
def test_osm_polygon_with_empty_geometries_get_deleted(session, schema,
                                                       tables):
    session.add(
        tables.osm_polygon(
            geometry=WKTElement('POLYGON((1 2, 3 4, 5 6, 1 2))', srid=3857)))
    session.add(
        tables.osm_polygon(geometry=WKTElement('POLYGON EMPTY', srid=3857)))
    session.commit()

    delete_unusable_entries()

    assert session.query(tables.osm_polygon).count(), 1
 def test_eq(self):
     a = WKBElement(self._ewkb, extended=True)
     b = WKBElement(self._wkb, srid=self._srid)
     c = WKTElement(self._wkt, srid=self._srid)
     d = WKTElement(self._ewkt, extended=True)
     e = WKBElement(self._hex, extended=True)
     assert a == a
     assert b == b
     assert c == c
     assert d == d
     assert e == e
     assert a == e and e == a
Esempio n. 23
0
 def test_function_call(self):
     from geoalchemy2.elements import WKTElement
     e = WKTElement('POINT(1 2)')
     f = e.ST_Buffer(2)
     eq_sql(
         f, 'ST_Buffer('
         'ST_GeomFromText(:ST_GeomFromText_1, :ST_GeomFromText_2), '
         ':param_1)')
     eq_(
         f.compile().params, {
             u'param_1': 2,
             u'ST_GeomFromText_1': 'POINT(1 2)',
             u'ST_GeomFromText_2': -1
         })
Esempio n. 24
0
    def test_Raster(self):
        polygon = WKTElement('POLYGON((0 0,1 1,0 1,0 0))', srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 5))
        session.add(o)
        session.flush()
        session.expire(o)

        assert isinstance(o.rast, RasterElement)

        rast_data = (
            '01000001009A9999999999C93F9A9999999999C9BF0000000000000000000000000000F03'
            'F00000000000000000000000000000000E610000005000500440001010101010101010100'
            '010101000001010000000100000000'
        )

        assert o.rast.data == rast_data

        assert session.execute(
            select([Ocean.rast.ST_Height(), Ocean.rast.ST_Width()])
        ).fetchall() == [(5, 5)]

        # Set rast to None
        o.rast = None

        # Insert in DB
        session.flush()
        session.expire(o)

        # Check what was updated in DB
        assert o.rast is None
        cols = [Ocean.id, Ocean.rast]
        if SQLA_LT_2:
            assert session.execute(select(cols)).fetchall() == [(1, None)]
        else:
            assert session.execute(select(*cols)).fetchall() == [(1, None)]

        # Reset rast to initial value
        o.rast = RasterElement(rast_data)

        # Insert in DB
        session.flush()
        session.expire(o)

        # Check what was updated in DB
        assert o.rast.data == rast_data

        assert session.execute(
            select([Ocean.rast.ST_Height(), Ocean.rast.ST_Width()])
        ).fetchall() == [(5, 5)]
    def get(self):

        parser = reqparse.RequestParser()
        parser.add_argument('lng', type=float, required=True,
                            help='longitude is required')
        parser.add_argument('lat', type=float, required=True,
                            help='latitude is required')
        parser.add_argument('query', required=True,
                            help='query is required')
        args = parser.parse_args()

        point = WKTElement('POINT({0} {1})'.format(args['lng'], args['lat']),
                           srid=4326)

        looking_for = '%{0}%'.format(args['query'])
        stations = db.session.query(Station).filter(
            or_(Station.name.ilike(looking_for),
                Station.address.ilike(looking_for))
        ).order_by(func.ST_Distance(Station.position, point)).all()

        payload = {'q': args['query'], 'lat': args['lat'], 'lon': args['lng']}
        r = requests.get('http://photon.komoot.de/api/', params=payload)

        poiList = []

        for st in stations:
            poiList.append(Poi(st.name, st.address, st.position))

        responsejson = r.json()
        for feature in responsejson['features']:
            print feature
            address = ''
            if 'street' in feature['properties']:
                address = feature['properties']['street']
            if 'city' in feature['properties']:
                address = address + ' - %s' % feature['properties']['city']
            if 'state' in feature['properties']:
                address = address + ' - %s' % feature['properties']['state']
            if 'country' in feature['properties']:
                address = address + ' - %s' % feature['properties']['country']

            lon = feature['geometry']['coordinates'][0]
            lat = feature['geometry']['coordinates'][1]
            pos = WKTElement('POINT({0} {1})'.format(lon, lat), srid=4326)
            poiList.append(Poi(feature['properties']['name'], address, pos))


        return poiList
    def test_insert(self):
        conn = self.conn

        # Issue inserts using DBAPI's executemany() method. This tests the
        # Geometry type's bind_processor and bind_expression functions.
        conn.execute(
            Lake.__table__.insert(),
            [{
                'geom': 'SRID=4326;LINESTRING(0 0,1 1)'
            }, {
                'geom': WKTElement('LINESTRING(0 0,2 2)', srid=4326)
            }, {
                'geom': WKTElement('SRID=4326;LINESTRING(0 0,2 2)',
                                   extended=True)
            }, {
                'geom': from_shape(LineString([[0, 0], [3, 3]]), srid=4326)
            }])

        results = conn.execute(Lake.__table__.select())
        rows = results.fetchall()

        row = rows[0]
        assert isinstance(row[1], WKBElement)
        wkt = session.execute(row[1].ST_AsText()).scalar()
        assert wkt == 'LINESTRING(0 0,1 1)'
        srid = session.execute(row[1].ST_SRID()).scalar()
        assert srid == 4326

        row = rows[1]
        assert isinstance(row[1], WKBElement)
        wkt = session.execute(row[1].ST_AsText()).scalar()
        assert wkt == 'LINESTRING(0 0,2 2)'
        srid = session.execute(row[1].ST_SRID()).scalar()
        assert srid == 4326

        row = rows[2]
        assert isinstance(row[1], WKBElement)
        wkt = session.execute(row[1].ST_AsText()).scalar()
        assert wkt == 'LINESTRING(0 0,2 2)'
        srid = session.execute(row[1].ST_SRID()).scalar()
        assert srid == 4326

        row = rows[3]
        assert isinstance(row[1], WKBElement)
        wkt = session.execute(row[1].ST_AsText()).scalar()
        assert wkt == 'LINESTRING(0 0,3 3)'
        srid = session.execute(row[1].ST_SRID()).scalar()
        assert srid == 4326
Esempio n. 27
0
 def locations(self, locations):
     points = [
         "{} {}".format(location.longitude, location.latitude)
         for location in locations
     ]
     wkt = "LINESTRING({})".format(",".join(points))
     self._locations = WKTElement(wkt, srid=4326)
Esempio n. 28
0
 def get_nearest(cls, lat, lon):
     """
     Find the nearest point to the input coordinates.
     Convert the input coordinates to a WKT point and query for nearest point.
     """
     pt = WKTElement('POINT({0} {1})'.format(lon, lat), srid=4326)
     return cls.query.order_by(cls.point.distance_box(pt)).first()
Esempio n. 29
0
    def on_get(self, req, resp, args):
        page = args.get('page', 1)
        per_page_limit = args.get('limit', PER_PAGE_LIMIT)
        bip_spots = self.session.query(BipSpot).filter()

        if args.get('center_lat') and args.get('center_lon'):
            BipSpot.add_geometry_column()  # @@TODO: fix this
            pt = WKTElement('POINT({0} {1})'.format(args['center_lon'],
                                                    args['center_lat']),
                            srid=4326)
            bip_spots = bip_spots.order_by(BipSpot.geom.distance_box(pt))

        paginator = pager(bip_spots, page, per_page_limit)

        #  serializer  results
        bip_spot_schema = BipSpotSchema_v1()
        results = bip_spot_schema.dump(paginator.items, many=True).data
        #  build body
        body = dict(
            has_next=paginator.has_next,
            total_results=paginator.total,
            total_pages=paginator.pages,
            results=results,
            page_size=len(results),
            page_number=paginator.page,
        )
        resp.body = json.dumps(body, ensure_ascii=False)
Esempio n. 30
0
    def test_insert(self):
        conn = self.conn

        # Issue two inserts using DBAPI's executemany() method. This tests
        # the Geometry type's bind_processor and bind_expression functions.
        conn.execute(Lake.__table__.insert(), [
            {'geom': 'SRID=4326;LINESTRING(0 0,1 1)'},
            {'geom': WKTElement('LINESTRING(0 0,2 2)', srid=4326, use_st_prefix=False)}

            # Having WKBElement objects as bind values is not supported, so
            # the following does not work:
            # {'geom': from_shape(LineString([[0, 0], [3, 3]], srid=4326)}
        ])

        results = conn.execute(Lake.__table__.select())
        rows = results.fetchall()

        row = rows[0]
        assert isinstance(row[1], WKBElement)
        wkt = session.execute(row[1].ST_AsText()).scalar()
        assert wkt == 'LINESTRING(0 0, 1 1)'
        srid = session.execute(row[1].ST_SRID()).scalar()
        assert srid == 4326

        row = rows[1]
        assert isinstance(row[1], WKBElement)
        wkt = session.execute(row[1].ST_AsText()).scalar()
        assert wkt == 'LINESTRING(0 0, 2 2)'
        srid = session.execute(row[1].ST_SRID()).scalar()
        assert srid == 4326
Esempio n. 31
0
def test_get_all_communities(client):
    community_id = 1
    name = "Test community"
    boundaries = WKTElement(
        "MULTIPOLYGON(((43.643911 -79.376321, 43.644268 -79.372738, 43.642071 -79.372620, 43.641993 -79.375881, 43.643911 -79.376321)))",
        4326)
    expected_boundaries = {
        'coordinates': [[[[43.643911, -79.376321], [43.644268, -79.372738],
                          [43.642071, -79.37262], [43.641993, -79.375881],
                          [43.643911, -79.376321]]]],
        'type':
        'MultiPolygon'
    }
    community = Community.add_comunity(
        Community.from_dict({
            "id": community_id,
            "name": name,
            "boundaries": boundaries
        }))

    assert community is not None
    assert Community.get_all_communities is not None

    # user details with correct auth
    rv = client.get("/community", headers=get_headers())
    body = json.loads(rv.get_data(as_text=True))
    assert rv.status_code == 200
    assert body[0]["id"] == community_id
    assert body[0]["name"] == name
    print(body[0]["boundaries"])
    assert body[0]["boundaries"] == expected_boundaries