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')