Example #1
0
def database_add(request):
    """
    Загрузка координат из *.kml в БД
    """
    #Кооординаты Cornfield

    if request.method == 'POST':
            form = AddField(request.POST, request.FILES)
            if form.is_valid():
                all_geometry = Cornfield.objects.filter(use_user = request.user)

                #fname = 'KML/' + request.FILES['append_field'].name[:-4] + "_" + str(request.user) + "_" + datetime.now().strftime("%d_%m_%Y_%H.%M.%S") + ".kml"
                fname = 'KML/' + str(request.user) + "_" + datetime.now().strftime("%d_%m_%Y_%H.%M.%S") + ".kml"
                f = open(os.path.join(MEDIA_ROOT, fname), 'wb+')
                for chunk in request.FILES['append_field'].chunks():
                       f.write(chunk)
                f.close()
                try:
                    ds = DataSource(os.path.join(MEDIA_ROOT, fname))
                    #ds = DataSource(os.path.join(MEDIA_ROOT, 'ag_fields3.kml'))
                    layer = ds[0]
                    i = 0
                    for feat in layer:

                      geom = feat.geom
                      #print geom
                      if geom:
                        new_line = []
                        for line in geom:
                            new_point = []
                            for point in line:
                                new_point.append(Point(point[0],point[1]))
                            new_point.append(new_point[0])
                            new_line = LinearRing(new_point)
                            if not new_line.ring:
                                new_point.append(new_point[0])
                                new_line = LinearRing(new_point)
                        name = "e%d"%i
                        poly = Polygon(new_line)
                        polygon_equals = True
                        for geom in all_geometry:
                            if poly.equals_exact(geom.mpoly[0], 0.001):
                                polygon_equals = False
                                break
                        if polygon_equals:
                            c = Cornfield(use_user = request.user, name_field=name, area = round(poly.area*1000000,2), mpoly = MultiPolygon(poly),
                                mpoly_coding_paths = encode_pairs(new_line)[0], mpoly_coding_levels = encode_pairs(new_line)[1])
                            c.save()
                            i+=1
                except:
                    pass


                return redirect('show_map')