コード例 #1
0
ファイル: views.py プロジェクト: kakamband/mtp-web
def challenge_create(request):
    if request.method == "POST":
        form = ChallengeForm(request.POST)

        if form.is_valid():
            challenge = form.save(commit=False)
            challenge.user = request.user
            geometry = json.loads(challenge.geometry)

            multipolygon = MultiPolygon()
            for geo in geometry:
                coordinates = geo['geometry']['coordinates'][0]
                line_string = LineString()
                first_point = None
                for i in range(len(coordinates)):
                    coord = coordinates[i]
                    if i == 0:
                        first_point = Point(coord[0], coord[1])
                        continue
                    point = Point(coord[0], coord[1])
                    if i == 1:
                        line_string = LineString(first_point.coords,
                                                 point.coords)
                    else:
                        line_string.append(point.coords)
                polygon = Polygon(line_string.coords)
                multipolygon.append(polygon)
            challenge.multipolygon = multipolygon

            for geo in geometry:
                geo['properties']['challenge_id'] = str(challenge.unique_id)
            challenge.geometry = json.dumps(geometry)

            challenge.save()
            camera_make = form.cleaned_data['camera_make']
            if not camera_make is None and len(camera_make) > 0:
                for cm in camera_make:
                    challenge.camera_make.add(cm)

            transport_type = form.cleaned_data['transport_type']
            if not transport_type is None:
                challenge.transport_type.clear()
                if len(transport_type) > 0:
                    for transport_t in transport_type:
                        challenge.transport_type.add(transport_t)

            messages.success(request, 'A challenge was created successfully.')

            return redirect('challenge.my_challenge_list')
    else:
        form = ChallengeForm()
    content = {
        'form': form,
        'pageName': 'Create Challenge',
        'pageTitle': 'Create Challenge'
    }
    return render(request, 'challenge/capture/create.html', content)
コード例 #2
0
ファイル: views.py プロジェクト: superdev0505/mtp-web
def challenge_edit(request, unique_id):
    challenge = get_object_or_404(Challenge, unique_id=unique_id)
    if request.method == "POST":
        form = ChallengeForm(request.POST, instance=challenge)
        if form.is_valid():
            challenge = form.save(commit=False)
            challenge.user = request.user
            challenge.updated_at = datetime.now()
            challenge.save()
            geometry = json.loads(challenge.geometry)

            multipoly = MultiPolygon()
            for geo in geometry:
                coordinates = geo['geometry']['coordinates'][0]
                lineString = LineString()
                firstPoint = None
                for i in range(len(coordinates)):
                    coor = coordinates[i]
                    if i == 0:
                        firstPoint = Point(coor[0], coor[1])
                        continue
                    point = Point(coor[0], coor[1])
                    if i == 1:
                        lineString = LineString(firstPoint.coords,
                                                point.coords)
                    else:
                        lineString.append(point.coords)
                polygon = Polygon(lineString.coords)
                multipoly.append(polygon)
            challenge.multipolygon = multipoly

            for geo in geometry:
                geo['properties']['challenge_id'] = str(challenge.unique_id)
            challenge.geometry = json.dumps(geometry)
            challenge.save()
            transport_type = form.cleaned_data['transport_type']
            if not transport_type is None:
                challenge.transport_type.add(transport_type)
            messages.success(
                request,
                'Challenge "%s" is updated successfully.' % challenge.name)
            return redirect('challenge.index')
    else:
        form = ChallengeForm(instance=challenge)
    content = {
        'form': form,
        'pageName': 'Edit Challenge',
        'challenge': challenge,
        'pageTitle': challenge.name + ' - Edit Challenge'
    }
    return render(request, 'challenge/edit.html', content)
コード例 #3
0
ファイル: views.py プロジェクト: superdev0505/mtp-web
def photographer_edit(request, unique_id):
    photographer = get_object_or_404(Photographer, unique_id=unique_id)
    if request.method == "POST":
        form = PhotographerForm(request.POST, instance=photographer)
        if form.is_valid():
            photographer = form.save(commit=False)
            photographer.user = request.user
            photographer.updated_at = datetime.now()
            photographer.save()
            geometry = json.loads(photographer.geometry)

            multipoly = MultiPolygon()
            for geo in geometry:
                coordinates = geo['geometry']['coordinates'][0]
                lineString = LineString()
                firstPoint = None
                for i in range(len(coordinates)):
                    coor = coordinates[i]
                    if i == 0:
                        firstPoint = Point(coor[0], coor[1])
                        continue
                    point = Point(coor[0], coor[1])
                    if i == 1:
                        lineString = LineString(firstPoint.coords,
                                                point.coords)
                    else:
                        lineString.append(point.coords)
                polygon = Polygon(lineString.coords)
                multipoly.append(polygon)
            photographer.multipolygon = multipoly

            for geo in geometry:
                geo['properties']['photographer_id'] = str(
                    photographer.unique_id)
            photographer.geometry = json.dumps(geometry)
            photographer.save()
            messages.success(
                request, 'Photographer "%s" is updated successfully.' %
                photographer.name)
            return redirect('photographer.index')
    else:
        form = PhotographerForm(instance=photographer)
    content = {
        'form': form,
        'pageName': 'Edit Photographer',
        'photographer': photographer,
        'pageTitle': photographer.name + ' - Edit Photographer'
    }
    return render(request, 'photographer/edit.html', content)
コード例 #4
0
ファイル: views.py プロジェクト: superdev0505/mtp-web
def photographer_create(request):
    if request.method == "POST":
        form = PhotographerForm(request.POST)

        if form.is_valid():
            photographer = form.save(commit=False)
            photographer.user = request.user
            geometry = json.loads(photographer.geometry)
            multipoly = MultiPolygon()
            for geo in geometry:
                coordinates = geo['geometry']['coordinates'][0]
                lineString = LineString()
                firstPoint = None
                for i in range(len(coordinates)):
                    coor = coordinates[i]
                    if i == 0:
                        firstPoint = Point(coor[0], coor[1])
                        continue
                    point = Point(coor[0], coor[1])
                    if i == 1:
                        lineString = LineString(firstPoint.coords,
                                                point.coords)
                    else:
                        lineString.append(point.coords)
                polygon = Polygon(lineString.coords)
                multipoly.append(polygon)
            photographer.multipolygon = multipoly

            for geo in geometry:
                geo['properties']['photographer_id'] = str(
                    photographer.unique_id)
            photographer.geometry = json.dumps(geometry)

            photographer.save()

            messages.success(request,
                             'A photographer was created successfully.')

            return redirect('photographer.my_photographer_list')
    else:
        form = PhotographerForm()
    content = {
        'form': form,
        'pageName': 'Create Photographer',
        'pageTitle': 'Create Photographer'
    }
    return render(request, 'photographer/create.html', content)
コード例 #5
0
def photographer_create(request):
    if request.method == "POST":
        form = PhotographerForm(request.POST)
        if form.is_valid():
            photographer = form.save(commit=False)
            photographer.user = request.user
            geometry = json.loads(photographer.geometry)
            multipolygon = MultiPolygon()
            for geo in geometry:
                coordinates = geo['geometry']['coordinates'][0]
                lineString = LineString()
                firstPoint = None
                for i in range(len(coordinates)):
                    coor = coordinates[i]
                    if i == 0:
                        firstPoint = Point(coor[0], coor[1])
                        continue
                    point = Point(coor[0], coor[1])
                    if i == 1:
                        lineString = LineString(firstPoint.coords,
                                                point.coords)
                    else:
                        lineString.append(point.coords)
                polygon = Polygon(lineString.coords)
                multipolygon.append(polygon)
            photographer.multipolygon = multipolygon

            for geo in geometry:
                geo['properties']['photographer_id'] = str(
                    photographer.unique_id)
            photographer.geometry = json.dumps(geometry)

            photographer.save()

            capture_types = form.cleaned_data['capture_type']
            capture_method = form.cleaned_data['capture_method']
            image_quality = form.cleaned_data['image_quality']
            if capture_types is not None:
                photographer.capture_type.clear()
                for capture_type in capture_types:
                    photographer.capture_type.add(capture_type)
            if capture_method is not None:
                photographer.capture_method.clear()
                for capture_m in capture_method:
                    photographer.capture_method.add(capture_m)
            if image_quality is not None:
                photographer.image_quality.clear()
                for image_q in image_quality:
                    photographer.image_quality.add(image_q)

            messages.success(request,
                             'A photographer was created successfully.')

            return redirect('photographer.index')
    else:
        form = PhotographerForm()
    content = {
        'form': form,
        'pageName': 'Create Photographer',
        'pageTitle': 'Create Photographer'
    }
    return render(request, 'photographer/create.html', content)
コード例 #6
0
def upload_estimated_data(request):
    global progress_update
    try:
        filepath_estimated = request.FILES['estimated_data_file']
        filepath_region = request.FILES['region_metadata_file']
    except Exception as err:
        return

    Estimated_value.objects.all().delete()
    Estimated_data.objects.all().delete()
    Region.objects.all().delete()

    file_regions = TextIOWrapper(filepath_region.file, encoding=request.encoding)
    reader = csv.reader(file_regions)
    # skip/get the headers
    field_titles = next(reader, None)
    #print('field titles:', field_titles)

    progress_update.progress_json = {'percent_complete': None,
                                     'status': 'Loading estimates',
                                     'sub_status': 'Loading regions metadata file'}

    try:
        for row in reader:
            try:
                extra_data = {}
                for idx, item in enumerate(field_titles[2:]):
                    extra_data[item] = row[idx + 2]
                # Initialise polys
                multipoly_geo = MultiPolygon()
                poly = ()

                # Split the row
                poly_split = row[1].split(' ')[1:]

                # make first_point
                point_split = poly_split[0].strip().split(',')
                try:
                    first_point = (float(point_split[0]), float(point_split[1]))
                except:
                    continue

                start = True
                for point_str in poly_split:
                    point_split = point_str.strip().split(',')
                    point = (float(point_split[0]), float(point_split[1]))
                    poly = poly + (point,)
                    if start != True and point == first_point:
                        # Restart as enclosed circle found
                        # Make an enclosed circle
                        poly_geo = Polygon(poly)
                        multipoly_geo.append(poly_geo)
                        poly = ()
                        start = True
                    else:
                        start = False

                region = Region(region_id=str(row[0]),
                                geom=multipoly_geo,
                                extra_data=extra_data
                                )

                #print("Saving a region")
                region.save()
            except Exception as err1:
                print('Region file error. ', err1)
                #print('Region file error. Row: ', row[0])
                continue
    except Exception as err:
        print('Error reading regions file:', err)
        return

    progress_update.progress_json = {'percent_complete': None,
                                     'status': 'Loading estimates',
                                     'sub_status': 'Loading estimates data file'}

    file_estimates = TextIOWrapper(filepath_estimated.file, encoding=request.encoding)
    reader = csv.reader(file_estimates)

    # Count the rows
    row_count = len(list(reader)) - 1

    # Go back to start of file (both lines required!)
    file_estimates.seek(0)
    reader = csv.reader(file_estimates)

    # skip/get the headers
    field_titles = next(reader, None)

    value_idxs = []
    extra_field_idxs = []
    timestamp_idx = 0
    region_idx = ''

    # Find the fields in the file
    for idx, title in enumerate(field_titles):
        title = title.strip().lower()
        if title.startswith('val_'):
            value_idxs.append(idx)
        elif (title == 'time_stamp') or (title == 'timestamp'):
            timestamp_idx = idx
        elif (title == 'region') or (title=='region_id'):
            region_idx = idx
        elif title.startswith('extra_'):
            extra_field_idxs.append(idx)

    extra_data_idxs = {}
    for extra_idx in extra_field_idxs:
        # 'extra_rings_Platanus_max'
        field_name = field_titles[extra_idx].replace('extra_', '', 1)
        # 'rings_Platanus_max'
        extra_data_field = field_name.split('_')[0]  # 'rings'
        measurement_name = slugify(field_name.replace(extra_data_field + '_', '', 1), lowercase=True, separator='_')
        # 'Platanus_max'
        if measurement_name not in extra_data_idxs:
            extra_data_idxs[measurement_name] = {}
        extra_data_idxs[measurement_name][extra_data_field] = extra_idx


    try:
        line_no = 0
        for row in reader:
            line_no += 1
            progress_update.progress_json = {'percent_complete': (line_no / row_count) * 100,
                                             'status': 'Loading estimates',
                                             'sub_status': 'Loading estimates data file'}
            try:
                region = Region.objects.get(region_id=str(row[region_idx]))

                if region:
                    estimated = Estimated_data( timestamp=slugify(row[timestamp_idx]),
                                                region=region
                                                )
                    estimated.save()

                    for idx in value_idxs:
                        name = slugify(field_titles[idx].replace('val_', '', 1), lowercase=True, separator='_')

                        # Get extra data fields
                        extra_data = {}
                        try:
                            extra_idxs = extra_data_idxs[name]
                            for extra_data_name, extra_data_idx in extra_idxs.items():
                                extra_data[extra_data_name] = row[extra_data_idx]
                        except:
                            pass

                        # Check that the name has a matching site measurement
                        #  and add to model if it has.
                        #if name in site_measurements:
                        try:
                            fvalue = float(row[idx])
                        except:
                            fvalue = None

                        actual_value = Estimated_value( measurement_name=name,
                                                        value = fvalue,
                                                        estimated_data = estimated,
                                                        extra_data=extra_data,
                        )
                        actual_value.save()


            except Exception as err:
                print('Estimate file error: ', err, 'Region_ID:' + str(row[1]))
                continue
    except Exception as err:
        print('Error reading estimated file:', err)
        return

    default_storage.save(filepath_region.name, filepath_region.file)
    default_storage.save(filepath_estimated.name, filepath_estimated.file)