Esempio n. 1
0
def insertDataImage(request):

    if request.method == 'POST': # If the form has been submitted...
        stationform = StationForm(request.user.get_username(),request.POST, request.FILES) # A form bound to the POST data
        nominatimform = NominatimForm(request.POST) # A form bound to the POST data
        form = ImageForm(request.POST, request.FILES) # A form bound to the POST data

        if stationform.is_valid(): # All validation rules pass

            slug=stationform.cleaned_data['station_slug']
            if slug:
                station=StationMetadata.objects.get(ident__username=request.user.username,slug=slug)
                #stationlat=station.lat
                #stationlon=station.lon
                request.POST['geom']= str(Point(station.lon,station.lat))
                return render(request, 'insertdata/form.html',{'form': form,'stationform':stationform,'nominatimform':nominatimform})
        else:
            stationform = StationForm(request.user.get_username())
            return render(request, 'insertdata/form.html',{'form': form,'stationform':stationform,'nominatimform':nominatimform,"invalid":True})

        if nominatimform.is_valid(): # All validation rules pass

            address=nominatimform.cleaned_data['address']
            if address:
                nom = Nominatim(base_url="http://nominatim.openstreetmap.org",referer= get_current_site(request))
                result=nom.query(address,limit=1,countrycodes="IT")
                if len(result) >= 1:
                    lat= result[0]["lat"]
                    lon= result[0]["lon"]
                    address= result[0]["display_name"]
                    request.POST['geom']= str(Point(float(lon),float(lat)))
                    request.POST['address']= address
                return render(request, 'insertdata/form.html',{'form': form,'stationform':stationform,'nominatimform':nominatimform})
        else:
            nominatimform = NominatimForm()
            return render(request, 'insertdata/form.html',{'form': form,'stationform':stationform,'nominatimform':nominatimform,"invalid":True})

        if form.is_valid(): # All validation rules pass

            if True:
                from rmap import exifutils
                comment=form.cleaned_data['comment']
                geom=form.cleaned_data['geom']
                image=request.FILES['image']
                dt=datetime.utcnow().replace(microsecond=0)
                lon=geom['coordinates'][0]
                lat=geom['coordinates'][1]
                image=image.read()

                body=exifutils.setgeoimage(image,lat,lon,imagedescription=request.user.username,usercomment=comment)

            else:
                import pexif
                img = pexif.JpegFile.fromString(handle_uploaded_file(image).encode("utf8"))
                exif = img.get_exif()
                if exif:
                    primary = exif.get_primary()
                    if not exif is None or not primary is None:

                        primary.ImageDescription = str(request.user.username)
                        #primary.ExtendedEXIF.UserComment = "UNICODE"+chr(0x00)+str(comment)
                        primary.ExtendedEXIF.UserComment = chr(0x55)+chr(0x4E)+chr(0x49)+chr(0x43)+chr(0x4F)+chr(0x44)+chr(0x45)+chr(0x00)+str(comment)
                        img.set_geo(lat,lon)
                        
                        #        try:
                        #            print primary.DateTime
                        #        except:
                        #            print "DateTime not present"

                        primary.DateTime=datetime.utcnow().strftime("%Y:%m:%d %H:%M:%S")
                        #        print primary.DateTime
                        body=img.writeString()


            #grimages=GeorefencedImage.objects.filter(ident__username=ident)
            #grimages=GeorefencedImage.objects.filter(id=1)


            #f = NamedTemporaryFile(delete=False)
            #image = File(f)
            #image.write(body)
            #f.close()
            #os.unlink(f.name)

            if True:
                #inserimento diretto in DB

                geoimage=GeorefencedImage(active=True,geom = geom,comment=comment,ident=request.user,
                                      date=dt, category = CATEGORY_CHOICES[1])

                geoimage.image.save('geoimage.jpg',ContentFile(body))

                geoimage.save()

            else:
                # invio ad AMQP

                #quale utente usare per AMQP; ho l'utente ma non la password
                #bisognerebbe abilitare tutti gli admin a pubblicare immagini e qui usare amqpuser

                #user=request.user.username,
                user=rmap.settings.amqpuser
                password=rmap.settings.amqppassword

                import rmap.rmap_core
                rmap.rmap_core.send2amqp(body=body,
                                         user=user,
                                         password=password,
                                         host="localhost",
                                         exchange="photo",routing_key="photo")

            #return HttpResponseRedirect(reverse('geoimage-ident-id', args=[request.user.username,geoimage.pk]))
            return HttpResponseRedirect(reverse('geoimage-ident', args=[request.user.username]))

        else:

            form = ImageForm() # An unbound form
            return render(request, 'insertdata/form.html',{'form': form,'stationform':stationform,'nominatimform':nominatimform,"invalid":True})

    else:
            stationform = StationForm(request.user.get_username()) # An unbound form
            nominatimform = NominatimForm() # An unbound form
            form = ImageForm() # An unbound form
            return render(request, 'insertdata/form.html',{'form': form,'stationform':stationform,'nominatimform':nominatimform})
Esempio n. 2
0
def insertNewStation(request):

    if request.method == 'POST':  # If the form has been submitted...

        nominatimform = NominatimForm(
            request.POST)  # A form bound to the POST data
        newstationform = NewStationForm(
            request.POST)  # A form bound to the POST data

        if nominatimform.is_valid():  # All validation rules pass

            address = nominatimform.cleaned_data['address']
            if address:
                nom = Nominatim(base_url="http://nominatim.openstreetmap.org",
                                referer=get_current_site(request))
                result = nom.query(address, limit=1, countrycodes="IT")
                if len(result) >= 1:
                    lat = result[0]["lat"]
                    lon = result[0]["lon"]
                    address = result[0]["display_name"]
                    request.POST['geom'] = str(Point(float(lon), float(lat)))
                    request.POST['address'] = address
                return render(
                    request, 'insertdata/newstationform.html', {
                        'nominatimform': nominatimform,
                        'newstationform': newstationform
                    })
        else:
            nominatimform = NominatimForm()
            return render(
                request, 'insertdata/newstationform.html', {
                    'nominatimform': nominatimform,
                    'newstationform': newstationform,
                    "invalid": True
                })

        if newstationform.is_valid():  # All validation rules pass

            geom = newstationform.cleaned_data['geom']
            lon = geom['coordinates'][0]
            lat = geom['coordinates'][1]
            ident = request.user.username

            name = newstationform.cleaned_data['name']

            if name:
                try:
                    print "new station:", name, ident, lon, lat

                    mystation = StationMetadata(slug=slugify(name), name=name)
                    user = User.objects.get(username=ident)
                    mystation.ident = user
                    mystation.lat = lat
                    mystation.lon = lon
                    mystation.active = True

                    mystation.save()

                except:
                    return render(
                        request, 'insertdata/newstationform.html', {
                            'nominatimform': nominatimform,
                            'newstationform': newstationform,
                            "error": True
                        })

            return render(request, 'insertdata/newstationform.html', {
                'nominatimform': nominatimform,
                'newstationform': newstationform
            })

        else:

            print "invalid form"
            form = NewStationForm()  # An unbound form
            return render(
                request, 'insertdata/newstationform.html', {
                    'nominatimform': nominatimform,
                    'newstationform': newstationform,
                    "invalid": True
                })

    else:
        nominatimform = NominatimForm()  # An unbound form
        newstationform = NewStationForm()  # An unbound form
        return render(request, 'insertdata/newstationform.html', {
            'nominatimform': nominatimform,
            'newstationform': newstationform,
        })
Esempio n. 3
0
    return [point1, point2, point3, point4, point5]


#tracer les polygones représentants les cities

for place in liste_places:

    # print(transform_coord(place))

    folium.PolyLine(transform_coord(place),
                    color='darkred',
                    weight=2.5,
                    opacity='0.7').add_to(m)

import re
nom = Nominatim()


def get_city_center(city):

    for c in city:

        if c == "é" or c == "è" or c == "ê" or c == "ë":
            city = city.replace(c, "e")
        if c == "à" or c == "â" or c == "ä":
            city = city.replace(c, "a")
        if c == "û" or c == "ù" or c == "ü":
            city = city.replace(c, "u")
        if c == "î" or c == "ï":
            city = city.replace(c, "i")
        if c == "ô" or c == "ö":
Esempio n. 4
0
def insertDataManualData(request):

    if request.method == 'POST':  # If the form has been submitted...

        #stationlat=None
        #stationlon=None

        stationform = StationForm(
            request.user.get_username(),
            request.POST)  # A form bound to the POST data
        nominatimform = NominatimForm(
            request.POST)  # A form bound to the POST data
        form = ManualForm(request.POST)  # A form bound to the POST data

        if stationform.is_valid():  # All validation rules pass

            slug = stationform.cleaned_data['station_slug']
            if slug:
                station = StationMetadata.objects.get(
                    ident__username=request.user.username, slug=slug)
                #stationlat=station.lat
                #stationlon=station.lon

                request.POST['geom'] = str(Point(station.lon, station.lat))
                request.POST['coordinate_slug'] = slug
                return render(
                    request, 'insertdata/manualdataform.html', {
                        'form': form,
                        'stationform': stationform,
                        'nominatimform': nominatimform
                    })
        else:
            stationform = StationForm(request.user.get_username())
            return render(
                request, 'insertdata/manualdataform.html', {
                    'form': form,
                    'stationform': stationform,
                    'nominatimform': nominatimform,
                    "invalid": True
                })

        if nominatimform.is_valid():  # All validation rules pass

            address = nominatimform.cleaned_data['address']
            if address:
                nom = Nominatim(base_url="http://nominatim.openstreetmap.org",
                                referer=get_current_site(request))
                result = nom.query(address, limit=1, countrycodes="IT")
                if len(result) >= 1:
                    lat = result[0]["lat"]
                    lon = result[0]["lon"]
                    address = result[0]["display_name"]
                    request.POST['geom'] = str(Point(float(lon), float(lat)))
                    request.POST['address'] = address
                return render(
                    request, 'insertdata/manualdataform.html', {
                        'form': form,
                        'stationform': stationform,
                        'nominatimform': nominatimform
                    })
        else:
            nominatimform = NominatimForm()
            return render(
                request, 'insertdata/manualdataform.html', {
                    'form': form,
                    'stationform': stationform,
                    'nominatimform': nominatimform,
                    "invalid": True
                })

        if form.is_valid():  # All validation rules pass

            geom = form.cleaned_data['geom']
            lon = geom['coordinates'][0]
            lat = geom['coordinates'][1]
            dt = datetime.utcnow().replace(microsecond=0)
            ident = request.user.username

            #if (not stationlat is None):
            #    if (stationlat != lat):
            #        stationform = StationForm(request.user.get_username())
            #        return render(request, 'insertdata/manualdataform.html',{'form': form,'stationform':stationform,"invalid":True})
            #if (not stationlon is None):
            #    if (stationlon != lon):
            #        stationform = StationForm(request.user.get_username())
            #        return render(request, 'insertdata/manualdataform.html',{'form': form,'stationform':stationform,"invalid":True})

            datavar = {}
            value = form.cleaned_data['presentweather']
            if (value != ""):
                datavar["B20003"] = {"t": dt, "v": str(value)}

            value = form.cleaned_data['snow_height']
            if (not value is None):
                value = int(value * 10)
                datavar["B13013"] = {"t": dt, "v": str(value)}

            value = form.cleaned_data['visibility']
            if (not value is None):
                value = int(value / 10)
                datavar["B20001"] = {"t": dt, "v": str(value)}

            print "datavar:", datavar
            if (len(datavar) > 0):
                try:

                    user = rmap.settings.mqttuser
                    password = rmap.settings.mqttpassword
                    prefix = rmap.settings.topicreport

                    slug = form.cleaned_data['coordinate_slug']
                    if (slug):
                        network = "fixed"
                    else:
                        network = "mobile"

                    print "<", slug, ">", "prefix:", prefix

                    mqtt = rmapmqtt(ident=ident,
                                    lon=lon,
                                    lat=lat,
                                    network=network,
                                    host="localhost",
                                    port=1883,
                                    prefix=prefix,
                                    maintprefix=prefix,
                                    username=user,
                                    password=password)
                    mqtt.data(timerange="254,0,0",
                              level="1,-,-,-",
                              datavar=datavar)
                    mqtt.disconnect()

                    form = ManualForm()  # An unbound form
                except:
                    return render(
                        request, 'insertdata/manualdataform.html', {
                            'form': form,
                            'stationform': stationform,
                            'nominatimform': nominatimform,
                            "error": True
                        })

            return render(
                request, 'insertdata/manualdataform.html', {
                    'form': form,
                    'stationform': stationform,
                    'nominatimform': nominatimform
                })

        else:

            print "invalid form"
            form = ManualForm()  # An unbound form
            return render(
                request, 'insertdata/manualdataform.html', {
                    'form': form,
                    'stationform': stationform,
                    'nominatimform': nominatimform,
                    "invalid": True
                })

    else:
        stationform = StationForm(
            request.user.get_username())  # An unbound form
        nominatimform = NominatimForm()  # An unbound form
        form = ManualForm()  # An unbound form
        return render(
            request, 'insertdata/manualdataform.html', {
                'form': form,
                'stationform': stationform,
                'nominatimform': nominatimform
            })
Esempio n. 5
0
def insertNewStation(request):

    if request.method == 'POST':  # If the form has been submitted...

        nominatimform = NominatimForm(
            request.POST)  # A form bound to the POST data
        newstationform = NewStationForm(
            request.POST)  # A form bound to the POST data

        if nominatimform.is_valid():  # All validation rules pass

            address = nominatimform.cleaned_data['address']
            if address:
                nom = Nominatim(base_url="https://nominatim.openstreetmap.org",
                                referer=get_current_site(request).domain)
                result = nom.query(address, limit=1, countrycodes="IT")
                if len(result) >= 1:
                    lat = result[0]["lat"]
                    lon = result[0]["lon"]
                    address = result[0]["display_name"]
                    POST = request.POST.copy()
                    POST['geom'] = str(Point(float(lon), float(lat)))
                    POST['address'] = address
                    newstationform = NewStationForm(
                        POST)  # A form bound to the new data
                    nominatimform = NominatimForm(
                        POST)  # A form bound to the new data

                return render(
                    request, 'insertdata/newstationform.html', {
                        'nominatimform': nominatimform,
                        'newstationform': newstationform
                    })
        else:
            nominatimform = NominatimForm()
            return render(
                request, 'insertdata/newstationform.html', {
                    'nominatimform': nominatimform,
                    'newstationform': newstationform,
                    "invalid": True
                })

        if newstationform.is_valid():  # All validation rules pass

            geom = newstationform.cleaned_data['geom']
            lon = geom['coordinates'][0]
            lat = geom['coordinates'][1]
            ident = request.user.username
            name = newstationform.cleaned_data['name']
            slug = slugify(name)
            board_slug = "default"
            template = newstationform.cleaned_data['template']

            if name:
                try:
                    try:
                        print("del station:", ident, slug, ident)
                        mystation = StationMetadata.objects.get(
                            slug__exact=slug, ident__username=ident)
                        mystation.delete()
                    except Exception as e:
                        print(e)

                    print("new station:", name, ident, lon, lat)

                    mystation = StationMetadata(slug=slug, name=name)
                    user = User.objects.get(username=ident)
                    mystation.ident = user
                    mystation.lat = rmap.rmap_core.truncate(lat, 5)
                    mystation.lon = rmap.rmap_core.truncate(lon, 5)
                    mystation.active = True

                    # this in not very good ! we need to specify better in template the type (report/sample)
                    if ("_report_" in template):
                        mystation.mqttrootpath = "report"

                    mystation.clean()
                    mystation.save()

                    rmap.rmap_core.addboard(station_slug=slug,
                                            username=ident,
                                            board_slug=board_slug,
                                            activate=True,
                                            serialactivate=False,
                                            mqttactivate=True,
                                            mqttserver="rmap.cc",
                                            mqttusername=ident,
                                            mqttpassword="******",
                                            mqttsamplerate=30,
                                            bluetoothactivate=False,
                                            bluetoothname="HC-05",
                                            amqpactivate=False,
                                            amqpusername="******",
                                            amqppassword="******",
                                            amqpserver="rmap.cc",
                                            queue="rmap",
                                            exchange="rmap",
                                            tcpipactivate=False,
                                            tcpipname="master",
                                            tcpipntpserver="ntpserver")

                    rmap.rmap_core.addsensors_by_template(
                        station_slug=slug,
                        username=ident,
                        board_slug=board_slug,
                        template=template)

                except Exception as e:
                    print(e)
                    return render(
                        request, 'insertdata/newstationform.html', {
                            'nominatimform': nominatimform,
                            'newstationform': newstationform,
                            "error": True
                        })

            return render(
                request, 'insertdata/newstationform.html', {
                    'nominatimform': nominatimform,
                    'newstationform': newstationform,
                    "station": mystation
                })

        else:

            print("invalid form")
            form = NewStationForm()  # An unbound form
            return render(
                request, 'insertdata/newstationform.html', {
                    'nominatimform': nominatimform,
                    'newstationform': newstationform,
                    "invalid": True
                })

    else:
        nominatimform = NominatimForm()  # An unbound form
        newstationform = NewStationForm()  # An unbound form
        return render(request, 'insertdata/newstationform.html', {
            'nominatimform': nominatimform,
            'newstationform': newstationform,
        })