コード例 #1
0
ファイル: test_spatialite.py プロジェクト: JDeuce/geoalchemy
 def test_transform(self):
     spot = session.query(Spot).get(1)
     eq_(session.scalar(functions.wkt(spot.spot_location.transform(2249))), u"POINT(-3890517.610956 3627658.674651)")
     ok_(
         session.query(Spot)
         .filter(
             sqlite_functions.mbr_contains(
                 functions.buffer(Spot.spot_location.transform(2249), 10),
                 WKTSpatialElement("POINT(-3890517.610956 3627658.674651)", 2249),
             )
         )
         .first()
         is not None
     )
     eq_(
         session.scalar(
             functions.wkt(
                 functions.transform(
                     WKTSpatialElement(
                         "POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))",
                         2249,
                     ),
                     4326,
                 )
             )
         ),
         u"POLYGON((-71.177685 42.39029, -71.177684 42.390383, -71.177584 42.390383, -71.177583 42.390289, -71.177685 42.39029))",
     )
コード例 #2
0
 def test_buffer(self):
     r = session.query(Road).filter(Road.road_name=='Graeme Ave').one()
     assert_almost_equal(float(session.scalar(functions.area(r.road_geom.buffer(10.0), diminfo_))), 1094509.76889366)
     ok_(session.query(Spot).filter(functions.within(
                                             'POINT(-88.5945861592357 42.9480095987261)',
                                             Spot.spot_location.buffer(10))).first() is not None)
     assert_almost_equal(float(session.scalar(functions.area(functions.buffer(
                                     'POINT(-88.5945861592357 42.9480095987261)', diminfo_, 10,
                                     'unit=km arc_tolerance=0.05'), diminfo_))),
                         312144711.50297302)
コード例 #3
0
 def test_buffer(self):
     r = session.query(Road).filter(Road.road_name == "Graeme Ave").one()
     assert_almost_equal(session.scalar(functions.area(r.road_geom.buffer(10.0))), 323.99187776147323)
     ok_(
         session.query(Spot)
         .filter(functions.within("POINT(-88.5945861592357 42.9480095987261)", Spot.spot_location.buffer(10)))
         .first()
         is not None
     )
     assert_almost_equal(
         session.scalar(functions.area(functions.buffer("POINT(-88.5945861592357 42.9480095987261)", 10))),
         314.12087152405275,
     )
コード例 #4
0
ファイル: test_mssql.py プロジェクト: JoseLuisIc/ckan-capsus
 def test_buffer(self):
     r = session.query(Road).filter(Road.road_name == 'Graeme Ave').one()
     assert_almost_equal(
         session.scalar(functions.area(r.road_geom.buffer(10.0))),
         323.99187776147323)
     ok_(
         session.query(Spot).filter(
             functions.within('POINT(-88.5945861592357 42.9480095987261)',
                              Spot.spot_location.buffer(10))).first()
         is not None)
     assert_almost_equal(
         session.scalar(
             functions.area(
                 functions.buffer(
                     'POINT(-88.5945861592357 42.9480095987261)', 10))),
         314.12087152405275)
コード例 #5
0
 def test_buffer(self):
     r = session.query(Road).filter(Road.road_name == 'Graeme Ave').one()
     assert_almost_equal(
         session.scalar(functions.area(r.road_geom.buffer(10.0, 8))),
         321.93380659099699)
     ok_(
         session.query(Spot).filter(
             functions.within('POINT(-88.5945861592357 42.9480095987261)',
                              Spot.spot_location.buffer(10))).first()
         is not None)
     assert_almost_equal(
         session.scalar(
             functions.area(
                 functions.buffer(
                     'POINT(-88.5945861592357 42.9480095987261)', 10, 2))),
         282.84271247461902)
コード例 #6
0
 def test_transform(self):
     spot = session.query(Spot).get(1)
     eq_(session.scalar(functions.wkt(spot.spot_location.transform(2249))),
         'POINT(-3890517.610956 3627658.674651)')
     ok_(
         session.query(Spot).filter(
             sqlite_functions.mbr_contains(
                 functions.buffer(Spot.spot_location.transform(2249), 10),
                 WKTSpatialElement('POINT(-3890517.610956 3627658.674651)',
                                   2249))).first() is not None)
     eq_(
         session.scalar(
             functions.wkt(
                 functions.transform(
                     WKTSpatialElement(
                         'POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))',
                         2249), 4326))),
         'POLYGON((-71.177685 42.39029, -71.177684 42.390383, -71.177584 42.390383, -71.177583 42.390289, -71.177685 42.39029))'
     )
コード例 #7
0
ファイル: models.py プロジェクト: ironweb/quebouge
    def query_from_params(params):
        """Requête principale de recherche pour avoir les activités et
        occurences.

        Params:
        
        ``latlon`` requis pour tous les calls (pour la distance).
        ``bb`` est le bounding box
        ``radius`` dans une unité inconnue à ce jour

        """
        if not params.get('latlon'):
            return ValueError("`latlon` parameter required")
        if 'bb' in params and 'radius' in params:
            raise ValueError('Invalid input : both `radius` and `bb` were submitted.')

        db = DBSession()

        latlon = lat_lon_to_point(params['latlon'])
        q = Activity._create_query_with_fields(latlon)

        # By bounding-box
        if 'bb' in params:
            q = q.where(Activity.position.within(bb_to_polyon(params['bb'])))

        # By radius
        if 'radius' in params:
            q = q.where(Activity.position.within(functions.buffer(latlon,
                                                  float(params['radius']))))
        # Category
        if params.get('cat_id'):
            q = q.where(Activity.category_id == int(params['cat_id']))

        # Start datetime
        if 'start_dt' in params:
            dt_start = extract_date_time(params['start_dt'])
            dt_start_is_now = False
        else:
            dt_start = datetime.datetime.now()
            dt_start_is_now = True

        # End datetime
        if 'end_dt' in params:
            dt_end = extract_date_time(params['end_dt'])
        else:
            dt_end = dt_start + datetime.timedelta(5) # jours

        q = q.where(Occurence.dtend <= dt_end)

        # Get those before they end
        if dt_start_is_now:
            in_half_hour = dt_start + datetime.timedelta(0, 1800)
            res1 = db.execute(q.where(Occurence.dtstart < in_half_hour) \
                               .where(Occurence.dtend > dt_start) \
                               .order_by(Occurence.dtend.asc()))
        else:
            res1 = []

        # Get those before they start
        res2 = db.execute(q.where(Occurence.dtstart >= dt_start) \
                           .order_by(Occurence.dtstart) \
                           .limit(50))
                           

        ret1 = [Activity._row_result_to_dict(row, past=True) for row in res1]
        ret2 = [Activity._row_result_to_dict(row, past=False) for row in res2]
        return (ret1 + ret2) # maximum renvoyés
コード例 #8
0
ファイル: test_postgis.py プロジェクト: JDeuce/geoalchemy
 def test_buffer(self):
     r = session.query(Road).filter(Road.road_name=='Graeme Ave').one()
     assert_almost_equal(session.scalar(functions.area(r.road_geom.buffer(10.0, 8))), 321.93380659099699)
     ok_(session.query(Spot).filter(functions.within('POINT(-88.5945861592357 42.9480095987261)', Spot.spot_location.buffer(10))).first() is not None)
     assert_almost_equal(session.scalar(functions.area(functions.buffer('POINT(-88.5945861592357 42.9480095987261)', 10, 2))), 282.84271247461902)