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