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") 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})
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 POST=request.POST.copy() POST['geom']= str(Point(station.lon,station.lat)) stationform = StationForm(request.user.get_username(),POST, request.FILES) # A form bound to the new data form = ImageForm(POST, request.FILES) # A form bound to the new data 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"] POST=request.POST.copy() POST['geom']= str(Point(float(lon),float(lat))) POST['address']= address stationform = StationForm(request.user.get_username(),POST, request.FILES) # A form bound to the new data nominatimform = NominatimForm(POST) # A form bound to the new data form = ImageForm(POST, request.FILES) # A form bound to the new data 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 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})
def callback(ch, method, properties, body): print " [x] Received message" if properties.user_id is None: print "Ignore anonymous message" print " [x] Done" ch.basic_ack(delivery_tag = method.delivery_tag) return #At this point we can check if we trust this authenticated user... ident=properties.user_id print "Received from user: %r" % ident try: # store image in DB lat,lon,imgident,comment,date=exifutils.getgeoimage(body) #img = pexif.JpegFile.fromString(body) #exif = img.get_exif() #if exif: # primary = exif.get_primary() #if exif is None or primary is None: # print "image has no EXIF tag, skipping" # imgident=None #else: # imgident=primary.ImageDescription #but we check that message content is with the same ident #if (imgident == ident): # comment="".join(img.exif.primary.ExtendedEXIF.UserComment[8:]) # lat,lon=img.get_geo() # primary = exif.get_primary() # timetag=primary.DateTime # date = datetime.strptime(timetag, '%Y:%m:%d %H:%M:%S') print "getted those metadata from exif:" print lat,lon print comment print date print imgident if (imgident == ident): geoimage=GeorefencedImage() geoimage.geom = {'type': 'Point', 'coordinates': [lon, lat]} geoimage.comment=comment geoimage.date=date try: geoimage.ident=User.objects.get(username=ident) geoimage.image.save('geoimage.jpg',ContentFile(body)) geoimage.save() except User.DoesNotExist: print "user does not exist" else: print "reject:",ident except Exception as e: print e raise print " [x] Done" ch.basic_ack(delivery_tag = method.delivery_tag)
def callback(ch, method, properties, body): print " [x] Received message" if properties.user_id is None: print "Ignore anonymous message" print " [x] Done" ch.basic_ack(delivery_tag=method.delivery_tag) return #At this point we can check if we trust this authenticated user... ident = properties.user_id print "Received from user: %r" % ident try: # store image in DB lat, lon, imgident, comment, date = exifutils.getgeoimage(body) #img = pexif.JpegFile.fromString(body) #exif = img.get_exif() #if exif: # primary = exif.get_primary() #if exif is None or primary is None: # print "image has no EXIF tag, skipping" # imgident=None #else: # imgident=primary.ImageDescription #but we check that message content is with the same ident #if (imgident == ident): # comment="".join(img.exif.primary.ExtendedEXIF.UserComment[8:]) # lat,lon=img.get_geo() # primary = exif.get_primary() # timetag=primary.DateTime # date = datetime.strptime(timetag, '%Y:%m:%d %H:%M:%S') print "getted those metadata from exif:" print lat, lon print comment print date print imgident if (imgident == ident): geoimage = GeorefencedImage() geoimage.geom = {'type': 'Point', 'coordinates': [lon, lat]} geoimage.comment = comment geoimage.date = date try: geoimage.ident = User.objects.get(username=ident) geoimage.image.save('geoimage.jpg', ContentFile(body)) geoimage.save() except User.DoesNotExist: print "user does not exist" else: print "reject:", ident except Exception as e: print e raise print " [x] Done" ch.basic_ack(delivery_tag=method.delivery_tag)