Ejemplo n.º 1
0
def findFeature(shapefile, longitude, latitude, buffer=20000, distance=2):
    pt = Point(longitude, latitude)
    circle = pt.buffer(buffer)
    radius = calcSearchRadius(latitude, longitude, distance)

##    if shapefile.geom_type in ["Point", "3D Point"]:
##        try:
##            return Feature.objects.filter(geom_point__intersects=circle, shapefile=shapefile)[:1].get()
##        except Feature.DoesNotExist:
##            return None
    if shapefile.geom_type in ["LineString", "3D LineString", "MultiLineString", "3D MultiLineString"]:
        try:
            return Feature.objects.get(geom_multilinestring__intersects=circle, shapefile=shapefile)[:1].get()
        except Feature.DoesNotExist:
            return None
    elif shapefile.geom_type in ["Polygon", "3D Polygon", "MultiPolygon", "3D MultiPolygon" ]:
        try:
            return Feature.objects.get(geom_multipolygon__contains=pt, shapefile=shapefile)
        except Feature.DoesNotExist:
            return None
    elif shapefile.geom_type in ["Point", "MultiPoint", "3D MultiPoint"]:
        try:
            return Feature.objects.filter(geom_multipoint__intersects=circle, shapefile=shapefile)[:1].get()
        except Feature.DoesNotExist:
             return None
    elif shapefile.geom_type in ["GeometryCollection", "3D GeometryCollection"]:
        try:
            return feature.objects.get(geom_geometrycollection__dwithin=(pt, radius))
        except Feature.DoesNotExist:
            return None
    else:
        print "Unsupported geometry: " + shapefile.geom_type
        return None
Ejemplo n.º 2
0
    def test_has_itree_region_with_intersects(self):
        p1 = Point(0, 0)
        instance = make_instance(point=p1)
        instance.save()

        ITreeRegion.objects.create(geometry=MultiPolygon((p1.buffer(10))))

        self.assertEqual(instance.has_itree_region(), True)
Ejemplo n.º 3
0
def playground(request):
    """Handle GET Requests for Playgrounds"""
    
    distance = request.GET.get('distance', None)
    lat = request.GET.get('lat', None)
    lng = request.GET.get('lng', None)

    if not all([distance, lat, lng]):
        playgrounds = Playground.objects.all()
    else:
        point = Point(float(lng), float(lat), srid=4326)
        point.transform(26918)
        circle = point.buffer(float(distance))
        playgrounds = Playground.objects.filter(location__within=circle)
    serialized = serialize('geojson', playgrounds, geometry_field='location', fields=('name', 'address'))
    return HttpResponse(serialized, content_type="application/json")
Ejemplo n.º 4
0
    def get_queryset(self):
        if not self.request.GET.get('lat'):
            return None

        nearby_degrees = 0.3

        lat = float(self.request.GET.get('lat'))
        lng = float(self.request.GET.get('lng'))
        user_location = Point(lng, lat)

        near_user = user_location.buffer(nearby_degrees)

        points = MapData.objects.filter(points__contained=near_user).distance(user_location, field_name='points').order_by('distance')[:30]
        polys = MapData.objects.filter(polys__contained=near_user).distance(user_location, field_name='polys').order_by('distance')[:30]
        lines = MapData.objects.filter(lines__contained=near_user).distance(user_location, field_name='lines').order_by('distance')[:30]

        queryset = sorted(list(points)+list(polys)+list(lines), key=attrgetter('distance'))[:30]
        return queryset
Ejemplo n.º 5
0
    def read(self, obj):
        tree = parse(obj)
        if self.test(tree):
            decoder = SiteFormatDecoder(tree)
            location = Point(decoder.longitude, decoder.latitude)

            return {
                "identifier": decoder.identifier,
                "location": location,
                "footprint": MultiPolygon(location.buffer(0.01)),
                "elevation": decoder.elevation,
                "coverage_type": "",
                "size": (decoder.size, 1),
                "projection": 4326,
                "begin_time": min(decoder.start_times),
                "end_time": max(decoder.end_times),
                "extent": (0, 0, 1, 1),
                "coverage_type": "dav_prc.models.SiteDataset",
            }
        raise Exception("Could not parse from obj '%r'." % obj)
Ejemplo n.º 6
0
    def assertViewPerformsCorrectly(self, before_add_expected_value,
                                    after_add_expected_value,
                                    x=-8515941.0,
                                    y=4953519.0,
                                    params=None,
                                    make_point_from_x_y=True):

        params = params or {'x': str(x), 'y': str(y)}
        p = Point(x, y) if make_point_from_x_y else Point(0, 0)

        request = RequestFactory().get('', params)

        result = within_itree_regions(request)
        self.assertEqual(result, before_add_expected_value)

        ITreeRegion.objects.create(code='NoEastXXX',
                                   geometry=MultiPolygon([p.buffer(1000)]))

        result = within_itree_regions(request)
        self.assertEqual(result, after_add_expected_value)
Ejemplo n.º 7
0
def cover_city(city_slug, radius):
    """
    An iterator that yields a centroid (lng, lat) for a circle buffer with
    radius given. The total buffers completely cover the city and no buffers
    that do not intersect with the city boundary are included.

    Radius is in kilometers.
    """
    def shapefile_path(city):
        return os.path.normpath(os.path.join(settings.SHAPEFILE_ROOT, city, 'city_4326'))

    ds = DataSource(shapefile_path(city_slug) + '.shp')
    city_geom = reduce_layer_geom(ds[0], 'union')
    city_geom.srid = 4326
    city_geom.transform(900913)

    for (x, y) in cover_region(get_metro(city_slug)['extent'], radius):
        pt = Point(x, y, srid=4326)
        pt.transform(900913)
        buf = pt.buffer(radius)
        if buf.intersects(city_geom.geos):
            yield (x, y)
Ejemplo n.º 8
0
 def get_near(self, json, p_lat, p_lng, p_r):
     
     central_point = Point(p_lng, p_lat)
     
     circle = central_point.buffer(p_r/100000.0)
     #print circle.json
     
     points = []
     
     for o in json:
         lat = o['geo']['lat']
         lng = o['geo']['lng']
         if lat == None: continue
     
         point = Point( lng , lat)
         points.append(point)
     
     mp = MultiPoint(points)
     
     mp_results = mp.intersection(circle) 
     
     result = [mp_results.coords] if mp_results.geom_type == 'Point' else [coord for coord in mp_results.coords]
     return result
Ejemplo n.º 9
0
    def setUp(self):

        self.instance = make_instance(is_public=True)

        self.user = make_commander_user(self.instance)

        self.species = Species(otm_code='CEAT',
                               genus='cedrus',
                               species='atlantica',
                               max_dbh=2000,
                               max_height=100,
                               instance=self.instance)
        self.species.save_with_user(self.user)

        ITreeRegion.objects.all().delete()

        p1 = Point(-8515941.0, 4953519.0)

        self.region_buffer_in_meters = 1000

        ITreeRegion.objects.create(
            code='NoEastXXX',
            geometry=MultiPolygon([p1.buffer(1000)]))

        self.plot = Plot(geom=p1,
                         instance=self.instance)

        self.plot.save_with_user(self.user)

        self.tree = Tree(plot=self.plot,
                         instance=self.instance,
                         readonly=False,
                         species=self.species,
                         diameter=1630)

        self.tree.save_with_user(self.user)
Ejemplo n.º 10
0
def school_sheds_results(request=None, school_id=None, bbox=None, width=816, height=1056, srid=3857, format='png'):
    '''
    Default height and width are 'Letter' ratio
    '''

    format = format.encode('ascii')
    school = School.objects.get(pk=school_id)
    point = school.geometry
    circle = point.buffer(3400.0)

    m = mapnik.Map(int(width), int(height), "+init=epsg:"+str(srid))

    mapnik.load_map(m, os.path.dirname(__file__)+"/basemap/basemap.xml")

    if bbox is None:
        circle.transform(srid)
        bbox = mapnik.Box2d(*circle.extent)
    m.zoom_to_box(bbox)

    #m.background = mapnik.Color('steelblue')

    # styles for sheds
    s = mapnik.Style()
    for name, color in (('0.5', VIOLET), ('1.0', PURPLE), ('1.5', LAVENDER), ('2.0', LIGHTCYAN)):
        r = mapnik.Rule()
        r.filter = mapnik.Expression("[name] = "+name)
        c = mapnik.Color(color)
        c.a = 80
        line_symbolizer = mapnik.LineSymbolizer(mapnik.Color("gray"), 1)
        poly_symbolizer = mapnik.PolygonSymbolizer(c)
        r.symbols.append(line_symbolizer)
        r.symbols.append(poly_symbolizer)
        s.rules.append(r)

    # styles for schools
    school_colors = SCHOOL_COLORS

    for name, color in school_colors:
        r = mapnik.Rule()
        r.filter = mapnik.Expression("[name] = '"+name+"'")
        line_symbolizer = mapnik.LineSymbolizer()
        poly_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color(color))
        r.symbols.append(line_symbolizer)
        r.symbols.append(poly_symbolizer)
        s.rules.append(r)
    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] != 'map_title' and [name] != 'map_subtitle' and [name] != 'legend_title' and [name] != 'school'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'), 'DejaVu Sans Book', 9, mapnik.Color('black'))
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.halo_radius = 1
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    #text_symbolizer.label_placement = mapnik.label_placement.VERTEX_PLACEMENT
    text_symbolizer.allow_overlap = True
    text_symbolizer.displacement = (12, 0)
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'map_title'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'), 'DejaVu Sans Book', 15, mapnik.Color('black'))
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.allow_overlap = True
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'map_subtitle'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'), 'DejaVu Sans Book', 12, mapnik.Color('black'))
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.allow_overlap = True
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'legend_title'")
    text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression('[label]'), 'DejaVu Sans Condensed Bold', 11, mapnik.Color('black'))
    text_symbolizer.horizontal_alignment = mapnik.horizontal_alignment.RIGHT
    text_symbolizer.halo_fill = mapnik.Color('white')
    text_symbolizer.halo_radius = 1
    text_symbolizer.allow_overlap = True
    r.symbols.append(text_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'legend_box'")
    poly_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color("white"))
    line_symbolizer = mapnik.LineSymbolizer(mapnik.Color("black"), 0.5)
    poly_symbolizer.fill_opacity = 0.8
    r.symbols.append(line_symbolizer)
    r.symbols.append(poly_symbolizer)
    s.rules.append(r)

    r = mapnik.Rule()
    r.filter = mapnik.Expression("[name] = 'school'")
    ps = mapnik.PointSymbolizer(mapnik.PathExpression(os.path.dirname(__file__)+'/static/img/School.svg'))
    ps.transform = 'scale(0.06)'
    ps.allow_overlap = True
    #shield.label_placement = mapnik.label_placement.POINT_PLACEMENT
    r.symbols.append(ps)
    s.rules.append(r)

    m.append_style("surveys", s)

    def p2l(pct_x, pct_y):
        loc_x = bbox.minx + (bbox.maxx - bbox.minx) * pct_x / 100.0
        loc_y = bbox.miny + (bbox.maxy - bbox.miny) * pct_y / 100.0
        return (loc_x, loc_y)

    sheds = {
        0.5: school.shed_05,
        1.0: school.shed_10,
        1.5: school.shed_15,
        2.0: school.shed_20
    }

    csv_string = 'wkt,name,label\n'
    for key, g in reversed(sorted(sheds.items(), key=lambda a: a[0])):
        if g is None:
            continue
        g.srid = 26986
        g.transform(srid)
        csv_string += '"%s","%s",""\n' % (g.wkt, str(key))

    surveys = Survey.objects.filter(school=school)
    for survey in surveys:
        survey.location.transform(srid)

        children = list(survey.child_set.all())
        if len(children) > 0:
            for c in children:
                name = str(c.to_school)
                point = survey.location
                point.x += random.randint(-50, 50)
                point.y += random.randint(-50, 50)
                school_circle = point.buffer(50)
                csv_string += '"%s","%s",""\n' % (school_circle.wkt, name)

        else:
            name = "o"
            point = survey.location
            point.x += random.randint(-50, 50)
            point.y += random.randint(-50, 50)
            school_circle = point.buffer(50)
            csv_string += '"%s","%s",""\n' % (school_circle.wkt, name)

    #Add School geometry
    school.geometry.transform(srid)
    csv_string += '"%s","school","%s"\n' % (school.geometry.wkt, school.name)

    def box(minx, miny, maxx, maxy):
        lmin = Point(p2l(minx, miny))
        lmax = Point(p2l(maxx, maxy))
        lr = LinearRing((lmin.x, lmin.y), (lmax.x, lmin.y), (lmax.x, lmax.y), (lmin.x, lmax.y), (lmin.x, lmin.y))
        poly = Polygon(lr)
        return poly

    legend = box(2, 108, 50, 113.5)
    csv_string += '"%s","%s","%s"\n' % (legend.wkt, "legend_box", "")

    xy = p2l(3.5, 112)
    point = Point(*xy)
    csv_string += '"%s","%s","School Commute Survey Results"\n' % (point.wkt, "map_title")

    xy = p2l(3.5, 109.5)
    point = Point(*xy)
    csv_string += '"%s","%s","%s, %s"\n' % (point.wkt, "map_subtitle", school, school.districtid)

    legend_x = 53

    legend = box(legend_x, 97, 97.5, 113.5)
    csv_string += '"%s","%s","%s"\n' % (legend.wkt, "legend_box", "")

    xy = p2l(legend_x + 1.5, 112)
    point = Point(*xy)
    csv_string += '"%s","legend_title","Approx. home locations and travel to school mode"\n' % (point.wkt, )

    walksheds_x = 88
    xy = p2l(walksheds_x, 112)
    point = Point(*xy)
    csv_string += '"%s","legend_title","Walksheds"\n' % (point.wkt, )

    y = 111.5
    for name, label in school_colors:
        y -= 1.8
        xy = p2l(legend_x+2, y)
        point = Point(*xy)
        circle = point.buffer(50)
        csv_string += '"%s","%s","%s"\n' % (circle.wkt, name, MODE_DICT[name])

    y = 110
    for name in ('0.5', '1.0', '1.5', '2.0',):
        y -= 2.4
        ws = box(walksheds_x, y, walksheds_x+2, y+1.5)
        csv_string += '"%s","%s","%s  Mile"\n' % (ws.wkt, name, name)

    layer = mapnik.Layer('surveys', "+init=epsg:"+str(srid))
    ds = mapnik.Datasource(type="csv", inline=csv_string.encode('ascii'))
    layer.datasource = ds
    layer.styles.append('surveys')
    m.layers.append(layer)

    # Render to image
    if format == 'pdf':
        tmp_file = tempfile.NamedTemporaryFile()
        surface = cairo.PDFSurface(tmp_file.name, m.width, m.height)
        mapnik.render(m, surface)
        surface.finish()
        tmp_file.seek(0)
        im = tmp_file.read()
    else:
        im = mapnik.Image(m.width, m.height)
        mapnik.render(m, im)
        im = im.tostring(format)

    response = HttpResponse()
    response['Content-length'] = str(len(im))
    response['Content-Type'] = mimetypes.types_map['.'+format]
    response.write(im)

    return response
Ejemplo n.º 11
0
def get_centered_envelope(point=None, radius=None):
    if not point:
        point = Point(float(fake.longitude()), float(fake.latitude()))
    return point.buffer(
        fake.random_digit() if radius is None else radius
    ).envelope
Ejemplo n.º 12
0
def location(bot, update):
    # Colors: Red, Blue, Purple, Green, Yellow, Brown, Orange, Grey

    listOfColor = [
        '#8B0000', '#0000FF', '#8A2BE2', '#228B22', '#FFD700', '#8B4513',
        '#D2691E', '#808080'
    ]
    print("parkingStreetHandler.location")
    user = User.objects.get(chat_id=update.message.chat_id)
    point = Point(user.lon, user.lat)
    #Distance in KM to search the parkings close by
    radius = 0.5
    radius = radius / 40000 * 360
    circle = point.buffer(radius)
    print('valori cerchio: ' + str(circle))
    shape = multiPolygonHandler.getMultiPolygonByPoint(point)
    #shape = multiPolygonHandler.getAllMultiPolygon()
    #print(shape)
    m = StaticMap(600, 800, 12, 12, tile_size=256)
    #icon_flag = IconMarker((user.lon, user.lat), './bot/static/images/marker.png', 100, 100)
    marker_outline = CircleMarker((user.lon, user.lat), 'white', 22)
    marker = CircleMarker((user.lon, user.lat), 'Red', 18)
    m.add_marker(marker_outline)
    m.add_marker(marker)
    #m = StaticMap(width=600, height=800)
    circleLine = Line(circle[0], color='red', width=3)
    geoCircle = GEOPolygon(circle[0])
    #DISEGNA IL CERCHIO PER CONTROLLARE I PARCHEGGI LIMITROFI
    m.add_line(circleLine)
    listPolygon, listOfColor2, listOfMultiPolygon = getAllPolygonsInCircleArea(
        geoCircle)
    i = 0
    if len(listPolygon) is not 0:
        for p in listPolygon:
            polygonLine = Line(p[0], color=listOfColor[i], width=3)
            m.add_line(polygonLine)
            i = i + 1
        image = m.render(zoom=14)
        fileName = 'ParkingStreet' + str(update.message.chat_id) + '.png'
        image.save(fileName)
        baseDir = settings.BASE_DIR
        picture = open(baseDir + '/' + fileName, 'rb')
        text = buildParkingZoneMessage(listOfMultiPolygon)
        btn_keyboard1 = KeyboardButton(text="Find another parking")
        btn_keyboard2 = KeyboardButton(
            text="Find closest electric charge point")
        btn_keyboard3 = KeyboardButton(text="Show my profile")
        btn_keyboard4 = KeyboardButton(text="That's all, thanks")
        custom_keyboard = [[btn_keyboard1], [btn_keyboard2], [btn_keyboard3],
                           [btn_keyboard4]]
        reply_markup = telegram.ReplyKeyboardMarkup(custom_keyboard,
                                                    resize_keyboard=True,
                                                    one_time_keyboard=True)
        bot.sendPhoto(chat_id=update.message.chat_id, photo=picture)
        bot.sendMessage(chat_id=update.message.chat_id,
                        text=text,
                        parse_mode='HTML')
        bot.sendMessage(chat_id=update.message.chat_id,
                        text='What do you want to do now?',
                        reply_markup=reply_markup)
        userHandler.setUserBotActived(update.message.chat_id, True)
    else:
        btn_keyboard1 = KeyboardButton(text="Find another parking")
        btn_keyboard2 = KeyboardButton(
            text="Find closest electric charge point")
        btn_keyboard3 = KeyboardButton(text="Show my profile")
        btn_keyboard4 = KeyboardButton(text="That's all, thanks")
        custom_keyboard = [[btn_keyboard1], [btn_keyboard2], [btn_keyboard3],
                           [btn_keyboard4]]
        reply_markup = telegram.ReplyKeyboardMarkup(custom_keyboard,
                                                    resize_keyboard=True,
                                                    one_time_keyboard=True)
        bot.sendMessage(
            chat_id=update.message.chat_id,
            text='There is no parking info close to your position.')
        bot.sendMessage(chat_id=update.message.chat_id,
                        text='What do you want to do now?',
                        reply_markup=reply_markup)
        userHandler.setUserBotActived(update.message.chat_id, True)