<?php
	set_time_limit(0);
	echo "Начинаю загрузку";
	if(isset($_POST['upload'])){
		//Список разрешенных файлов
		$whitelist = array(".xml");         
		$data = array();
		$error = true;
		
		//Проверяем разрешение файла
		foreach  ($whitelist as  $item) {
			if(preg_match("/$item\$/i",$_FILES['userfile']['name'])) $error = false;
		}
		//если нет ошибок, грузим файл
		if(!$error){
				  
			$folder =  '../KV/';//директория в которую будет загружен файл
			
			$uploadedFile =  "../KV/".$_FILES['userfile']['name'];
					
			if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
			
				if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadedFile)){
			
					$data = $_FILES['userfile'];
				}
				else {	
					echo "Во время загрузки файла произошла ошибка";
				}
			}
			else {	
				echo "Файл не загружен ".$_FILES['userfile']['tmp_name'];
			}
		}
		else{
			echo 'Вы загружаете запрещенный тип файла';
		}
		if(!$error){
			echo 'Файл <b>'.$data['name'].'</b> успешно загружен!<br>';
			$xml = new DOMDocument();
			$xml->load('../KV/'.$data['name']);
			$xml->encoding = 'utf-8';
			if($FileType = $xml->getElementsByTagName("Region_Cadastr")->item(0)){
				echo "Тип файла: <b>Кадастровый план территории</b><br><br>";
				$CadastralBlocks = $xml->getElementsByTagName("Cadastral_Blocks")->item(0);
				
				$f = fopen("../dCategories.csv", "r");
				while(!feof($f)){
					$csv = fgetcsv($f, 1000, ';');
					$Category[$csv[0]] = $csv[1];
				}
				fclose($f);
				
				$f = fopen("../Utilizations.csv", "r");
				while(!feof($f)){
					$csv = fgetcsv($f, 1000, ';');
					$Utilization[$csv[0]] = $csv[1];
				}
				fclose($f);
				
				$PState['01'] = 'Ранее учтенный';
				$PState['03'] = 'Условный';
				$PState['04'] = 'Внесенный';
				$PState['05'] = 'Временный';
				$PState['06'] = 'Учтенный';
				$PState['07'] = 'Снят с учета';
				$PState['08'] = 'Аннулированный';
				
				$StateLayer['01'] = 'Ranee Uchten';
				$StateLayer['03'] = 'Uslovn';
				$StateLayer['04'] = 'Vnesen';
				$StateLayer['05'] = 'Vremen';
				$StateLayer['06'] = 'Uchten';
				$StateLayer['07'] = 'Snyat';
				$StateLayer['08'] = 'Annuliroan';
				
				$ParcelType["01"] = "Землепользование";
				$ParcelType["02"] = "Единое землепользование";
				$ParcelType["03"] = "Обособленный участок";
				$ParcelType["04"] = "Условный участок";
				$ParcelType["05"] = "Многоконтурный участок";
				$ParcelType["06"] = "Значение отсутствует";
				
				$out = "  0\nSECTION\n  2\nTABLES\n  0\nTABLE\n  2\nLAYER\n 70\n21\n  0\nLAYER\n  2\nLayer_KN\n 70\n64\n 62\n4\n  6\nByLayer\n  0\nLAYER\n  2\nLayer_KV\n 70\n64\n 62\n5\n  6\nByLayer\n  0\nENDTAB\n  0\nENDSEC\n";
				$out .= "0\nSECTION\n 2\nENTITIES\n 0\n";
				$blocks = "SECTION\n 2\nBLOCKS\n 0\n";
				foreach($CadastralBlocks->childNodes as $CadastralBlock){
					if($CadastralBlock->nodeName == "Cadastral_Block"){
						$TotalPoints = 0;
						$X = 0;
						$Y = 0;
						$Block = $CadastralBlock->getAttribute('CadastralNumber');
						echo "Номер кадастрового квартала: <b>".$Block."</b><br><br>Участки:<br><br>";
						echo "<table><tr><th width = 150px>Кадастровый номер</th><th width = 200px>Статус участка</th><th>Вид участка</th></tr>";
						foreach($CadastralBlock->childNodes as $Parcels){
							if($Parcels->nodeName == "Parcels"){
								foreach($Parcels->childNodes as $Parcel){
									if($Parcel->nodeName == "Parcel"){
										echo "<tr>";
										echo "<td>".$Parcel->getAttribute('CadastralNumber')."</td>";
										echo "<td>".$PState[$Parcel->getAttribute('State')]."</td>";
										echo "<td>".$ParcelType[$Parcel->getAttribute('Name')]."</td>";
										echo "</tr>";
										
										$FlagRight = 0;
										$FlagEncumbrance = 0;
										
										$FlagDecArea = 0;
										$FlagSpecArea = 0;
										
										$DecArea = 0;
										$SpecArea = 0;
										
										$date = $Parcel->getAttribute('DateCreated');
										$date = explode("-", $date);
										
										foreach($Parcel->childNodes as $ParcelData){
											if($ParcelData->nodeName == "Areas"){
												foreach($ParcelData->childNodes as $Areas){
													if($Areas->nodeName == "Area"){
														foreach($Areas->childNodes as $Area){
															if($Area->nodeName == "AreaCode"){
																if($Area->nodeValue == "008"){
																	$FlagDecArea = 1;
																	$FlagSpecArea = 0;
																}
																if($Area->nodeValue == "009"){
																	$FlagDecArea = 0;
																	$FlagSpecArea = 1;
																}
															}
															if($Area->nodeName == "Area"){
																if($FlagDecArea){
																	$DecArea = $Area->nodeValue;
																}
																if($FlagSpecArea){
																	$SpecArea = $Area->nodeValue;
																}
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Rights"){
												$AllRights = "";
												foreach($ParcelData->childNodes as $Rights){
													if($Rights->nodeName == "Right"){
														foreach($Rights->childNodes as $Right){
															if($Right->nodeName == "Name"){
																if($FlagRight){
																	$AllRights .= ", ".iconv('utf-8', 'windows-1251', $Right->nodeValue);
																}
																if(!$FlagRight){
																	$AllRights .= iconv('utf-8', 'windows-1251', $Right->nodeValue);
																	$FlagRight = 1;
																}
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Encumbrances"){
												$AllEncumbrances = "";
												foreach($ParcelData->childNodes as $Encumbrances){
													if($Encumbrances->nodeName == "Encumbrance"){
														foreach($Encumbrances->childNodes as $Encumbrance){
															if($Encumbrance->nodeName == "Name"){
																if($FlagEncumbrance){
																	$AllEncumbrances .= ", ".iconv('utf-8', 'windows-1251', $Encumbrance->nodeValue);
																}
																if(!$FlagEncumbrance){
																	$AllEncumbrances .= iconv('utf-8', 'windows-1251', $Encumbrance->nodeValue);
																	$FlagEncumbrance = 1;
																}
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Category"){
												$Cat = $Category[$ParcelData->getAttribute('Category')];
											}
											if($ParcelData->nodeName == "Utilization"){
												$Util = $Utilization[$ParcelData->getAttribute('Kind')];
												$UtilDoc = iconv('utf-8', 'windows-1251', $ParcelData->getAttribute('ByDoc'));
											}
											if($ParcelData->nodeName == "Location"){
												foreach($ParcelData->childNodes as $Address){
													if($Address->nodeName == "Address"){
														foreach($Address->childNodes as $Note){
															if($Note->nodeName == "Note"){
																$Addr = iconv('utf-8', 'windows-1251', $Note->nodeValue);
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Entity_Spatial"){
												$SX = 0;
												$SY = 0;
												$PointNum = 0;
												foreach($ParcelData->childNodes as $Spatial_Element){
													if($Spatial_Element->nodeName == "Spatial_Element"){
														$out .= "POLYLINE\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  6\nByLayer\n 70\n1\n 75\n5\n 66\n1\n  0\n";
														foreach($Spatial_Element->childNodes as $Spelement_Unit){
															if($Spelement_Unit->nodeName == "Spelement_Unit"){
																foreach($Spelement_Unit->childNodes as $Ordinate){
																	if($Ordinate->nodeName == "Ordinate"){
																		if($_REQUEST['invert'] == "on"){
																			$lastX = $Ordinate->getAttribute('X');
																			$lastY = $Ordinate->getAttribute('Y');
																			$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																			$SY += $lastX;
																			$SX += $lastY;
																			$Y += $lastX;
																			$X += $lastY;
																			$PointNum++;
																			$TotalPoints++;
																		}else{
																			$lastX = $Ordinate->getAttribute('Y');
																			$lastY = $Ordinate->getAttribute('X');
																			$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																			$SY += $lastX;
																			$SX += $lastY;
																			$Y += $lastX;
																			$X += $lastY;
																			$PointNum++;
																			$TotalPoints++;
																		}
																	}
																}
																
															}
														}
														$out .= "SEQEND\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  0\n";
													}
												}
												$out .= "INSERT\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."\n  8\nLayer_KN\n 66\n1\n 10\n0.0\n 20\n0.0\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$ParcelType[$Parcel->getAttribute('Name')]."\n  2\nВид земельного участка\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$PState[$Parcel->getAttribute('State')]."\n  2\nСтатус земельного участка\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$date[2].".".$date[1].".".$date[0]."\n  2\nДата постановки на учёт\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Cat."\n  2\nКатегория земель\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Util."\n  2\nВид разрешенного использования\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$UtilDoc."\n  2\nПо документу\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Addr."\n  2\nАдрес\n 70\n1\n  0\n";
												if($FlagRight){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllRights."\n  2\nПрава\n 70\n1\n  0\n";
												}
												if($FlagEncumbrance){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllEncumbrances."\n  2\nОбременения\n 70\n1\n  0\n";
												}
												if($DecArea){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$DecArea."\n  2\nДекларированная площадь\n 70\n1\n  0\n";
												}
												if($SpecArea){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$SpecArea."\n  2\nУточненная площадь\n 70\n1\n  0\n";
												}
												$out .= "SEQEND\n  8\nLayer_KN\n  0\n";
												$blocks .= "BLOCK\n  8\nLayer_KN\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."\n 70\n2\n 10\n0.0\n 20\n0.0\n  0\nTEXT\n 8\nLayer_KN\n 10\n".$SX/$PointNum."\n 20\n".$SY/$PointNum."\n 40\n4.000000\n 1\n".$Parcel->getAttribute('CadastralNumber')."\n 50\n0.000000\n 41\n0.750000\n 7\nSHRFT\n 71\n0\n 72\n0\n 0\nENDBLK\n  8\nLayer_KN\n  0\n";
											}
											if($ParcelData->nodeName == "Contours"){
												$ContNum = 1;
												foreach($ParcelData->childNodes as $Contours){
													if($Contours->nodeName == "Contour"){
														foreach($Contours->childNodes as $Contour){
															if($Contour->nodeName == "Entity_Spatial"){
																$SX = 0;
																$SY = 0;
																$PointNum = 0;
																foreach($Contour->childNodes as $Spatial_Element){
																	if($Spatial_Element->nodeName == "Spatial_Element"){
																		$out .= "POLYLINE\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  6\nByLayer\n 70\n1\n 75\n5\n 66\n1\n  0\n";
																		foreach($Spatial_Element->childNodes as $Spelement_Unit){
																			if($Spelement_Unit->nodeName == "Spelement_Unit"){
																				foreach($Spelement_Unit->childNodes as $Ordinate){
																					if($Ordinate->nodeName == "Ordinate"){
																						if($_REQUEST['invert'] == "on"){
																							$lastX = $Ordinate->getAttribute('X');
																							$lastY = $Ordinate->getAttribute('Y');
																							$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																							$SY += $lastX;
																							$SX += $lastY;
																							$Y += $lastX;
																							$X += $lastY;
																							$PointNum++;
																							$TotalPoints++;
																						}else{
																							$lastX = $Ordinate->getAttribute('Y');
																							$lastY = $Ordinate->getAttribute('X');
																							$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																							$SY += $lastX;
																							$SX += $lastY;
																							$Y += $lastX;
																							$X += $lastY;
																							$PointNum++;
																							$TotalPoints++;
																						}
																					}
																				}
																				
																			}
																		}
																		$out .= "SEQEND\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  0\n";
																	}
																}
																$out .= "INSERT\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."_".$ContNum."\n  8\nLayer_KN\n 66\n1\n 10\n0.0\n 20\n0.0\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$ParcelType[$Parcel->getAttribute('Name')]."\n  2\nВид земельного участка\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$PState[$Parcel->getAttribute('State')]."\n  2\nСтатус земельного участка\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$date[2].".".$date[1].".".$date[0]."\n  2\nДата постановки на учёт\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Cat."\n  2\nКатегория земель\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Util."\n  2\nВид разрешенного использования\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$UtilDoc."\n  2\nПо документу\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Addr."\n  2\nАдрес\n 70\n1\n  0\n";
																if($FlagRight){
																	$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllRights."\n  2\nПрава\n 70\n1\n  0\n";
																}
																if($FlagEncumbrance){
																	$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllEncumbrances."\n  2\nОбременения\n 70\n1\n  0\n";
																}
																if($DecArea){
																	$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$DecArea."\n  2\nДекларированная площадь\n 70\n1\n  0\n";
																}
																if($SpecArea){
																	$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$SpecArea."\n  2\nУточненная площадь\n 70\n1\n  0\n";
																}
																$out .= "SEQEND\n  8\nLayer_KN\n  0\n";
																$blocks .= "BLOCK\n  8\nLayer_KN\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."_".$ContNum."\n 70\n2\n 10\n0.0\n 20\n0.0\n  0\nTEXT\n 8\nLayer_KN\n 10\n".$SX/$PointNum."\n 20\n".$SY/$PointNum."\n 40\n4.000000\n 1\n".$Parcel->getAttribute('CadastralNumber')."(".$ContNum.")\n 50\n0.000000\n 41\n0.750000\n 7\nSHRFT\n 71\n0\n 72\n0\n 0\nENDBLK\n  8\nLayer_KN\n  0\n";
																$ContNum++;
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
						$out .= "TEXT\n 8\nLayer_KV\n 10\n".$X/$TotalPoints."\n 20\n".$Y/$TotalPoints."\n 40\n80.000000\n 1\n".$Block."\n 50\n0.000000\n 41\n0.750000\n 7\nSHRFT\n 71\n0\n 72\n0\n 0\n";
						echo "</table>";
					}
				}
				$out .= "ENDSEC\n 0\n".$blocks;
				$out .= "ENDSEC\n 0\nEOF";
				$fout = fopen("../dxf/".$data['name'].".dxf", "w");
				fwrite($fout, $out);
				fclose($fout);
			}
			if($FileType = $xml->getElementsByTagName("Region_Cadastr_Vidimus_KV")->item(0)){
				echo "Тип файла: <b>Кадастровая выписка о земельном участке</b><br><br>";
				$CadastralBlocks = $xml->getElementsByTagName("Cadastral_Blocks")->item(0);
				
				$f = fopen("../dCategories.csv", "r");
				while(!feof($f)){
					$csv = fgetcsv($f, 1000, ';');
					$Category[$csv[0]] = $csv[1];
				}
				fclose($f);
				
				$f = fopen("../Utilizations.csv", "r");
				while(!feof($f)){
					$csv = fgetcsv($f, 1000, ';');
					$Utilization[$csv[0]] = $csv[1];
				}
				fclose($f);
				
				$PState['01'] = 'Ранее учтенный';
				$PState['03'] = 'Условный';
				$PState['04'] = 'Внесенный';
				$PState['05'] = 'Временный';
				$PState['06'] = 'Учтенный';
				$PState['07'] = 'Снят с учета';
				$PState['08'] = 'Аннулированный';
				
				$StateLayer['01'] = 'Ranee Uchten';
				$StateLayer['03'] = 'Uslovn';
				$StateLayer['04'] = 'Vnesen';
				$StateLayer['05'] = 'Vremen';
				$StateLayer['06'] = 'Uchten';
				$StateLayer['07'] = 'Snyat';
				$StateLayer['08'] = 'Annuliroan';
				
				$ParcelType["01"] = "Землепользование";
				$ParcelType["02"] = "Единое землепользование";
				$ParcelType["03"] = "Обособленный участок";
				$ParcelType["04"] = "Условный участок";
				$ParcelType["05"] = "Многоконтурный участок";
				$ParcelType["06"] = "Значение отсутствует";
				
				$out = "  0\nSECTION\n  2\nTABLES\n  0\nTABLE\n  2\nLAYER\n 70\n21\n  0\nLAYER\n  2\nLayer_KN\n 70\n64\n 62\n4\n  6\nByLayer\n  0\nLAYER\n  2\nLayer_KV\n 70\n64\n 62\n5\n  6\nByLayer\n  0\nENDTAB\n  0\nENDSEC\n";
				$out .= "0\nSECTION\n 2\nENTITIES\n 0\n";
				$blocks = "SECTION\n 2\nBLOCKS\n 0\n";
				
				foreach($CadastralBlocks->childNodes as $CadastralBlock){
					if($CadastralBlock->nodeName == "Cadastral_Block"){
						$TotalPoints = 0;
						$X = 0;
						$Y = 0;
						$Block = $CadastralBlock->getAttribute('CadastralNumber');
						echo "Номер кадастрового квартала: <b>".$Block."</b><br><br>Участок:<br><br>";
						foreach($CadastralBlock->childNodes as $Parcels){
							if($Parcels->nodeName == "Parcels"){
								foreach($Parcels->childNodes as $Parcel){
									if($Parcel->nodeName == "Parcel"){
										echo "Кадастровый номер участка: <b>".$Parcel->getAttribute('CadastralNumber')."</b>";
										$FlagRight = 0;
										$FlagEncumbrance = 0;
										
										$FlagDecArea = 0;
										$FlagSpecArea = 0;
										
										$DecArea = 0;
										$SpecArea = 0;
										
										$date = $Parcel->getAttribute('DateCreated');
										$date = explode("-", $date);
										
										$ContFlag = 0;
										
										foreach($Parcel->childNodes as $ParcelData){
											if($ParcelData->nodeName == "Areas"){
												foreach($ParcelData->childNodes as $Areas){
													if($Areas->nodeName == "Area"){
														foreach($Areas->childNodes as $Area){
															if($Area->nodeName == "AreaCode"){
																if($Area->nodeValue == "008"){
																	$FlagDecArea = 1;
																	$FlagSpecArea = 0;
																}
																if($Area->nodeValue == "009"){
																	$FlagDecArea = 0;
																	$FlagSpecArea = 1;
																}
															}
															if($Area->nodeName == "Area"){
																if($FlagDecArea){
																	$DecArea = $Area->nodeValue;
																}
																if($FlagSpecArea){
																	$SpecArea = $Area->nodeValue;
																}
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Rights"){
												$AllRights = "";
												foreach($ParcelData->childNodes as $Rights){
													if($Rights->nodeName == "Right"){
														foreach($Rights->childNodes as $Right){
															if($Right->nodeName == "Name"){
																if($FlagRight){
																	$AllRights .= ", ".iconv('utf-8', 'windows-1251', $Right->nodeValue);
																}
																if(!$FlagRight){
																	$AllRights .= iconv('utf-8', 'windows-1251', $Right->nodeValue);
																	$FlagRight = 1;
																}
															}
															if($Right->nodeName == "Owner"){
																foreach($Right->childNodes as $Owner){
																	if($Owner->nodeName == "Person"){
																		foreach($Owner->childNodes as $FIO){
																			if($FIO->nodeName == "FIO"){
																				foreach($FIO->childNodes as $Person){
																					if($Person->nodeName == "Surname"){
																						$rightholder .= iconv('utf-8', 'windows-1251', $Person->nodeValue);
																					}
																					if($Person->nodeName == "First"){
																						$rightholder .= iconv('utf-8', 'windows-1251', " ".$Person->nodeValue);
																					}
																					if($Person->nodeName == "Patronymic"){
																						$rightholder .= iconv('utf-8', 'windows-1251', " ".$Person->nodeValue);
																					}
																				}
																			}
																		}
																	}
																	if($Owner->nodeName == "Organization"){
																		foreach($Owner->childNodes as $Name){
																			if($Name->nodeName == "Name"){
																				$rightholder .= iconv('utf-8', 'windows-1251', $Name->nodeValue);
																			}
																		}
																	}
																	if($Owner->nodeName == "Governance"){
																		foreach($Owner->childNodes as $Name){
																			if($Name->nodeName == "Name"){
																				$rightholder .= iconv('utf-8', 'windows-1251', $Name->nodeValue);
																			}
																		}
																	}
																}
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Encumbrances"){
												$AllEncumbrances = "";
												foreach($ParcelData->childNodes as $Encumbrances){
													if($Encumbrances->nodeName == "Encumbrance"){
														foreach($Encumbrances->childNodes as $Encumbrance){
															if($Encumbrance->nodeName == "Name"){
																if($FlagEncumbrance){
																	$AllEncumbrances .= ", ".iconv('utf-8', 'windows-1251', $Encumbrance->nodeValue);
																}
																if(!$FlagEncumbrance){
																	$AllEncumbrances .= iconv('utf-8', 'windows-1251', $Encumbrance->nodeValue);
																	$FlagEncumbrance = 1;
																}
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Category"){
												$Cat = $Category[$ParcelData->getAttribute('Category')];
											}
											if($ParcelData->nodeName == "Utilization"){
												$Util = $Utilization[$ParcelData->getAttribute('Kind')];
												$UtilDoc = iconv('utf-8', 'windows-1251', $ParcelData->getAttribute('ByDoc'));
											}
											if($ParcelData->nodeName == "Location"){
												foreach($ParcelData->childNodes as $Address){
													if($Address->nodeName == "Address"){
														foreach($Address->childNodes as $Note){
															if($Note->nodeName == "Note"){
																$Addr = iconv('utf-8', 'windows-1251', $Note->nodeValue);
															}
														}
													}
												}
											}
											if($ParcelData->nodeName == "Entity_Spatial"){
												$SX = 0;
												$SY = 0;
												$PointNum = 0;
												foreach($ParcelData->childNodes as $Spatial_Element){
													if($Spatial_Element->nodeName == "Spatial_Element"){
														$out .= "POLYLINE\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  6\nByLayer\n 70\n1\n 75\n5\n 66\n1\n  0\n";
														foreach($Spatial_Element->childNodes as $Spelement_Unit){
															if($Spelement_Unit->nodeName == "Spelement_Unit"){
																foreach($Spelement_Unit->childNodes as $Ordinate){
																	if($Ordinate->nodeName == "Ordinate"){
																		if($_REQUEST['invert'] == "on"){
																			$lastX = $Ordinate->getAttribute('X');
																			$lastY = $Ordinate->getAttribute('Y');
																			$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																			$SY += $lastX;
																			$SX += $lastY;
																			$Y += $lastX;
																			$X += $lastY;
																			$PointNum++;
																			$TotalPoints++;
																		}else{
																			$lastX = $Ordinate->getAttribute('Y');
																			$lastY = $Ordinate->getAttribute('X');
																			$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																			$SY += $lastX;
																			$SX += $lastY;
																			$Y += $lastX;
																			$X += $lastY;
																			$PointNum++;
																			$TotalPoints++;
																		}
																	}
																}
																
															}
														}
														$out .= "SEQEND\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  0\n";
													}
												}
												$out .= "INSERT\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."\n  8\nLayer_KN\n 66\n1\n 10\n0.0\n 20\n0.0\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$ParcelType[$Parcel->getAttribute('Name')]."\n  2\nВид земельного участка\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$PState[$Parcel->getAttribute('State')]."\n  2\nСтатус земельного участка\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$date[2].".".$date[1].".".$date[0]."\n  2\nДата постановки на учёт\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Cat."\n  2\nКатегория земель\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Util."\n  2\nВид разрешенного использования\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$UtilDoc."\n  2\nПо документу\n 70\n1\n  0\n";
												$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Addr."\n  2\nАдрес\n 70\n1\n  0\n";
												if($FlagRight){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllRights."\n  2\nПрава\n 70\n1\n  0\n";
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$rightholder."\n  2\nПравообладатель\n 70\n1\n  0\n";
												}
												if($FlagEncumbrance){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllEncumbrances."\n  2\nОбременения\n 70\n1\n  0\n";
												}
												if($DecArea){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$DecArea."\n  2\nДекларированная площадь\n 70\n1\n  0\n";
												}
												if($SpecArea){
													$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$SpecArea."\n  2\nУточненная площадь\n 70\n1\n  0\n";
												}
												$out .= "SEQEND\n  8\nLayer_KN\n  0\n";
												$blocks .= "BLOCK\n  8\nLayer_KN\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."\n 70\n2\n 10\n0.0\n 20\n0.0\n  0\nTEXT\n 8\nLayer_KN\n 10\n".$SX/$PointNum."\n 20\n".$SY/$PointNum."\n 40\n4.000000\n 1\n".$Parcel->getAttribute('CadastralNumber')."\n 50\n0.000000\n 41\n0.750000\n 7\nSHRFT\n 71\n0\n 72\n0\n 0\nENDBLK\n  8\nLayer_KN\n  0\n";
											}
											if($ParcelData->nodeName == "Contours"){
												$ContFlag = 1;
												$ParcelCont = $ParcelData;
											}
										}
										if($ContFlag){
											$ContNum = 1;
											foreach($ParcelCont->childNodes as $Contours){
												if($Contours->nodeName == "Contour"){
													foreach($Contours->childNodes as $Contour){
														if($Contour->nodeName == "Entity_Spatial"){
															$SX = 0;
															$SY = 0;
															$PointNum = 0;
															foreach($Contour->childNodes as $Spatial_Element){
																if($Spatial_Element->nodeName == "Spatial_Element"){
																	$out .= "POLYLINE\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  6\nByLayer\n 70\n1\n 75\n5\n 66\n1\n  0\n";
																	foreach($Spatial_Element->childNodes as $Spelement_Unit){
																		if($Spelement_Unit->nodeName == "Spelement_Unit"){
																			foreach($Spelement_Unit->childNodes as $Ordinate){
																				if($Ordinate->nodeName == "Ordinate"){
																					if($_REQUEST['invert'] == "on"){
																						$lastX = $Ordinate->getAttribute('X');
																						$lastY = $Ordinate->getAttribute('Y');
																						$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																						$SY += $lastX;
																						$SX += $lastY;
																						$Y += $lastX;
																						$X += $lastY;
																						$PointNum++;
																						$TotalPoints++;
																					}else{
																						$lastX = $Ordinate->getAttribute('Y');
																						$lastY = $Ordinate->getAttribute('X');
																						$out .= "VERTEX\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n 10\n".$lastY."\n 20\n".$lastX."\n  0\n";
																						$SY += $lastX;
																						$SX += $lastY;
																						$Y += $lastX;
																						$X += $lastY;
																						$PointNum++;
																						$TotalPoints++;
																					}
																				}
																			}
																		}
																	}
																	$out .= "SEQEND\n  8\n".$StateLayer[$Parcel->getAttribute('State')]."\n  0\n";
																}
															}
															$out .= "INSERT\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."_".$ContNum."\n  8\nLayer_KN\n 66\n1\n 10\n0.0\n 20\n0.0\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$ParcelType[$Parcel->getAttribute('Name')]."\n  2\nВид земельного участка\n 70\n1\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$PState[$Parcel->getAttribute('State')]."\n  2\nСтатус земельного участка\n 70\n1\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$date[2].".".$date[1].".".$date[0]."\n  2\nДата постановки на учёт\n 70\n1\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Cat."\n  2\nКатегория земель\n 70\n1\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Util."\n  2\nВид разрешенного использования\n 70\n1\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$UtilDoc."\n  2\nПо документу\n 70\n1\n  0\n";
															$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$Addr."\n  2\nАдрес\n 70\n1\n  0\n";
															if($FlagRight){
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllRights."\n  2\nПрава\n 70\n1\n  0\n";
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$rightholder."\n  2\nПравообладатель\n 70\n1\n  0\n";
															}
															if($FlagEncumbrance){
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$AllEncumbrances."\n  2\nОбременения\n 70\n1\n  0\n";
															}
															if($DecArea){
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$DecArea."\n  2\nДекларированная площадь\n 70\n1\n  0\n";
															}
															if($SpecArea){
																$out .= "ATTRIB\n  8\nLayer_KN\n 10\n0.0\n 20\n0.0\n 40\n0.2\n  1\n".$SpecArea."\n  2\nУточненная площадь\n 70\n1\n  0\n";
															}
															$out .= "SEQEND\n  8\nLayer_KN\n  0\n";
															$blocks .= "BLOCK\n  8\nLayer_KN\n  2\nBLK".str_replace(":", "_", $Parcel->getAttribute('CadastralNumber'))."_".$ContNum."\n 70\n2\n 10\n0.0\n 20\n0.0\n  0\nTEXT\n 8\nLayer_KN\n 10\n".$SX/$PointNum."\n 20\n".$SY/$PointNum."\n 40\n4.000000\n 1\n".$Parcel->getAttribute('CadastralNumber')."(".$ContNum.")\n 50\n0.000000\n 41\n0.750000\n 7\nSHRFT\n 71\n0\n 72\n0\n 0\nENDBLK\n  8\nLayer_KN\n  0\n";
															$ContNum++;
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}	
				$out .= "ENDSEC\n 0\n".$blocks;
				$out .= "ENDSEC\n 0\nEOF";
				$fout = fopen("../dxf/".$data['name'].".dxf", "w");
				fwrite($fout, $out);
				fclose($fout);
			}
			$data['name'] = str_replace(" ", "_", $data['name']);
			$js = '<script type="text/javascript">';
			$js .= 'window.parent.downloaddxf("'.$data['name'].'.dxf");';
			$js .= '</script>';
			echo $js;
		}
	}
	
?>