示例#1
0
    def by_location(cls, location, distance_threshold = 0.025):
        airport = DBSession.query(cls, functions.distance(cls.location_wkt, location.to_wkt()).label('distance'))\
            .order_by(functions.distance(cls.location_wkt, location.to_wkt())).first()

        if airport is not None and (distance_threshold is None or
                                    airport.distance < distance_threshold):
            return airport.Airport
        else:
            return None
示例#2
0
 def test_distance(self):
     r1 = session.query(Road).filter(Road.road_name=='Jeff Rd').one()
     r2 = session.query(Road).filter(Road.road_name=='Geordie Rd').one()
     r3 = session.query(Road).filter(Road.road_name=='Peter Rd').one()
     assert_almost_equal(session.scalar(r1.road_geom.distance(r2.road_geom)), 0.336997238682841)
     eq_(session.scalar(r1.road_geom.distance(r3.road_geom)), 0.0)
     ok_(session.query(Spot).filter(Spot.spot_location.distance(WKTSpatialElement('POINT(-88.5945861592357 42.9480095987261)')) < 10).first() is not None)
     assert_almost_equal(session.scalar(functions.distance('POINT(-88.5945861592357 42.9480095987261)', 'POINT(-88.5945861592357 42.9480095987261)')), 0)
示例#3
0
 def test_distance(self):
     r1 = session.query(Road).filter(Road.road_name=='Jeff Rd').one()
     r2 = session.query(Road).filter(Road.road_name=='Geordie Rd').one()
     r3 = session.query(Road).filter(Road.road_name=='Peter Rd').one()
     assert_almost_equal(session.scalar(r1.road_geom.distance(r2.road_geom)), 0.336997238682841)
     eq_(session.scalar(r1.road_geom.distance(r3.road_geom)), 0.0)
     ok_(session.query(Spot).filter(Spot.spot_location.distance(WKTSpatialElement('POINT(-88.5945861592357 42.9480095987261)')) < 10).first() is not None)
     assert_almost_equal(session.scalar(functions.distance('POINT(-88.5945861592357 42.9480095987261)', 'POINT(-88.5945861592357 42.9480095987261)')), 0)
示例#4
0
 def test_distance(self):
     r1 = session.query(Road).filter(Road.road_name=='Jeff Rd').one()
     r2 = session.query(Road).filter(Road.road_name=='Geordie Rd').one()
     r3 = session.query(Road).filter(Road.road_name=='Peter Rd').one()
     assert_almost_equal(float(session.scalar(r1.road_geom.distance(r2.road_geom))), 29371.776054049602)
     eq_(session.scalar(r1.road_geom.distance(r3.road_geom)), 0.0)
     ok_(session.query(Spot).filter(Spot.spot_location.distance(
                                                         WKTSpatialElement('POINT(-88.5945861592357 42.9480095987261)'),
                                                         tolerance, auto_diminfo=False) < 10).first() is not None)
     eq_(session.scalar(functions.distance('POINT(-88.5945861592357 42.9480095987261)', 'POINT(-88.5945861592357 42.9480095987261)', tolerance)),
         0)
示例#5
0
    def _create_query_with_fields(latlon):
        distance = functions.distance(Activity.position,
                                      latlon)
        joins = Occurence.__table__.join(Activity.__table__) \
                  .join(Category.__table__).join(Arrondissement.__table__)
        distance = "(ST_Distance_Sphere(activities.position, GeomFromText('%s', 4326)) * 1.2) as distance_1" % latlon
        q = sql.select([Occurence.id, Occurence.dtstart,
                        Occurence.dtend,
                        Activity.title, Activity.location,
                        Activity.location_info, Activity.position,
                        Activity.price, distance,
                        Category.icon_name,
                        "categories.name as category_name",
                        "arrondissements.name as arrondissement_name",
                        "arrondissements.phone as arrondissement_phone",
                       ],
                       from_obj=joins)
        q = q.where(Occurence.activity_id == Activity.id) \
             .where(Activity.category_id == Category.id) \
             .where(Arrondissement.id == Activity.arrondissement_id)

        return q