Beispiel #1
0
def city_from_extent(extent):
    city_extents = dict([(m['short_name'], m['extent']) for m in METRO_LIST])

    env = OGRGeometry(Envelope(*extent).wkt)

    matches = []
    for slug, city_ext in city_extents.iteritems():
        city_env = OGRGeometry(Envelope(*city_ext).wkt)
        if city_env.intersects(env):
            matches.append((slug, city_env))

    if len(matches) == 1:
        return matches[0][0]
    elif len(matches) > 1:
        # Crudely select the intersecting city with the most overlap
        # TODO: get rid of this
        current_best_slug, current_max_area = None, float('-inf')
        for slug, city_env in matches:
            intersection = city_env.intersection(env)
            area = intersection.area
            if area > current_max_area:
                current_max_area = area
                current_best_slug = slug
        return current_best_slug

    # If we didn't find a match with a city extent, start expanding the buffer
    # around the city extents until we match one
    for i in xrange(6):
        for slug, city_ext in city_extents.iteritems():
            extent = buffer_extent(city_ext, 1, num_tiles=i+1)
            city_env = OGRGeometry(Envelope(*extent).wkt)
            if env.intersects(city_env):
                return slug
Beispiel #2
0
def city_from_extent(extent):
    city_extents = dict([(m['short_name'], m['extent']) for m in METRO_LIST])

    env = OGRGeometry(Envelope(*extent).wkt)

    matches = []
    for slug, city_ext in city_extents.iteritems():
        city_env = OGRGeometry(Envelope(*city_ext).wkt)
        if city_env.intersects(env):
            matches.append((slug, city_env))

    if len(matches) == 1:
        return matches[0][0]
    elif len(matches) > 1:
        # Crudely select the intersecting city with the most overlap
        # TODO: get rid of this
        current_best_slug, current_max_area = None, float('-inf')
        for slug, city_env in matches:
            intersection = city_env.intersection(env)
            area = intersection.area
            if area > current_max_area:
                current_max_area = area
                current_best_slug = slug
        return current_best_slug

    # If we didn't find a match with a city extent, start expanding the buffer
    # around the city extents until we match one
    for i in xrange(6):
        for slug, city_ext in city_extents.iteritems():
            extent = buffer_extent(city_ext, 1, num_tiles=i + 1)
            city_env = OGRGeometry(Envelope(*extent).wkt)
            if env.intersects(city_env):
                return slug
Beispiel #3
0
 def test_intersection(self):
     "Testing intersects() and intersection()."
     for i in range(len(self.geometries.topology_geoms)):
         a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
         b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
         i1 = OGRGeometry(self.geometries.intersect_geoms[i].wkt)
         self.assertTrue(a.intersects(b))
         i2 = a.intersection(b)
         self.assertEqual(i1, i2)
         self.assertEqual(i1, a & b)  # __and__ is intersection operator
         a &= b  # testing __iand__
         self.assertEqual(i1, a)
Beispiel #4
0
 def test11_intersection(self):
     "Testing intersects() and intersection()."
     for i in xrange(len(self.geometries.topology_geoms)):
         a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
         b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
         i1 = OGRGeometry(self.geometries.intersect_geoms[i].wkt)
         self.assertEqual(True, a.intersects(b))
         i2 = a.intersection(b)
         self.assertEqual(i1, i2)
         self.assertEqual(i1, a & b)  # __and__ is intersection operator
         a &= b  # testing __iand__
         self.assertEqual(i1, a)
Beispiel #5
0
 def test11_intersection(self):
     "Testing intersects() and intersection()."
     for i in xrange(len(topology_geoms)):
         g_tup = topology_geoms[i]
         a = OGRGeometry(g_tup[0].wkt)
         b = OGRGeometry(g_tup[1].wkt)
         i1 = OGRGeometry(intersect_geoms[i].wkt)
         self.assertEqual(True, a.intersects(b))
         i2 = a.intersection(b)
         self.assertEqual(i1, i2)
         self.assertEqual(i1, a & b) # __and__ is intersection operator
         a &= b # testing __iand__
         self.assertEqual(i1, a)
Beispiel #6
0
 def test_intersection(self):
     "Testing intersects() and intersection()."
     for i in range(len(self.geometries.topology_geoms)):
         a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
         b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
         i1 = OGRGeometry(self.geometries.intersect_geoms[i].wkt)
         self.assertTrue(a.intersects(b))
         i2 = a.intersection(b)
         self.assertTrue(i1.geos.equals(i2.geos))
         self.assertTrue(i1.geos.equals(
             (a & b).geos))  # __and__ is intersection operator
         a &= b  # testing __iand__
         self.assertTrue(i1.geos.equals(a.geos))