Map

Changes

Details

diff --git a/ModelData/BusinessModel/BusinessDataManager.cs b/ModelData/BusinessModel/BusinessDataManager.cs
index 3a117f8..a71ec25 100644
--- a/ModelData/BusinessModel/BusinessDataManager.cs
+++ b/ModelData/BusinessModel/BusinessDataManager.cs
@@ -39,6 +39,8 @@ namespace ModelData.BusinessModel
 
         private bool needUpdate;
         private List<Settlement> infoAboutSettlements;
+        private List<Region> allRegions;
+        private List<SettlementType> allTypes;
 
         #endregion
 
@@ -48,6 +50,8 @@ namespace ModelData.BusinessModel
         {
             needUpdate = true;
             infoAboutSettlements = new List<Settlement>();
+            allRegions = new List<Region>();
+            allTypes = new List<SettlementType>();
         }        
 
         #endregion
@@ -103,32 +107,30 @@ namespace ModelData.BusinessModel
 
         public Region[] AllRegions()
         {
-            var query_result = RDFQuery.GetData(RDFQuery.QueryType.AllRegions, new string[] { });
-            List<Region> result = new List<Region>();
-            foreach (var elem in query_result)
-            {
-                result.Add(new Region()
-                {
-                    URL = elem["region"].ToString().Split('^')[0],
-                    Title = elem["regionName"].ToString().Split('^')[0]
-                });
+            if (!needUpdate)
+            {               
+                if (allRegions.Count != 0)
+                    return allRegions.ToArray();
             }
-            return result.ToArray();
+            else
+                allRegions = new List<Region>();
+            allRegions = new Context().LoadAllRegions();
+
+            return allRegions.ToArray();
         }
 
         public SettlementType[] AllSettlementTypes()
         {
-            var query_result = RDFQuery.GetData(RDFQuery.QueryType.AllSettlementTypes, new string[] { });
-            List<SettlementType> result = new List<SettlementType>();
-            foreach (var elem in query_result)
+            if (!needUpdate)
             {
-                result.Add(new SettlementType()
-                    {
-                        URL = elem["settlementType"].ToString().Split('^')[0],
-                        Title = elem["typeName"].ToString().Split('^')[0]
-                    });
-            }                   
-            return result.ToArray();
+                if (allTypes.Count != 0)
+                    return allTypes.ToArray();
+            }
+            else
+                allTypes = new List<SettlementType>();
+            allTypes = new Context().LoadAllTypes();
+
+            return allTypes.ToArray();
         }
 
         #endregion
diff --git a/ModelData/BusinessModel/ExtraEntities/Source.cs b/ModelData/BusinessModel/ExtraEntities/Source.cs
new file mode 100644
index 0000000..dd8c0ec
--- /dev/null
+++ b/ModelData/BusinessModel/ExtraEntities/Source.cs
@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using ModelData.BusinessModel.BaseAndInterface;
+using Tools;
+
+namespace ModelData.BusinessModel.ExtraEntities
+{
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  Founder
+    ///
+    /// \brief  Отражает сущность основателя поселения Помимо наследуемых свойств, описывает
+    ///         дополнительную информацию об основателе.
+    ///
+    /// \author Denis
+    /// \date   30.03.2019
+
+    public class Source : I_MySerializable
+    {
+        /// \property   public string Title
+        ///
+        /// \brief  Нименование источника.
+        /// Установлен атрибут IndexAttrib со значением 0
+        /// \returns    The Title.
+
+        [IndexAttrib(0)] public string Title { set; get; }
+
+
+
+        /// \property   public List<string> Name
+        ///
+        /// \brief  Ссылки на источник в вебе.
+        /// Установлен атрибут IndexAttrib со значением 1
+        /// \returns    The URLs.
+
+        [IndexAttrib(2)] public List<string> URLs { set; get; }
+
+
+        /// \property   public string Title
+        ///
+        /// \brief  Нименование источника.
+        /// Установлен атрибут IndexAttrib со значением 0
+        /// \returns    The Title.
+
+        [IndexAttrib(3)] public string Auther { set; get; }
+
+
+
+        /// \fn public override Dictionary<string, string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
+        public Dictionary<string, string> Serialize()
+        {
+            string r = "";
+            if (URLs != null)
+                foreach (string s in URLs)
+                    if (s != null && s != "")
+                        r += s;
+
+            return new Dictionary<string, string>()
+            {               
+                ["Название"] = this.Title ?? "",
+                ["URL"] = r,
+                ["Автор"] = this.Auther ?? ""
+            };
+        }
+    }
+
+
+    /// @}
+}
diff --git a/ModelData/BusinessModel/MainEntities/EditedSettlement.cs b/ModelData/BusinessModel/MainEntities/EditedSettlement.cs
index d45d660..fd6dab0 100644
--- a/ModelData/BusinessModel/MainEntities/EditedSettlement.cs
+++ b/ModelData/BusinessModel/MainEntities/EditedSettlement.cs
@@ -55,7 +55,7 @@ namespace ModelData.BusinessModel.MainEntities
         /// Обязательное свойство. Установлен атрибут IndexAttrib со значением 4
         /// \returns    The source.
 
-        [IndexAttrib(4)] public string Source { set; get; }
+        [IndexAttrib(4)] public Source Source { set; get; }
 
         #endregion
 
@@ -169,7 +169,7 @@ namespace ModelData.BusinessModel.MainEntities
         /// \param  hasBeginning    Точный год.
         /// \param  Source          Источник.
 
-        public EditedSettlement(string URL, string before, InstantTime hasBeginning, string Source)
+        public EditedSettlement(string URL, string before, InstantTime hasBeginning, Source Source)
         {
             this.URL = URL;
             this.before = before;
@@ -209,6 +209,7 @@ namespace ModelData.BusinessModel.MainEntities
         {
             return new Dictionary<string, string>()
             {
+                ["Источник"] = Concat(this.Source?.Serialize()) ?? "",
                 ["URL"] = this.URL ?? "",
                 ["Соответствующий год"] = this.hasBeginning.ToString() ?? "",
                 ["В составе региона"] = Concat(this.Region?.Serialize()) ?? "",
diff --git a/ModelData/BusinessModel/MainEntities/SettlementName.cs b/ModelData/BusinessModel/MainEntities/SettlementName.cs
new file mode 100644
index 0000000..57d032a
--- /dev/null
+++ b/ModelData/BusinessModel/MainEntities/SettlementName.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ModelData.BusinessModel.MainEntities
+{
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  SettlementName
+    ///
+    /// \brief  Описывает совокупность имени поселения и его url
+    /// Класс описывает совокупность имени поселения и его url, которая необходима для поиска по имени на стороне клиента.
+    /// Это необходимо, т.к. поиск по имени, а несколько одинаковых имен значат один и тот же url.
+    /// При этом на стороне клиента был поиск среди всех имен, а теперь будет фильтр по имени, а поиск по url.
+    /// \warning Этот класс надо более правильно объявить и отнести к другому пространству имен, но мне уже некогда.
+    /// \author Denis
+    /// \date   12.06.2019
+
+    public class SettlementName
+    {
+        /// \brief  Отображаемое имя поселения при поиске.
+        public string label;
+
+        /// \brief  URL поселения, которое нужно найти на карте.
+        public string value;
+    }
+    /// @}
+}
diff --git a/ModelData/BusinessModel/RDF/Queries.cs b/ModelData/BusinessModel/RDF/Queries.cs
index dcea28e..f0b90af 100644
--- a/ModelData/BusinessModel/RDF/Queries.cs
+++ b/ModelData/BusinessModel/RDF/Queries.cs
@@ -27,11 +27,13 @@ namespace ModelData.BusinessModel.RDF
             ["rdfs"] = "<http://www.w3.org/2000/01/rdf-schema#>",
             ["owl"] = "<http://www.w3.org/2002/07/owl#>",
             ["xsd"] = "<http://www.w3.org/2001/XMLSchema#>",
-            ["geo"] = "<http://www.w3.org/2003/01/geo/wgs84_pos#>",
+            ["geo"] = "<http://www.w3.org/2003/01/geo/wgs84_pos:>",
             ["geonames"] = "<http://www.geonames.org/ontology#>",
             ["time"] = "<https://www.w3.org/2006/time#>",
             ["map"] = "<http://jena.denhome.keenetic.link/map#>",
-            ["foaf"] = "<http://xmlns.com/foaf/0.1/>"
+            ["foaf"] = "<http://xmlns.com/foaf/0.1/>",
+            ["dc"] = "<http://purl.org/dc/elements/1.1/>",
+            ["dcterms"] = "<http://purl.org/dc/terms/>"
         };
 
         #endregion
@@ -45,39 +47,45 @@ namespace ModelData.BusinessModel.RDF
         ///SELECT DISTINCT (?settlement as ?url) ?title ?lat ?long ?settlementType ?typeName ?region ?regionName (?maxc as ?maxPop)
         ///WHERE
         ///{
-        ///	    ?settlement a map:Settlement;
-        ///	    			geonames:name ?title;
-        ///	    			geo:lat ?lat; 
-        ///	    			geo:long ?long.
-        ///	    OPTIONAL {?settlement time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear}
-        ///	    FILTER (!bound(?wasFound) || ?wasFoundYear >= "from"^^xsd:gYear )
-        ///	    {
-        ///	    	SELECT ?settlement (MAX(?populationNotNULL) AS ?maxc)
-        ///	    	WHERE 
-        ///	    	{ 
-        ///	    		?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?date.
-        ///	    		?date time:year ?year.
-        ///	    		FILTER  (?year >= "from"^^xsd:gYear  && ?year <= "to"^^xsd:gYear )
-        ///	    		OPTIONAL {?editedSettlement geonames:population ?population.}
-        ///	    		OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
-        ///	    
-        ///	    		## заполни переменную ?populationNotNULL так: если ?population НЕ задан (т.е. NULL), тогда 0, иначе (т.е. задан) ?population
-        ///	    		BIND (IF (!BOUND(?population), "0"^^xsd:integer, ?population) as ?populationNotNULL)
-        ///	    	}
-        ///	    	Group by ?settlement
-        ///	    }
-        ///	    {
-        ///	    	SELECT ?settlement ?settlementType ?typeName ?region ?regionName
-        ///	    	WHERE 
-        ///	    	{ 
-        ///	    		?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?date.
-        ///	    		?date time:year ?year.
-        ///	    		FILTER  (?year >= "from"^^xsd:gYear  && ?year <= "to"^^xsd:gYear )
-        ///	    		OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
-        ///	    		OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
-        ///	    	}
-        ///	    }
-        ///}
+        ///		?settlement a map:Settlement;
+        ///					geonames:name ?title;
+        ///					geo:lat ?lat; 
+        ///					geo:long ?long.
+        ///		OPTIONAL {?settlement time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear}
+        ///		FILTER (!bound(?wasFound) || ?wasFoundYear <= "to"^^xsd:gYear )
+        ///		{
+        ///			SELECT ?settlement (MAX(?populationNotNULL) AS ?maxc)
+        ///			WHERE 
+        ///			{ 
+        ///				?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?dateBegin.
+        ///				?dateBegin time:year ?yearBegin.
+        ///				OPTIONAL {?editedSettlement time:hasEnd ?dateEnd. ?dateEnd time:year ?yearEnd.}
+        ///				##	датаНачало должна попадать в промежуток до верхней временной границы
+        ///				##	а датаКонец либо не указана, либо попадает в промежуток после нижней временно границы
+        ///				FILTER  (?yearBegin <= "to"^^xsd:gYear && (!bound(?dateEnd) || ?yearEnd > "from"^^xsd:gYear))
+        ///				OPTIONAL {?editedSettlement geonames:population ?population.}
+        ///				OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        ///		
+        ///				## заполни переменную ?populationNotNULL так: если ?population НЕ задан (т.е. NULL), тогда 0, иначе (т.е. задан) ?population
+        ///				BIND (IF (!BOUND(?population), "0"^^xsd:integer, ?population) as ?populationNotNULL)
+        ///			}
+        ///			Group by ?settlement
+        ///		}
+        ///		{
+        ///			SELECT ?settlement ?settlementType ?typeName ?region ?regionName
+        ///			WHERE 
+        ///			{ 
+        ///				?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?dateBegin.
+        ///				?dateBegin time:year ?yearBegin.
+        ///				OPTIONAL {?editedSettlement time:hasEnd ?dateEnd. ?dateEnd time:year ?yearEnd.}
+        ///				##	датаНачало должна попадать в промежуток до верхней временной границы
+        ///				##	а датаКонец либо не указана, либо попадает в промежуток после нижней временно границы
+        ///				FILTER  (?yearBegin <= "to"^^xsd:gYear && (!bound(?dateEnd) || ?yearEnd > "from"^^xsd:gYear))
+        ///				OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        ///				OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
+        ///			}
+        ///		}
+        ///}                                                                                                                                   
         /// \endcode
         /// \author Denis
         /// \date   31.03.2019
@@ -91,41 +99,48 @@ namespace ModelData.BusinessModel.RDF
         {
             return GetAllPrefixes() +
 @"
-  SELECT DISTINCT (?settlement as ?url) ?title ?lat ?long ?settlementType ?typeName ?region ?regionName (?maxc as ?maxPop)
+SELECT DISTINCT (?settlement as ?url) ?title ?lat ?long ?settlementType ?typeName ?region ?regionName (?maxc as ?maxPop)
 WHERE
-  {
-    ?settlement a map:Settlement;
-              geonames:name ?title;
-              geo:lat ?lat; geo:long ?long.
-    OPTIONAL {?settlement time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear}
-  	FILTER (!bound(?wasFound) || ?wasFoundYear >= " + '"' + from + '"' + @"^^xsd:gYear )
-    {
-        SELECT ?settlement (MAX(?populationNotNULL) AS ?maxc)
-        WHERE 
-    	{ 
-          ?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?date.
-      	  ?date time:year ?year.
-          FILTER  (?year >= " + '"' + from + '"' + @"^^xsd:gYear  && ?year <= " + '"' + to + '"' + @"^^xsd:gYear )
-          OPTIONAL {?editedSettlement geonames:population ?population.}
-		  OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
-		  
-		  ## заполни переменную ?populationNotNULL так: если ?population НЕ задан (т.е. NULL), тогда 0, иначе (т.е. задан) ?population
-		  BIND (IF (!BOUND(?population), " + "\"0\"" + @"^^xsd:integer, ?population) as ?populationNotNULL)
+{
+        ?settlement a map:Settlement;
+                    geonames:name ?title;
+                    geo:lat ?lat; 
+                    geo:long ?long.
+        OPTIONAL {?settlement time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear}
+        FILTER (!bound(?wasFound) || ?wasFoundYear <= " + '"' + to + '"' + @"^^xsd:gYear )
+        {
+            SELECT ?settlement (MAX(?populationNotNULL) AS ?maxc)
+            WHERE 
+            { 
+                ?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?dateBegin.
+                ?dateBegin time:year ?yearBegin.
+      			OPTIONAL {?editedSettlement time:hasEnd ?dateEnd. ?dateEnd time:year ?yearEnd.}
+      			##	датаНачало должна попадать в промежуток до верхней временной границы
+      			##	а датаКонец либо не указана, либо попадает в промежуток после нижней временно границы
+      			FILTER  (?yearBegin <= " + '"' + to + '"' + @"^^xsd:gYear && (!bound(?dateEnd) || ?yearEnd > " + '"' + from + '"' + @"^^xsd:gYear))
+                OPTIONAL {?editedSettlement geonames:population ?population.}
+                OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        
+                ## заполни переменную ?populationNotNULL так: если ?population НЕ задан (т.е. NULL), тогда 0, иначе (т.е. задан) ?population
+                BIND (IF (!BOUND(?population), " + "\"0\"" + @"^^xsd:integer, ?population) as ?populationNotNULL)
+            }
+            Group by ?settlement
         }
-        Group by ?settlement
-  	}
-	{
-        SELECT ?settlement ?settlementType ?typeName ?region ?regionName
-        WHERE 
-    	{ 
-          ?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?date.
-      	  ?date time:year ?year.
-          FILTER  (?year >= " + '"' + from + '"' + @"^^xsd:gYear  && ?year <= " + '"' + to + '"' + @"^^xsd:gYear )
-		  OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
-      	  OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
+        {
+            SELECT ?settlement ?settlementType ?typeName ?region ?regionName
+            WHERE 
+            { 
+                ?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?dateBegin.
+                ?dateBegin time:year ?yearBegin.
+      			OPTIONAL {?editedSettlement time:hasEnd ?dateEnd. ?dateEnd time:year ?yearEnd.}
+      			##	датаНачало должна попадать в промежуток до верхней временной границы
+      			##	а датаКонец либо не указана, либо попадает в промежуток после нижней временно границы
+      			FILTER  (?yearBegin <= " + '"' + to + '"' + @"^^xsd:gYear && (!bound(?dateEnd) || ?yearEnd > " + '"' + from + '"' + @"^^xsd:gYear))
+                OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+                OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
+            }
         }
-  	}
-  }
+}
 ";
         }
 
@@ -135,7 +150,7 @@ WHERE
         ///
         /// \brief  Полная информация о поселении
         /// \code       
-        ///SELECT DISTINCT ?title ?lat ?long ?wasFoundYear ?legend ?founder ?person ?foundersRegion ?editedSettlement ?source ?year ?settlementType ?typeName ?region ?regionName ?editedName ?alternateName ?population ?populationFemales ?populationMales
+        ///SELECT DISTINCT ?title ?lat ?long ?wasFoundYear ?legend ?founder ?person ?foundersRegion ?editedSettlement ?sourceURL ?sourceTitle ?sourceCreator ?year ?settlementType ?typeName ?region ?regionName ?editedName ?alternateName ?population ?populationFemales ?populationMales
         ///WHERE
         ///{
         ///		{ 
@@ -160,9 +175,11 @@ WHERE
         ///			{ 
         ///				?editedSettlement a map:EditedSettlement; 
         ///								time:before url_; 
-        ///								map:source ?source; 
+        ///								dc:source ?source; 
         ///								time:hasBeginning ?date.
         ///				?date time:year ?year.
+        ///				?source a dcterms:bibliographicResource; dc:identifier ?sourceURL; dc:title ?sourceTitle. 
+        ///             OPTIONAL {?source dc:creator? sourceCreator.}
         ///				OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
         ///				OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
         ///				OPTIONAL {?editedSettlement geonames:name ?editedName.}
@@ -187,7 +204,7 @@ WHERE
             string url_ = GetObjFromURL(URL);
 
             return GetAllPrefixes() +
-@"SELECT DISTINCT ?title ?lat ?long ?wasFoundYear ?legend ?founder ?person ?foundersRegion ?editedSettlement ?source ?year ?settlementType ?typeName ?region ?regionName ?editedName ?alternateName ?population ?populationFemales ?populationMales
+@"SELECT DISTINCT ?title ?lat ?long ?wasFoundYear ?legend ?founder ?person ?foundersRegion ?editedSettlement ?sourceURL ?sourceTitle ?sourceCreator ?year ?settlementType ?typeName ?region ?regionName ?editedName ?alternateName ?population ?populationFemales ?populationMales
 WHERE
 {
 	{ 
@@ -212,9 +229,11 @@ WHERE
 		{ 
 			?editedSettlement a map:EditedSettlement; 
 							time:before " + url_ + @"; 
-							map:source ?source; 
+							dc:source ?source; 
 							time:hasBeginning ?date.
 			?date time:year ?year.
+            ?source a dcterms:bibliographicResource; dc:identifier ?sourceURL; dc:title ?sourceTitle. 
+      		OPTIONAL {?source dc:creator ?sourceCreator.}
 			OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
 			OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
             OPTIONAL {?editedSettlement geonames:name ?editedName.}
diff --git a/ModelData/BusinessModel/UnitOfWork/Context.cs b/ModelData/BusinessModel/UnitOfWork/Context.cs
index 8a110b0..94147dc 100644
--- a/ModelData/BusinessModel/UnitOfWork/Context.cs
+++ b/ModelData/BusinessModel/UnitOfWork/Context.cs
@@ -46,7 +46,7 @@ namespace ModelData.BusinessModel.UnitOfWork
                     {
                         URL = str,
                         Title = Convert(elem["title"])/*elem["title"].ToString()*/,
-                        Position = Convert(elem["long"]) + " " + Convert(elem["lat"]),                        
+                        Position = Convert(elem["lat"]) + " " + Convert(elem["long"]),                        
                         Population = Int32.Parse(Convert(elem["maxPop"]))
                     };
                     MapPoints.Add(mapPoint);
@@ -101,13 +101,14 @@ namespace ModelData.BusinessModel.UnitOfWork
             List<EditedSettlement> listEdited = new List<EditedSettlement>();
 
             var lst_query = RDFQuery.GetData(RDFQuery.QueryType.SettlementInfo, new string[] { URL });
+
             foreach (var elem in lst_query)
             {
-                // title lat long wasFoundYear legend founder person foundersRegion editedSettlement source year settlementType typeName region regionName editedName alternateName population populationFemales populationMales
+                // title lat long wasFoundYear legend founder person foundersRegion editedSettlement sourceURL sourceTitle sourceCreator year settlementType typeName region regionName editedName alternateName population populationFemales populationMales
 
                 if (elem["editedSettlement"] == null)
                 {
-                    settlement = new Settlement(URL, elem["title"].ToString(), new Coordinate(elem["long"], elem["lat"]));
+                    settlement = new Settlement(URL, elem["title"].ToString(), new Coordinate(elem["lat"], elem["long"]));
 
                     if (elem["wasFoundYear"] != null)
                         settlement.hasBeginning = new InstantTime(Convert(elem["wasFoundYear"]));
@@ -129,12 +130,18 @@ namespace ModelData.BusinessModel.UnitOfWork
                     continue;
                 }
 
+
                 edited = new EditedSettlement
                     (
                         elem["editedSettlement"].ToString(),
                         settlement.URL,
                         new InstantTime(Convert(elem["year"])),
-                        elem["source"].ToString()
+                        new Source
+                        {
+                            Title = elem["sourceTitle"].ToString(),
+                            URLs = new List<string> { elem["sourceURL"].ToString() },
+                            Auther = (elem["sourceCreator"] != null) ? Convert(elem["sourceCreator"]) : ""
+                        }
                     );
 
                 if (elem["editedName"] != null)
@@ -166,14 +173,48 @@ namespace ModelData.BusinessModel.UnitOfWork
                         Title = Convert(elem["typeName"])
                     };
 
-                listEdited.Add(edited);
+                //  Если в результате существования нескольких URL у Source происходит дублирование EditedSettlements
+                //  То сначала будет добавлен новый экземпляр EditedSettlement'а, а потом наткнемся на его копию, у которой URL источника другой
+                //  Тогда просто впишем URL в существующий источник
+                var wasAdded = listEdited.Find(e => e.URL == edited.URL);
+                if (wasAdded == null)
+                    listEdited.Add(edited);
+                else
+                    wasAdded.Source.URLs.AddRange(edited.Source.URLs);                
             }
-
             settlement.EditedSettlements = listEdited;
 
             return settlement;
         }
 
+        public List<Region> LoadAllRegions()
+        {
+            var query_result = RDFQuery.GetData(RDFQuery.QueryType.AllRegions, new string[] { });
+            foreach (var elem in query_result)
+            {
+                Regions.Add(new Region()
+                {
+                    URL = Convert(elem["region"]),
+                    Title = Convert(elem["regionName"])
+                });
+            }
+            return Regions;
+        }
+
+        public List<SettlementType> LoadAllTypes()
+        {
+            var query_result = RDFQuery.GetData(RDFQuery.QueryType.AllSettlementTypes, new string[] { });
+            foreach (var elem in query_result)
+            {
+                SettlementTypes.Add(new SettlementType()
+                {
+                    URL = Convert(elem["settlementType"]),
+                    Title = Convert(elem["typeName"])
+                });
+            }
+            return SettlementTypes;
+        }
+
         #region Tools
 
         private string GetValue(VDS.RDF.Query.SparqlResult elem, string value)
diff --git a/ModelData/Diagrams/ClassDiagram_pic5.cd b/ModelData/Diagrams/ClassDiagram_pic5.cd
new file mode 100644
index 0000000..a7a7936
--- /dev/null
+++ b/ModelData/Diagrams/ClassDiagram_pic5.cd
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="NameAndType">
+  <Class Name="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity">
+    <Position X="9.25" Y="3.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>EAAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\BaseAndInterface\BaseOntologyEntity.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Orientation="Bottom" Position="0.589" />
+  </Class>
+  <Class Name="ModelData.BusinessModel.BusinessDataManager">
+    <Position X="21" Y="5.5" Width="3" />
+    <TypeIdentifier>
+      <HashCode>IAQEIABAAAAAAQBAAAIAAAAAAABAIAAAAAACACAAhBA=</HashCode>
+      <FileName>BusinessModel\BusinessDataManager.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.Founder">
+    <Position X="12.75" Y="5.5" Width="2.75" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="10.75" Y="5.25" />
+        <Point X="11.125" Y="5.25" />
+        <Point X="11.125" Y="5.812" />
+        <Point X="12.467" Y="5.812" Type="JumpStart" />
+        <Point X="12.633" Y="5.812" Type="JumpEnd" />
+        <Point X="12.75" Y="5.812" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAACAAAAAAAQAACAAAAAAAAAAAAAACAA=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\Founder.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.Region" Collapsed="true">
+    <Position X="19" Y="6" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\Region.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.SettlementType" Collapsed="true">
+    <Position X="19" Y="6.75" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="10.5" Y="3.75" />
+        <Point X="10.5" Y="3.375" />
+        <Point X="18.625" Y="3.375" />
+        <Point X="18.625" Y="7.348" />
+        <Point X="19" Y="7.348" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAQ=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\SettlementType.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.EditedSettlement">
+    <Position X="5.25" Y="0.5" Width="2.75" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" ManuallyRouted="true" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="9.25" Y="4.25" />
+        <Point X="8.333" Y="4.25" />
+        <Point X="8.333" Y="3.312" />
+        <Point X="8" Y="3.312" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>BAAAAAAAggAAAAAAABAAAAAAACCAAAAAEQACAAAAAAY=</HashCode>
+      <FileName>BusinessModel\MainEntities\EditedSettlement.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.MapPoint" Collapsed="true">
+    <Position X="19" Y="4.5" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true">
+      <Path>
+        <Point X="9.625" Y="3.75" />
+        <Point X="9.625" Y="3.375" />
+        <Point X="18.625" Y="3.375" />
+        <Point X="18.625" Y="4.846" />
+        <Point X="19" Y="4.846" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAgAAAAAQoAAAAAAAAACAAAAAAAQAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\MainEntities\MapPoint.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Orientation="Left" Position="0.1" />
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.Settlement" Collapsed="true">
+    <Position X="19" Y="5.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>BAAAACAAAAAABAAAABAAAAAAACAAAAAAAAACAADAAAA=</HashCode>
+      <FileName>BusinessModel\MainEntities\Settlement.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.RDF.Queries">
+    <Position X="24.25" Y="2.25" Width="2.75" />
+    <TypeIdentifier>
+      <HashCode>IAAEAAAAACAEAgAAAAAAMAAAAAAAIAAAAIAAACAAAAA=</HashCode>
+      <FileName>BusinessModel\RDF\Queries.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.RDF.RDFQuery">
+    <Position X="24.5" Y="5.75" Width="2.25" />
+    <Compartments>
+      <Compartment Name="Nested Types" Collapsed="false" />
+    </Compartments>
+    <NestedTypes>
+      <Enum Name="ModelData.BusinessModel.RDF.RDFQuery.QueryType">
+        <TypeIdentifier>
+          <NewMemberFileName>BusinessModel\RDF\RDFQuery.cs</NewMemberFileName>
+        </TypeIdentifier>
+      </Enum>
+    </NestedTypes>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\RDF\RDFQuery.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.Coordinate">
+    <Position X="10.25" Y="8" Width="2.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAEAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\Coordinate.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.InstantTime">
+    <Position X="5.25" Y="8" Width="2.5" />
+    <TypeIdentifier>
+      <HashCode>AAAEAAAABAAAAAAEAAAAAAAAAAAAAAAAAAACAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\InstantTime.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.Period">
+    <Position X="8.25" Y="8" Width="1.75" />
+    <TypeIdentifier>
+      <HashCode>AAIAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\Period.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.UnitOfWork.Context">
+    <Position X="21" Y="2.25" Width="3" />
+    <TypeIdentifier>
+      <HashCode>AAIAAQAAIAAAAAAAAIAAIACAAAAAIAAAACAAAAAAABA=</HashCode>
+      <FileName>BusinessModel\UnitOfWork\Context.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.WebModel.Model">
+    <Position X="13.75" Y="8" Width="2.75" />
+    <TypeIdentifier>
+      <HashCode>AAAAIAAAAABAAAAAAAAAAAAACACEAAAAAAACAAAAAAA=</HashCode>
+      <FileName>WebModel\Model.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.WebModel.WebDataManager">
+    <Position X="13.75" Y="10.75" Width="3" />
+    <TypeIdentifier>
+      <HashCode>AAEAAAQAAAAAAQBAAAAAAAAAAABAIAAAAAAKAAAAgAA=</HashCode>
+      <FileName>WebModel\WebDataManager.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="Tools.Config.ConfigManager">
+    <Position X="1.25" Y="1.75" Width="2.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.IndexAttrib">
+    <Position X="3.25" Y="0.75" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.SerializeService">
+    <Position X="1.5" Y="7" Width="2.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Users.User">
+    <Position X="1.5" Y="0.5" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Users.UserContext">
+    <Position X="2.25" Y="3.25" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Word.DocXWrite">
+    <Position X="1.25" Y="5.5" Width="2.75" />
+    <TypeIdentifier />
+  </Class>
+  <Interface Name="ModelData.BusinessModel.BaseAndInterface.I_URLcs">
+    <Position X="11.25" Y="6.25" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\BaseAndInterface\I_URLcs.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="Tools.I_MySerializable">
+    <Position X="8.5" Y="6.25" Width="2.5" />
+    <TypeIdentifier />
+  </Interface>
+  <Interface Name="System.IComparable&lt;T&gt;">
+    <Position X="12.75" Y="0.5" Width="1.5" />
+    <TypeIdentifier />
+  </Interface>
+  <Font Name="Segoe UI" Size="9" />
+</ClassDiagram>
\ No newline at end of file
diff --git a/ModelData/Diagrams/ClassDiagram_pic7.cd b/ModelData/Diagrams/ClassDiagram_pic7.cd
new file mode 100644
index 0000000..a118c8c
--- /dev/null
+++ b/ModelData/Diagrams/ClassDiagram_pic7.cd
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="NameAndType">
+  <Class Name="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity">
+    <Position X="9.25" Y="3.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>EAAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\BaseAndInterface\BaseOntologyEntity.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Orientation="Bottom" Position="0.589" />
+  </Class>
+  <Class Name="ModelData.BusinessModel.BusinessDataManager" Collapsed="true">
+    <Position X="20.75" Y="5.5" Width="2.75" />
+    <TypeIdentifier>
+      <HashCode>IAQEIABAAAAAAQBAAAIAAAAAAABAIAAAAAACACAAhBA=</HashCode>
+      <FileName>BusinessModel\BusinessDataManager.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.Founder">
+    <Position X="12.75" Y="5.5" Width="2.75" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="10.75" Y="5.25" />
+        <Point X="11.125" Y="5.25" />
+        <Point X="11.125" Y="5.812" />
+        <Point X="12.75" Y="5.812" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAACAAAAAAAQAACAAAAAAAAAAAAAACAA=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\Founder.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.Region">
+    <Position X="12.75" Y="3.75" Width="2.75" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\Region.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.SettlementType">
+    <Position X="11.25" Y="1.75" Width="3" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="10.5" Y="3.75" />
+        <Point X="10.5" Y="3.375" />
+        <Point X="11.25" Y="3.375" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAQ=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\SettlementType.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.EditedSettlement">
+    <Position X="5.25" Y="0.5" Width="2.75" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" ManuallyRouted="true" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="9.25" Y="4.25" />
+        <Point X="8.333" Y="4.25" />
+        <Point X="8.333" Y="3.312" />
+        <Point X="8" Y="3.312" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>BAAAAAAAggAAAAAAABAAAAAAACCAAAAAEQACAAAAAAY=</HashCode>
+      <FileName>BusinessModel\MainEntities\EditedSettlement.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.MapPoint">
+    <Position X="8.25" Y="0.5" Width="2.75" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true">
+      <Path>
+        <Point X="9.625" Y="3.75" />
+        <Point X="9.625" Y="3.146" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAgAAAAAQoAAAAAAAAACAAAAAAAQAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\MainEntities\MapPoint.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Orientation="Right" Position="0.1" />
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.Settlement">
+    <Position X="5.25" Y="4.5" Width="3" />
+    <TypeIdentifier>
+      <HashCode>BAAAACAAAAAABAAAABAAAAAAACAAAAAAAAACAADAAAA=</HashCode>
+      <FileName>BusinessModel\MainEntities\Settlement.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.RDF.Queries">
+    <Position X="23.75" Y="1.75" Width="2.75" />
+    <TypeIdentifier>
+      <HashCode>IAAEAAAAACAEAgAAAAAAMAAAAAAAIAAAAIAAACAAAAA=</HashCode>
+      <FileName>BusinessModel\RDF\Queries.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.RDF.RDFQuery">
+    <Position X="21" Y="1.75" Width="2.25" />
+    <Compartments>
+      <Compartment Name="Nested Types" Collapsed="false" />
+    </Compartments>
+    <NestedTypes>
+      <Enum Name="ModelData.BusinessModel.RDF.RDFQuery.QueryType">
+        <TypeIdentifier>
+          <NewMemberFileName>BusinessModel\RDF\RDFQuery.cs</NewMemberFileName>
+        </TypeIdentifier>
+      </Enum>
+    </NestedTypes>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\RDF\RDFQuery.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.Coordinate">
+    <Position X="10.25" Y="8" Width="2.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAEAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\Coordinate.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.InstantTime">
+    <Position X="5.25" Y="8" Width="2.5" />
+    <TypeIdentifier>
+      <HashCode>AAAEAAAABAAAAAAEAAAAAAAAAAAAAAAAAAACAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\InstantTime.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.Period">
+    <Position X="8.25" Y="8" Width="1.75" />
+    <TypeIdentifier>
+      <HashCode>AAIAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\Period.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.UnitOfWork.Context">
+    <Position X="24.25" Y="5.5" Width="3" />
+    <TypeIdentifier>
+      <HashCode>AAIAAQAAIAAAAAAAAIAAIACAAAAAIAAAACAAAAAAABA=</HashCode>
+      <FileName>BusinessModel\UnitOfWork\Context.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.WebModel.Model">
+    <Position X="20.75" Y="6.25" Width="2.75" />
+    <TypeIdentifier>
+      <HashCode>AAAAIAAAAABAAAAAAAAAAAAACACEAAAAAAACAAAAAAA=</HashCode>
+      <FileName>WebModel\Model.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.WebModel.WebDataManager">
+    <Position X="17.5" Y="5.5" Width="3" />
+    <TypeIdentifier>
+      <HashCode>AAEAAAQAAAAAAQBAAAAAAAAAAABAIAAAAAAKAAAAgAA=</HashCode>
+      <FileName>WebModel\WebDataManager.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="Tools.Config.ConfigManager">
+    <Position X="1.25" Y="1.75" Width="2.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.IndexAttrib">
+    <Position X="3.25" Y="0.75" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.SerializeService">
+    <Position X="1.5" Y="7" Width="2.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Users.User">
+    <Position X="1.25" Y="0.5" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Users.UserContext">
+    <Position X="2.25" Y="3.25" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Word.DocXWrite">
+    <Position X="1.25" Y="5.5" Width="2.75" />
+    <TypeIdentifier />
+  </Class>
+  <Interface Name="ModelData.BusinessModel.BaseAndInterface.I_URLcs">
+    <Position X="11.25" Y="6.25" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\BaseAndInterface\I_URLcs.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="Tools.I_MySerializable">
+    <Position X="8.5" Y="6.25" Width="2.5" />
+    <TypeIdentifier />
+  </Interface>
+  <Interface Name="System.IComparable&lt;T&gt;">
+    <Position X="12.75" Y="0.5" Width="1.5" />
+    <TypeIdentifier />
+  </Interface>
+  <Font Name="Segoe UI" Size="9" />
+</ClassDiagram>
\ No newline at end of file
diff --git a/ModelData/Diagrams/ClassDiagram_pic8.cd b/ModelData/Diagrams/ClassDiagram_pic8.cd
new file mode 100644
index 0000000..7aa06a7
--- /dev/null
+++ b/ModelData/Diagrams/ClassDiagram_pic8.cd
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="NameAndType">
+  <Class Name="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" Collapsed="true">
+    <Position X="7.5" Y="2.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>EAAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\BaseAndInterface\BaseOntologyEntity.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Orientation="Bottom" Position="0.589" Collapsed="true" />
+  </Class>
+  <Class Name="ModelData.BusinessModel.BusinessDataManager" Collapsed="true">
+    <Position X="10" Y="6" Width="1.75" />
+    <TypeIdentifier>
+      <HashCode>IAQEIABAAAAAAQBAAAIAAAAAAABAIAAAAAACACAAhBA=</HashCode>
+      <FileName>BusinessModel\BusinessDataManager.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.Founder" Collapsed="true">
+    <Position X="5.25" Y="4.25" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="7.5" Y="2.5" />
+        <Point X="7.125" Y="2.5" />
+        <Point X="7.125" Y="4.562" />
+        <Point X="6.75" Y="4.562" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAACAAAAAAAQAACAAAAAAAAAAAAAACAA=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\Founder.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.Region" Collapsed="true">
+    <Position X="5.25" Y="2.75" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true">
+      <Path>
+        <Point X="7.5" Y="2.5" />
+        <Point X="7.125" Y="2.5" />
+        <Point X="7.125" Y="3.096" />
+        <Point X="6.75" Y="3.096" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\Region.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.ExtraEntities.SettlementType" Collapsed="true">
+    <Position X="5.25" Y="3.5" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="7.5" Y="2.5" />
+        <Point X="7.125" Y="2.5" />
+        <Point X="7.125" Y="3.875" />
+        <Point X="6.75" Y="3.875" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAQ=</HashCode>
+      <FileName>BusinessModel\ExtraEntities\SettlementType.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.EditedSettlement" Collapsed="true">
+    <Position X="5.25" Y="0.5" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" ManuallyRouted="true" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="7.5" Y="2.5" />
+        <Point X="7.125" Y="2.5" />
+        <Point X="7.125" Y="1.011" />
+        <Point X="6.75" Y="1.011" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>BAAAAAAAggAAAAAAABAAAAAAACCAAAAAEQACAAAAAAY=</HashCode>
+      <FileName>BusinessModel\MainEntities\EditedSettlement.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.MapPoint" Collapsed="true">
+    <Position X="5.25" Y="1.25" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true">
+      <Path>
+        <Point X="7.5" Y="2.5" />
+        <Point X="7.125" Y="2.5" />
+        <Point X="7.125" Y="1.596" />
+        <Point X="6.75" Y="1.596" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAgAAAAAQoAAAAAAAAACAAAAAAAQAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\MainEntities\MapPoint.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Orientation="Left" Position="0.328" Collapsed="true" />
+  </Class>
+  <Class Name="ModelData.BusinessModel.MainEntities.Settlement" Collapsed="true">
+    <Position X="5.25" Y="2" Width="1.5" />
+    <InheritanceLine Type="ModelData.BusinessModel.BaseAndInterface.BaseOntologyEntity" FixedFromPoint="true">
+      <Path>
+        <Point X="7.5" Y="2.5" />
+        <Point X="7.125" Y="2.5" />
+        <Point X="7.125" Y="2.25" />
+        <Point X="6.75" Y="2.25" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>BAAAACAAAAAABAAAABAAAAAAACAAAAAAAAACAADAAAA=</HashCode>
+      <FileName>BusinessModel\MainEntities\Settlement.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.RDF.Queries" Collapsed="true">
+    <Position X="10.25" Y="3.75" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>IAAEAAAAACAEAgAAAAAAMAAAAAAAIAAAAIAAACAAAAA=</HashCode>
+      <FileName>BusinessModel\RDF\Queries.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.RDF.RDFQuery" Collapsed="true">
+    <Position X="10.25" Y="4.5" Width="1.25" />
+    <Compartments>
+      <Compartment Name="Nested Types" Collapsed="false" />
+    </Compartments>
+    <NestedTypes>
+      <Enum Name="ModelData.BusinessModel.RDF.RDFQuery.QueryType">
+        <TypeIdentifier>
+          <NewMemberFileName>BusinessModel\RDF\RDFQuery.cs</NewMemberFileName>
+        </TypeIdentifier>
+      </Enum>
+    </NestedTypes>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\RDF\RDFQuery.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.Coordinate" Collapsed="true">
+    <Position X="5.25" Y="6.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAEAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\Coordinate.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.InstantTime" Collapsed="true">
+    <Position X="5.25" Y="5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAEAAAABAAAAAAEAAAAAAAAAAAAAAAAAAACAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\InstantTime.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.Tools.Period" Collapsed="true">
+    <Position X="5.25" Y="5.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAIAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\Tools\Period.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.BusinessModel.UnitOfWork.Context" Collapsed="true">
+    <Position X="10.25" Y="5.25" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>AAIAAQAAIAAAAAAAAIAAIACAAAAAIAAAACAAAAAAABA=</HashCode>
+      <FileName>BusinessModel\UnitOfWork\Context.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.WebModel.Model" Collapsed="true">
+    <Position X="8.25" Y="5" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>AAAAIAAAAABAAAAAAAAAAAAACACEAAAAAAACAAAAAAA=</HashCode>
+      <FileName>WebModel\Model.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="ModelData.WebModel.WebDataManager" Collapsed="true">
+    <Position X="8.25" Y="6" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAEAAAQAAAAAAQBAAAAAAAAAAABAIAAAAAAKAAAAgAA=</HashCode>
+      <FileName>WebModel\WebDataManager.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="Tools.Config.ConfigManager" Collapsed="true">
+    <Position X="1.25" Y="1.75" Width="2.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.IndexAttrib" Collapsed="true">
+    <Position X="3.25" Y="0.75" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.SerializeService" Collapsed="true">
+    <Position X="1.5" Y="7" Width="2.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Users.User" Collapsed="true">
+    <Position X="1.25" Y="0.5" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Users.UserContext" Collapsed="true">
+    <Position X="2.25" Y="3.25" Width="1.5" />
+    <TypeIdentifier />
+  </Class>
+  <Class Name="Tools.Word.DocXWrite" Collapsed="true">
+    <Position X="1.25" Y="5.5" Width="2.75" />
+    <TypeIdentifier />
+  </Class>
+  <Interface Name="ModelData.BusinessModel.BaseAndInterface.I_URLcs" Collapsed="true">
+    <Position X="17.25" Y="0.5" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>BusinessModel\BaseAndInterface\I_URLcs.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="Tools.I_MySerializable">
+    <Position X="14.5" Y="0.5" Width="2.5" />
+    <TypeIdentifier />
+  </Interface>
+  <Interface Name="System.IComparable&lt;T&gt;">
+    <Position X="12.75" Y="0.5" Width="1.5" />
+    <TypeIdentifier />
+  </Interface>
+  <Font Name="Segoe UI" Size="9" />
+</ClassDiagram>
\ No newline at end of file
diff --git a/ModelData/ModelData.csproj b/ModelData/ModelData.csproj
index 7f3d64e..0c4c118 100644
--- a/ModelData/ModelData.csproj
+++ b/ModelData/ModelData.csproj
@@ -62,8 +62,10 @@
     <Compile Include="BusinessModel\ExtraEntities\Founder.cs" />
     <Compile Include="BusinessModel\ExtraEntities\Region.cs" />
     <Compile Include="BusinessModel\ExtraEntities\SettlementType.cs" />
+    <Compile Include="BusinessModel\ExtraEntities\Source.cs" />
     <Compile Include="BusinessModel\MainEntities\EditedSettlement.cs" />
     <Compile Include="BusinessModel\MainEntities\Settlement.cs" />
+    <Compile Include="BusinessModel\MainEntities\SettlementName.cs" />
     <Compile Include="BusinessModel\RDF\Queries.cs" />
     <Compile Include="BusinessModel\RDF\RDFQuery.cs" />
     <Compile Include="BusinessModel\Tools\Coordinate.cs" />
@@ -77,7 +79,10 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
-    <None Include="BusinessModel\ClassDiagram1.cd" />
+    <None Include="Diagrams\ClassDiagram_pic8.cd" />
+    <None Include="Diagrams\ClassDiagram_pic7.cd" />
+    <None Include="Diagrams\ClassDiagram_pic4.cd" />
+    <None Include="Diagrams\ClassDiagram_pic5.cd" />
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
diff --git a/ModelData/WebModel/Model.cs b/ModelData/WebModel/Model.cs
index a15b8cd..60b377f 100644
--- a/ModelData/WebModel/Model.cs
+++ b/ModelData/WebModel/Model.cs
@@ -11,7 +11,7 @@ namespace ModelData.WebModel
     public class Model
     {
         public MapPoint[] arraySettlements { set; get; }
-        public string[] arrayNameSettlements { set; get; }
+        public SettlementName[] arrayNameSettlements { set; get; }
         public string[] arrayNameTypes { set; get; }
 		public string[] arrayNameRegions { set; get; }
 		public Dictionary<string, int> ZoomLevel { private set; get; }
diff --git a/ModelData/WebModel/WebDataManager.cs b/ModelData/WebModel/WebDataManager.cs
index c0fb68f..8ca2a6f 100644
--- a/ModelData/WebModel/WebDataManager.cs
+++ b/ModelData/WebModel/WebDataManager.cs
@@ -64,9 +64,18 @@ namespace ModelData.WebModel
             Array.Sort(model.arrayNameRegions);
             temp.Clear();
 
+            
+            
+            List<SettlementName> temp2 = new List<SettlementName>(context.MapPoints.Count);
             foreach (var settlement in context.MapPoints)
-                temp.Add(settlement.Title);
-            model.arrayNameSettlements = temp.ToArray();
+            {
+                temp2.Add(new SettlementName()
+                {
+                    label = settlement.Title,
+                    value = settlement.URL
+                });
+            }
+            model.arrayNameSettlements = temp2.ToArray();
             //  Инициализация уровней приближения убрана в связи с тем, что не найдено решения для оптимального отображения на карте
             //  Вместо этого будут отображаться первые 40-50-100 самых крупных поселений (значение регулируется в JS коде)
             //  Для этого в c# коде производится сортировка списка поселений по количеству населения
diff --git a/Tools/Main/Translit.cs b/Tools/Main/Translit.cs
new file mode 100644
index 0000000..a401d3e
--- /dev/null
+++ b/Tools/Main/Translit.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using NickBuhro.Translit;
+
+namespace Tools
+{
+    public class Translit
+    {
+        static string TranslitFromRussian(string input)
+        {
+            return Transliteration.CyrillicToLatin(input, Language.Russian); ;
+        }
+    }
+}
diff --git a/Tools/packages.config b/Tools/packages.config
index 03660bd..a816661 100644
--- a/Tools/packages.config
+++ b/Tools/packages.config
@@ -2,4 +2,5 @@
 <packages>
   <package id="DocX" version="1.3.0" targetFramework="net47" />
   <package id="EPPlus" version="4.5.3.1" targetFramework="net47" />
+  <package id="NickBuhro.Translit" version="1.4.5" targetFramework="net47" />
 </packages>
\ No newline at end of file
diff --git a/Tools/Tools.csproj b/Tools/Tools.csproj
index 4ff2472..6eb51ee 100644
--- a/Tools/Tools.csproj
+++ b/Tools/Tools.csproj
@@ -53,6 +53,9 @@
     <Reference Include="EPPlus, Version=4.5.3.1, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
       <HintPath>..\packages\EPPlus.4.5.3.1\lib\net40\EPPlus.dll</HintPath>
     </Reference>
+    <Reference Include="NickBuhro.Translit, Version=1.4.5.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\NickBuhro.Translit.1.4.5\lib\net45\NickBuhro.Translit.dll</HintPath>
+    </Reference>
     <Reference Include="PresentationCore" />
     <Reference Include="System" />
     <Reference Include="System.configuration" />
@@ -74,6 +77,7 @@
     <Compile Include="Main\IndexAttribute.cs" />
     <Compile Include="Config\ConfigManager.cs" />
     <Compile Include="Interfaces\I_MySerializable.cs" />
+    <Compile Include="Main\Translit.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Main\SerializeService.cs" />
     <Compile Include="Users\User.cs" />
diff --git a/web-map/App_Data/pics/1.png b/web-map/App_Data/pics/1.png
new file mode 100644
index 0000000..aae6df7
Binary files /dev/null and b/web-map/App_Data/pics/1.png differ
diff --git a/web-map/App_Data/pics/10.png b/web-map/App_Data/pics/10.png
new file mode 100644
index 0000000..56f70f6
Binary files /dev/null and b/web-map/App_Data/pics/10.png differ
diff --git a/web-map/App_Data/pics/11.png b/web-map/App_Data/pics/11.png
new file mode 100644
index 0000000..7ae0e85
Binary files /dev/null and b/web-map/App_Data/pics/11.png differ
diff --git a/web-map/App_Data/pics/2.png b/web-map/App_Data/pics/2.png
new file mode 100644
index 0000000..1f8056c
Binary files /dev/null and b/web-map/App_Data/pics/2.png differ
diff --git a/web-map/App_Data/pics/3.png b/web-map/App_Data/pics/3.png
new file mode 100644
index 0000000..9f4d3b3
Binary files /dev/null and b/web-map/App_Data/pics/3.png differ
diff --git a/web-map/App_Data/pics/4.png b/web-map/App_Data/pics/4.png
new file mode 100644
index 0000000..2f37913
Binary files /dev/null and b/web-map/App_Data/pics/4.png differ
diff --git a/web-map/App_Data/pics/5.png b/web-map/App_Data/pics/5.png
new file mode 100644
index 0000000..b86667a
Binary files /dev/null and b/web-map/App_Data/pics/5.png differ
diff --git a/web-map/App_Data/pics/6.png b/web-map/App_Data/pics/6.png
new file mode 100644
index 0000000..bcea2d0
Binary files /dev/null and b/web-map/App_Data/pics/6.png differ
diff --git a/web-map/App_Data/pics/7.png b/web-map/App_Data/pics/7.png
new file mode 100644
index 0000000..fb07939
Binary files /dev/null and b/web-map/App_Data/pics/7.png differ
diff --git a/web-map/App_Data/pics/8.png b/web-map/App_Data/pics/8.png
new file mode 100644
index 0000000..2e8d5a2
Binary files /dev/null and b/web-map/App_Data/pics/8.png differ
diff --git a/web-map/App_Data/pics/9.png b/web-map/App_Data/pics/9.png
new file mode 100644
index 0000000..31aec3d
Binary files /dev/null and b/web-map/App_Data/pics/9.png differ
diff --git a/web-map/ClassDiagram1.cd b/web-map/ClassDiagram1.cd
new file mode 100644
index 0000000..74e27a7
--- /dev/null
+++ b/web-map/ClassDiagram1.cd
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="NameAndType">
+  <Class Name="web_map.Controllers.AccountController" Collapsed="true">
+    <Position X="3.75" Y="4.25" Width="1.5" />
+    <InheritanceLine Type="web_map.Controllers.BaseController" FixedFromPoint="true">
+      <Path>
+        <Point X="5.688" Y="3.441" />
+        <Point X="5.688" Y="4.596" />
+        <Point X="5.25" Y="4.596" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAACA=</HashCode>
+      <FileName>Controllers\AccountController.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="web_map.Controllers.BaseController" Collapsed="true">
+    <Position X="5.5" Y="2.75" Width="1.25" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Controllers\BaseController.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="web_map.Controllers.HomeController" Collapsed="true">
+    <Position X="3.75" Y="3.5" Width="1.5" />
+    <InheritanceLine Type="web_map.Controllers.BaseController" FixedFromPoint="true">
+      <Path>
+        <Point X="5.688" Y="3.441" />
+        <Point X="5.688" Y="3.846" />
+        <Point X="5.25" Y="3.846" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
+      <FileName>Controllers\HomeController.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="web_map.Controllers.MapAPIController" Collapsed="true">
+    <Position X="3.75" Y="5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAEAAAAAAAAAAAAAAAABAAAAAAAAAAAACAAAAAAAgAA=</HashCode>
+      <FileName>Controllers\MapAPIController.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="web_map.Controllers.MapController" Collapsed="true">
+    <Position X="3.75" Y="2.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AACAAAAAABAAAAAAAAAAAACABAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Controllers\MapController.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="web_map.Models.AuthModel">
+    <Position X="8.5" Y="0.75" Width="1.75" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACAAAQAEAAAAA=</HashCode>
+      <FileName>Models\AuthModel.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Font Name="Segoe UI" Size="9" />
+</ClassDiagram>
\ No newline at end of file
diff --git a/web-map/Content/delete.png b/web-map/Content/delete.png
new file mode 100644
index 0000000..48f1a6c
Binary files /dev/null and b/web-map/Content/delete.png differ
diff --git a/web-map/Content/Site.css b/web-map/Content/Site.css
index 28baf59..109146b 100644
--- a/web-map/Content/Site.css
+++ b/web-map/Content/Site.css
@@ -120,9 +120,9 @@ a[aria-expanded="true"]::before {
 
 
 ul ul a {
-    font-size: 0.9em !important;
+    /*font-size: 0.9em !important;
     padding-left: 30px !important;
-    background: #6d7fcc;
+    background: #6d7fcc;*/
 }
 
 ul.CTAs {
@@ -195,3 +195,47 @@ a.article, a.article:hover {
 #sidebar-right-text .sidebar-right-text-element {
     padding: 0.5rem 0.5rem;
 }
+
+/* цвета для страницы-справки, для выделения текста описания изображений*/
+
+#faq-text {
+    word-wrap: break-word;
+    /*padding: 0.5rem 0.5rem;*/
+}
+
+#faq-text .red {
+    color: #ED1C24;
+}
+
+#faq-text .orange {
+    color: #FF7F27;
+}
+
+#faq-text .yellow {
+    color: #FFF200;
+}
+
+#faq-text .dark-blue {
+    color: #3F48CC;
+}
+
+#faq-text .purple {
+    color: #A349A4;
+}
+
+#faq-text .blue {
+    color: #00A2E8;
+}
+
+#faq-text .green {
+    color: #22B14C;
+}
+
+#faq-text .light-green {
+    color: #B5E61D;
+}
+
+#faq-text .back-ground {
+    font-size: 120%;
+    background: #C3C3C3;
+}
\ No newline at end of file
diff --git a/web-map/Controllers/HomeController.cs b/web-map/Controllers/HomeController.cs
index afc3531..169479f 100644
--- a/web-map/Controllers/HomeController.cs
+++ b/web-map/Controllers/HomeController.cs
@@ -25,16 +25,13 @@ namespace web_map.Controllers
             return View();
         }
 
-        public ActionResult GetDoc(string fileName)
+        public ActionResult Image(string id)
         {
-            string path = Server.MapPath("~/App_Data") + "/html/index.html";
-            System.IO.FileInfo file = new System.IO.FileInfo(path);
-            if (file.Exists)
-                return File(file.FullName, "text/plain", file.Name);
-            return Content("");
+            var dir = Server.MapPath("~/App_Data") + @"\pics\";
+            var path = System.IO.Path.Combine(dir, id + ".png"); //validate the path for security or use other means to generate the path.
+            return base.File(path, "image/jpeg");
         }
 
-
         //public FileStreamResult GetFile(string URL)
         //{
         //    var stream = serialazService.EntitysToDocx(new object[3]);
diff --git a/web-map/Controllers/MapController.cs b/web-map/Controllers/MapController.cs
index d97cd34..b79110a 100644
--- a/web-map/Controllers/MapController.cs
+++ b/web-map/Controllers/MapController.cs
@@ -39,6 +39,10 @@ namespace web_map.Controllers
         [HttpPost]
         public JsonResult ImportForm(string formData, string type)
         {
+            if (User.Identity.IsAuthenticated)
+            {
+
+            }
             WebDataManager webData = WebDataManager.Get();
 
             var inputArray = formData.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
@@ -56,6 +60,28 @@ namespace web_map.Controllers
             return Json("Import success", JsonRequestBehavior.AllowGet);
         }
 
+        [HttpPost]
+        public JsonResult DeleteSettlement(string type, string url)
+        {
+            if (User.Identity.IsAuthenticated)
+            {
+
+            }
+            WebDataManager webData = WebDataManager.Get();
+
+            string result = "";
+            if (new Random().Next(2) == 0)
+            {
+                result = "Success";
+            }
+            else
+            {
+                result = "Failure|ErrorMessage";
+            }
+
+            return Json(result, JsonRequestBehavior.AllowGet);
+        }
+
         [HttpGet]
         public JsonResult GetAllOfType(string type)
         {
diff --git a/web-map/Scripts/SiteScripts/AjaxQuery.js b/web-map/Scripts/SiteScripts/AjaxQuery.js
index d6579cb..60cac4f 100644
--- a/web-map/Scripts/SiteScripts/AjaxQuery.js
+++ b/web-map/Scripts/SiteScripts/AjaxQuery.js
@@ -111,7 +111,7 @@ function GetDate(load = false) {
             document.getElementById('slider-label-min').innerHTML = '<b>' + MinYear + '</b>';
             document.getElementById('slider-label-max').innerHTML = '<b>' + MaxYear + '</b>';
 
-            if (load == true) {
+            if (load === true) {
                 SliderInit();
                 GetAllPoints(CurrentMinYear, CurrentMaxYear);
             }
@@ -140,7 +140,7 @@ function ExportData(type) {
 }
 
 function ImportForm(formData, type) {
-    $.ajax({
+    return $.ajax({
         url: '/Map/ImportForm',
         type: 'POST',
         // из-за этой строки была ошибка 500//contentType: "application/json; charset=utf-8",
@@ -151,7 +151,29 @@ function ImportForm(formData, type) {
             type: type
         },
         success: function (data) {
-            console.log(data);
+        },
+
+        error: function (response) {
+            console.log(response.responseText);
+            alert('Ошибка. Не удалось получить данные от сервера');
+        }
+    });
+}
+
+//Получить массив всех точек поселений от сервера
+function DeleteSettlement(type, url) {
+    return $.ajax({
+        url: '/Map/DeleteSettlement',
+        type: 'POST',
+        //contentType: "application/json; charset=utf-8",
+        dataType: 'json',
+        cache: false,
+        //Параметр контроллеру
+        data: {
+            type: type,
+            url: url
+        },
+        success: function (data) {
         },
 
         error: function (response) {
diff --git a/web-map/Scripts/SiteScripts/Events.js b/web-map/Scripts/SiteScripts/Events.js
index c719795..0d25bf5 100644
--- a/web-map/Scripts/SiteScripts/Events.js
+++ b/web-map/Scripts/SiteScripts/Events.js
@@ -5,17 +5,19 @@ function SliderOnFinishMoving(data) {
     GetAllPoints(CurrentMinYear, CurrentMaxYear);
 }
 
-function OnFindNameUsing(name) {
+function OnFindNameUsing(url) {
     //  Добавить в коллекцию, чтобы гарантировать что данный объект появится на карте
-    Collections.FindName = name;
+    Collections.FindName = url;
     //  Найти метку в коллекции всех меток
-    var placemark = Collections.AllGeoObjects.search('options.Name = "' + name + '"').get(0);
-    //  Установить новый цвет
-    placemark.options.set('preset', 'islands#greenStretchyIcon');
-    //  Отцентрировать карту и приблизить
-    Map.setCenter(placemark.geometry.getCoordinates(), 13);
-    //  Через 5 секунд вернуть обратно прежний цвет
-    setTimeout(changePlacemarkPreset, 5000, placemark, 'islands#redStretchyIcon');
+    var placemark = Collections.AllGeoObjects.search('options.URL = "' + url + '"').get(0);
+    if (placemark !== null) {
+        //  Установить новый цвет
+        placemark.options.set('preset', 'islands#greenStretchyIcon');
+        //  Отцентрировать карту и приблизить
+        Map.setCenter(placemark.geometry.getCoordinates(), 13);
+        //  Через 5 секунд вернуть обратно прежний цвет
+        setTimeout(changePlacemarkPreset, 5000, placemark, 'islands#redStretchyIcon');
+    }
 }
 
 function changePlacemarkPreset(placemark, preset) {
@@ -25,7 +27,6 @@ function changePlacemarkPreset(placemark, preset) {
 //  Заполнение массивов из исходного (response.data)
 //  В соответствии с параметрами поселения
 function FillDataArrays(fromData, isNeedSelect = false) {
-
     Collections.AllGeoObjects.removeFromMap(Map);
 
     Collections.All = new Array();
@@ -45,7 +46,7 @@ function FillDataArrays(fromData, isNeedSelect = false) {
     filterCollectionInit(Collections.Filters.Region, Collections.Regions, 'filterGroupRegions', 'countRegions');
 
     Collections.All = fromData.arraySettlements;
-    LoadCollection(fromData.arraySettlements, isNeedSelect, );
+    LoadCollection(fromData.arraySettlements, isNeedSelect);
 }
 
 //  Функция заполнения Яндекс-коллекций Яндекс-объектами из JSON массива
@@ -60,7 +61,6 @@ function LoadCollection(fromData, isNeedSelect = false) {
 //  Согласно текущим установленным фильтрам собрать нужный массив данных
 function SelectDataFromArrays() {
     var insideMap = Collections.AllGeoObjects.searchInside(Map);
-
     var afterFilters = new ymaps.geoQuery();
     if (!Collections.isNeedFilters) 
         afterFilters = insideMap;
@@ -138,7 +138,7 @@ function CreateYandexPlacemark(fromElement) {
         }
         else
             //  Панель есть. Выбор, нужно ли её скрывать
-            if (targetURL == document.getElementById('settlement-url').innerHTML) {
+            if (targetURL === document.getElementById('settlement-url').innerHTML) {
                 $('#sidebar-left, #content').addClass('active');
                 $('.collapse.in').toggleClass('in');
                 $('a[aria-expanded=true]').attr('aria-expanded', 'false');
@@ -170,7 +170,7 @@ function compareValues(key, order = 'asc') {
             comparison = -1;
         }
         return (
-            (order == 'desc') ? (comparison * -1) : comparison
+            (order === 'desc') ? (comparison * -1) : comparison
         );
     };
 }
@@ -265,7 +265,7 @@ function checkBoxChange(e) {
         //  пользователь убрал отметку экспорта. удаляем поселение из коллекции
         //  но отрисовку пока не делаем, вдруг он захочет вернуть отметку (т.е. добавить в экспорт)
         Collections.Export = jQuery.grep(Collections.Export, function (element) {
-            return element.url != e.id;
+            return element.url !== e.id;
         });
     }
 }
@@ -276,7 +276,7 @@ function addToExport() {
     element.url = $("#settlement-url")[0].innerHTML;
 
     //  нельзя добавить уже добавленное поселение
-    if (!Collections.Export.some(currentValue => currentValue.url == element.url)){
+    if (!Collections.Export.some(currentValue => currentValue.url === element.url)){
         Collections.Export.push(element);
         printExportCollection();
     }
@@ -375,7 +375,7 @@ function checkOriginImportForm() {
     }
 
     var year = form_data["hasBeginning"].val();
-    if (year != '') {
+    if (year !== '') {
         var yearValidate = /^\d{1,4}$/;
         if (!yearValidate.test(year)) {
             //  значение не соответствует шаблону
@@ -397,7 +397,7 @@ function checkOriginImportForm() {
         for (key in form_data) {
             //  если поле это url
             //  ему нужна доп проверка
-            if (key == 'url') {
+            if (key === 'url') {
                 y += '|' + key + '~';
                 //  если НЕ установлен флаг "только чтение", т.е. пользователь ВВЕЛ СВОЙ url
                 if (!form_data[key][0].readOnly)
@@ -445,7 +445,7 @@ function checkEditedImportForm() {
     
 
     var year = form_data["hasBeginning"].val();
-    if (year != '') {
+    if (year !== '') {
         var yearValidate = /^\d{1,4}$/;
         if (!yearValidate.test(year)) {
             //  значение не соответствует шаблону
@@ -466,7 +466,7 @@ function checkEditedImportForm() {
     var popMale = form_data["populationMale"].val();
     var popFemale = form_data["populationFemale"].val();
 
-    if (popAll != '') {
+    if (popAll !== '') {
         if (!digitValidate.test(popAll)) {
             //  значение не соответствует шаблону
             //  вывод ошибки
@@ -475,7 +475,7 @@ function checkEditedImportForm() {
         }
     }
 
-    if (popMale != '') {
+    if (popMale !== '') {
         if (!digitValidate.test(popMale)) {
             //  значение не соответствует шаблону
             //  вывод ошибки
@@ -484,7 +484,7 @@ function checkEditedImportForm() {
         }
     }
 
-    if (popFemale != '') {
+    if (popFemale !== '') {
         if (!digitValidate.test(popFemale)) {
             //  значение не соответствует шаблону
             //  вывод ошибки
@@ -509,14 +509,20 @@ function checkEditedImportForm() {
 
 function importFormSubmit(contentType) {
     var data = '';
-    if (contentType == 'origin-import') {
+    if (contentType === 'origin-import') {
         data = checkOriginImportForm();
     }
-    else if (contentType == 'edited-import') {       
+    else if (contentType === 'edited-import') {       
         data = checkEditedImportForm();
     }
-    if (data != null)
-        ImportForm(data, contentType);    
+    if (data !== null) {
+        $.when(ImportForm(data, contentType)).done(function (data) {
+            console.log(data);
+            var text = '';
+            $('#modal-result-text').html(data);
+            $('#resultDeleteModal').modal();
+        });
+    } 
 }
 
 
diff --git a/web-map/Scripts/SiteScripts/Init.js b/web-map/Scripts/SiteScripts/Init.js
index 0341071..51e4622 100644
--- a/web-map/Scripts/SiteScripts/Init.js
+++ b/web-map/Scripts/SiteScripts/Init.js
@@ -71,7 +71,7 @@ function YandexMapInit()
                 );
 
             // Найдём область по её iso коду.
-            var region = result.features.filter(function (feature) { return feature.properties.iso3166 == 'RU-SAR'; })[0];
+            var region = result.features.filter(function (feature) { return feature.properties.iso3166 === 'RU-SAR'; })[0];
             // Добавим координаты этой области в полигон, который накрывает весь мир.
             // В полигоне образуется полость, через которую будет видно заданную область.
             var masks = region.geometry.coordinates;
@@ -116,7 +116,7 @@ function SliderInit() {
     //  Обработчик кнопки поиска по имени
     $('#buttonSearch').bind('click', function () {
         var resultName = document.getElementById('inputName').value;
-        if (resultName.length != 0)
+        if (resultName.length !== 0)
             OnFindNameUsing(resultName);
     });
 
@@ -154,7 +154,7 @@ function SliderInit() {
     
     // Кнопка экспорта в word
     $('#export-to-word').bind('click', function () {
-        if (Collections.Export != null && Collections.Export.length > 0) {            
+        if (Collections.Export !== null && Collections.Export.length > 0) {            
             ExportData('word');
         }
             
@@ -162,7 +162,7 @@ function SliderInit() {
 
     // Кнопка экспорта в excel
     $('#export-to-excel').bind('click', function () {
-        if (Collections.Export != null && Collections.Export.length > 0) {
+        if (Collections.Export !== null && Collections.Export.length > 0) {
             ExportData('excel');
         }
     });   
@@ -187,28 +187,32 @@ function AutoCompleteInit(data) {
         source: function (request, response) {
             var term = request.term;
             var pattern = new RegExp("^" + term, "i");
-
             var results = $.map(data, function (elem) {
-                if (pattern.test(elem)) {
-                    return elem;
+                if (pattern.test(elem.label)) {
+                    return {
+                        label: elem.label,
+                        value: elem.value
+                    };
                 }
-            })
+            });        
             response(results.slice(0, 10));
         },
         minLength: 2,
         delay: 300,
-        select: function(event, ui) {
-            OnFindNameUsing(ui.item.value)
+        select: function (event, ui) {         
+            event.preventDefault();
+            $('.ui-autocomplete-input').val(ui.item.label);
+            OnFindNameUsing(ui.item.value);
         }
     });}
 
 function filterCollectionInit(filterCollection, fromData, groupID, header) {
     var template = '<li class="list-group-item p-0"><div class="input-group"><div class="input-group-prepend"><div class="input-group-text"><input type="checkbox" checked onchange="FUNC(this)"></div></div><span class="form-control" data-toggle="tooltip" data-placement="top" title="NAME">NAME</span></div></li>';
-    if (groupID == 'filterGroupTypes') {
-        template = template.replace(/FUNC/g, 'filterTypeChange')
+    if (groupID === 'filterGroupTypes') {
+        template = template.replace(/FUNC/g, 'filterTypeChange');
     }
-    else if (groupID == 'filterGroupRegions'){
-        template = template.replace(/FUNC/g, 'filterRegionChange')
+    else if (groupID === 'filterGroupRegions'){
+        template = template.replace(/FUNC/g, 'filterRegionChange');
     }
     var text = '';
     fromData.forEach(function (element) {
diff --git a/web-map/Scripts/SiteScripts/Output.js b/web-map/Scripts/SiteScripts/Output.js
index 04c1740..b0e6194 100644
--- a/web-map/Scripts/SiteScripts/Output.js
+++ b/web-map/Scripts/SiteScripts/Output.js
@@ -2,7 +2,7 @@
 function PrintInfoAboutSettlement(info)
 {
     function makeButton(buttonHTML, type, id) {
-        if (buttonHTML == '')
+        if (buttonHTML === '')
             return '';
         return buttonHTML.replace(/_ID_/g, id).replace(/_TYPE_/g, type);
     }
@@ -25,45 +25,52 @@ function PrintInfoAboutSettlement(info)
     var text = '<div class="sidebar-left-text-element">';
     text += makeButton(editButtonText, 'constInfo', 'editConstInfoButton');
     text += '<p>' + 'Координаты: ' + info.Coordinate.Lat + ' ' + info.Coordinate.Long + '</p>';
-    if (info.Founder != null)
+    if (info.Founder !== null)
         text += '<p>' + 'Основатель: ' + info.Founder + '</p>';
 
-    if (info.Legend != null)
+    if (info.Legend !== null)
     {
         //text += '<p>' + 'Легенда:</p>';
         //  тут часть текста ("показать") выделяется другим цветом
         text += '<div class="hideLine"><label for="hideLine1">Легенда: <span style="color: #32CD32">[показать]</span></label><input type="checkbox" id="hideLine1"/>';
         text += '<p class="content">' + info.Legend + '</p></div>';
     }
-    if (info.hasBeginning != null)
+    if (info.hasBeginning !== null)
         text += '<p>' + 'Время основания: ' + info.hasBeginning + '</p>';
     var i = 0;
     text += '</div>'; 
     text += '<hr style="border: none; background-color: #32CD32; color: #32CD32; height: 2px;">';
-    if (info.EditedSettlements != null)
+    if (info.EditedSettlements !== null)
         info.EditedSettlements.forEach(function (element) {
             text += '<div class="sidebar-left-text-element">';
             text += makeButton(editButtonText, 'editInfo', 'editEditInfoButton_' + i++);
             Collections.CurrentSettlement.editInfo.push(new Object(element));
 
-            if (element.PopulationAll != null)
+            if (element.PopulationAll !== null)
                 text += '<p>' + 'Количество населения: ' + element.PopulationAll + '</p>';
-            if (element.PopulationFemales != null)
+            if (element.PopulationFemales !== null)
                 text += '<p>' + 'Количество мужского населения: ' + element.PopulationFemales + '</p>';
-            if (element.PopulationMales != null)
+            if (element.PopulationMales !== null)
                 text += '<p>' + 'Количество женского населения: ' + element.PopulationMales + '</p>';
-            if (element.Region != null)
+            if (element.Region !== null)
                 text += '<p>' + 'Регион: ' + element.Region.Title + '</p>';
-            if (element.Type != null)
+            if (element.Type !== null)
                 text += '<p>' + 'Тип поселения: ' + element.Type.Title + '</p>';
-            if (element.Title != null)
+            if (element.Title !== null)
                 text += '<p>' + 'Название поселения: ' + element.Title + '</p>';
 
             text += '<p>' + 'Год: ' + element.hasBeginning.Year + '</p>';
-            if (element.Source.includes("www.") || element.Source.includes("http"))
-                text += '<p>Источник: <a href="' + element.Source + '" target="_blank">ссылка</a></p>';
-            else 
-                text += '<p>Источник: ' + element.Source + '</p>';
+
+            text += '<p>Источник: ' + element.Source.Title + '</p>';
+            text += '<p>Доступ: ';
+            element.Source.URLs.forEach(function (_url) {
+                if (_url.includes("www.") || _url.includes("http"))
+                    text += '<a href="' + _url + '" target="_blank">ссылка</a> ';
+                else 
+                    text += _url + ' ';
+            });
+            if (element.Source.Auther !== null && element.Source.Auther !== '')
+                text += '<p>' + 'Автор источника: ' + element.Source.Auther + '</p>';
 
             text += '</div>';
         });    
@@ -89,7 +96,7 @@ function printExportCollection() {
 
 function printEditImportForm(what, id) {
     var element;
-    if (what == 'constInfo') {
+    if (what === 'constInfo') {
         element = Collections.CurrentSettlement[what];  
         //  вызов создания формы
         printImportAddingForm();
@@ -105,7 +112,7 @@ function printEditImportForm(what, id) {
 
         importSidebarButton();
     }
-    else if (what == 'editInfo') {
+    else if (what === 'editInfo') {
         importSidebarButton();
         element = Collections.CurrentSettlement.editInfo[id.split('_')[1]];
         //  вызов создания формы
@@ -114,27 +121,27 @@ function printEditImportForm(what, id) {
 
         $("input#import-edited-url").val(element.URL);
         $("input#import-edited-hasBeginning").val(element.hasBeginning.Year);
-        $("input#import-edited-source").val(element.Source);
+        $("input#import-edited-source").val(element.Source.Title);
 
-        if (element.PopulationAll != null)
+        if (element.PopulationAll !== null)
             $("input#import-edited-populationAll").val(element.PopulationAll);
-        if (element.PopulationFemales != null)
+        if (element.PopulationFemales !== null)
             $("input#import-edited-populationFemale").val(element.PopulationFemales);
-        if (element.PopulationMales != null)
+        if (element.PopulationMales !== null)
             $("input#import-edited-populationMale").val(element.PopulationMales);
-        if (element.Region != null) {
+        if (element.Region !== null) {
             //  костыль из-за того, что пытаемся выделить элемент списка, хотя список еще не был наполнен из-за асинхронности работы
             //  ставлю задержку, чтобы при первой загрузке списка выделение произошло чуть позже. при повторных нажатиях список уже загружен и работает мгновенно
-            if (Collections.AllRegions.length == 0)
+            if (Collections.AllRegions.length === 0)
                 setTimeout(function () { $("#import-edited-region option[value='" + element.Region.URL + "']").attr("selected", "selected"); }, 1000);
             $("#import-edited-region option[value='" + element.Region.URL + "']").attr("selected", "selected");
         }
-        if (element.Type != null) {
-            if (Collections.AllSettlementTypes.length == 0)
+        if (element.Type !== null) {
+            if (Collections.AllSettlementTypes.length === 0)
                 setTimeout(function () { $("#import-edited-type option[value='" + element.Type.URL + "']").attr("selected", "selected"); }, 1000);
             $("#import-edited-type option[value='" + element.Type.URL + "']").attr("selected", "selected");
         }
-        if (element.Title != null)
+        if (element.Title !== null)
             $("input#import-edited-title").val(element.Title);       
     }
     else { console.log('printEditImportForm(' + what + ',' + id + ')'); return; }
@@ -212,7 +219,7 @@ function printImportEditingForm() {
     }
 
     //  нужно выполнить загрузку ВСЕХ тиов поселений за все периоды и ВСЕХ регионов
-    if (Collections.AllSettlementTypes.length == 0) {
+    if (Collections.AllSettlementTypes.length === 0) {
         $.when(GetAllOfType('type')).done(function (data) {
             Collections.AllSettlementTypes = data;   
             loadSelect(Collections.AllSettlementTypes, 'import-edited-type');
@@ -222,7 +229,7 @@ function printImportEditingForm() {
         loadSelect(Collections.AllSettlementTypes, 'import-edited-type');
     }
 
-    if (Collections.AllRegions.length == 0) {
+    if (Collections.AllRegions.length === 0) {
         $.when(GetAllOfType('region')).done(function (data) {
             Collections.AllRegions = data;
             loadSelect(Collections.AllRegions, 'import-edited-region');
@@ -233,3 +240,54 @@ function printImportEditingForm() {
     }
 }
 
+function deleteElement(what, id) {
+    var element;
+    if (what === 'constInfo') {
+        element = Collections.CurrentSettlement[what];
+        $('#modal-delete-text').html('Подтвердите удаление основной информации [<a href="' + element.URL + '" target="_blank">url</a>]' + ' об основном поселении "' + element.Title + '". <h6 class="bg-warning text-dark">Вы уверены?</h6>');
+        $('#buttonConfirmDelete').data('type', what);
+        $('#buttonConfirmDelete').data('url', element.URL);
+        $('#buttonConfirmDelete').data('title', element.Title);
+        $('#confirmDeleteModal').modal();
+    }
+    else if (what === 'editInfo') {
+        element = Collections.CurrentSettlement.editInfo[id.split('_')[1]];        
+        var beforeName = Collections.AllGeoObjects.search('options.URL = "' + element.before + '"').get(0).options.get('Name');
+        $('#modal-delete-text').html('Подтвердите удаление дополнительной информации [<a href="' + element.URL + '" target="_blank">url</a>]' + ' об основном поселении "' + beforeName + '". <h6 class="bg-warning text-dark">Вы уверены?</h6>');
+        $('#buttonConfirmDelete').data('type', what);
+        $('#buttonConfirmDelete').data('url', element.URL);
+        $('#buttonConfirmDelete').data('title', beforeName);
+        $('#confirmDeleteModal').modal();
+    }
+    else { console.log('printEditImportForm(' + what + ',' + id + ')'); return; }
+}
+
+function startDelete(sender) {
+    var url = $(sender).data('url');
+    var type = $(sender).data('type');
+    var title = $(sender).data('title');
+
+    var text = '';
+    if (type === 'constInfo') {
+        text = 'Основное поселение [<a href="' + url + '" target="_blank">url</a>] "';
+    }
+    else {
+        text = 'Дополнительная информация [<a href="' + url + '" target="_blank">url</a>] об основном поселении "';
+    }
+    text += title + '" удалено ';
+
+    $.when(DeleteSettlement(type, url)).done(function (data) {
+        if (new RegExp("^Success", "i").test(data)) {
+            text += '<span class="bg-success text-dark">успешно</span>.';
+        }
+        else {
+            var error = data.split('|')[1];
+            text += '<span class="bg-danger text-white">с ошибкой</span>.<p class="bg-warning text-dark">' + error + '</p>';
+        }
+        $('#modal-result-text').html(text);
+        $('#resultDeleteModal').modal();
+    });
+    
+    
+}
+
diff --git a/web-map/Views/Home/FAQ.cshtml b/web-map/Views/Home/FAQ.cshtml
index 8f39475..96495ba 100644
--- a/web-map/Views/Home/FAQ.cshtml
+++ b/web-map/Views/Home/FAQ.cshtml
@@ -1,24 +1,269 @@
 @{
     ViewBag.Title = "Инструкция";
 }
+<div id="faq-text" class="text-left">
 
-<h1>Инструкции</h1>
-<h2>На этой странице будут инструкции по работе с картой</h2>
-<a href="~/Content/html/index.html">Doc</a>
+    <div id="accordion" class="mt-4">
 
-@Html.ActionLink("Инструкция", "Index", "Doc")
+        <!--Следующий раздел-->
+        <div class="card">
+            <div class="card-header" id="label-youtube">
+                <h5 class="mb-0">
+                    <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-youtube" aria-expanded="true" aria-controls="id-youtube">
+                        Демонстрация работы карты (видео)
+                    </button>
+                </h5>
+            </div>
+            <div id="id-youtube" class="collapse" aria-labelledby="label-youtube" data-parent="#accordion">
+                <div class="card-body">
+                    <!--Текст-->
+                    <div class="embed-responsive embed-responsive-16by9">
+                        <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/fjXPdFZwhzM" allowfullscreen></iframe>
+                    </div>
+                </div>
+            </div>
+        </div>
 
+        <!--Следующий раздел-->
+        <div class="card">
+            <div class="card-header" id="label-timeline">
+                <h5 class="mb-0">
+                    <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-timeline" aria-expanded="true" aria-controls="id-timeline">
+                        Временной промежуток
+                    </button>
+                </h5>
+            </div>
+            <div id="id-timeline" class="collapse" aria-labelledby="label-timeline" data-parent="#accordion">
+                <div class="card-body">
+                    <!--Текст-->
+                    <p>
+                        Основным инструментом выборки данных является фильтр выбора временного промежутка, осуществляемый с помощью двух инструментов:
+                    </p>
+                    <ul>
+                        <li>Слайдер временной линии (Timeline)</li>
+                        <li>Поля ввода конкретного года</li>
+                    </ul>
+                    <p>
+                        Цифрой <span class="font-weight-bold back-ground red">I</span> на рисунке обозначена временная линия (двухсторонний слайдер), позволяющая задавать временные границы с помощью «ползунков» <span class="font-weight-bold back-ground green">IV</span> и <span class="font-weight-bold back-ground green">V</span>.
+                        Цифрами <span class="font-weight-bold back-ground orange">II</span> и <span class="font-weight-bold back-ground orange">III</span> на рисунке обозначены временные границы – от наименьшего года, упоминаемого в онтологии, до текущего.
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "1"})" alt="Временная линия">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                    <br />
+                    <p>
+                        Можно воспользоваться вводом конкретного года как для нижней (цифра <span class="font-weight-bold back-ground red">I</span>), так и для верхней (цифра <span class="font-weight-bold back-ground red">II</span>) границы поиска, представленной на рисунке ниже.
+                        При вводе некорректного значения изменения не произойдут.
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "2"})" alt="Ввод конкретного года">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                </div>
+            </div>
+        </div>
 
-<!--
-<address>
-    One Microsoft Way<br />
-    Redmond, WA 98052-6399<br />
-    <abbr title="Phone">P:</abbr>
-    425.555.0100
-</address>
+        <!--Следующий раздел-->
+        <div class="card">
+            <div class="card-header" id="label-name-find">
+                <h5 class="mb-0">
+                    <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-name-find" aria-expanded="true" aria-controls="id-name-find">
+                        Поиск поселения по названию
+                    </button>
+                </h5>
+            </div>
+            <div id="id-name-find" class="collapse" aria-labelledby="label-name-find" data-parent="#accordion">
+                <div class="card-body">
+                    <!--Текст-->
+                    <p>
+                        Для поиска поселений по названию используется поле ввода, отмеченное цифрой <span class="font-weight-bold back-ground red">I</span> на рисунке ниже.
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "3"})" alt="Поиск по названию">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                    <p>
+                        При вводе значения в поле поиска, осуществляется подбор возможных поселений, название которых в начале содержит введенное значение (показано на рисунке ниже).
+                        Пользователю предоставляется возможность выбрать нужное поселение из выпадающего списка или выполнить поиск по нажатию на кнопку.
+                        При выборе поселения произойдет центрирование карты, и увеличится масштаб.
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "4"})" alt="Пример выпадающего списка при поиске поселений по названию">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                </div>
+            </div>
+        </div>
 
-<address>
-    <strong>Support:</strong>   <a href="mailto:Support@example.com">Support@example.com</a><br />
-    <strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
-</address>
--->
+        <!--Следующий раздел-->
+        <div class="card">
+            <div class="card-header" id="label-filters">
+                <h5 class="mb-0">
+                    <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-filters" aria-expanded="true" aria-controls="id-filters">
+                        Фильтрация поселений
+                    </button>
+                </h5>
+            </div>
+            <div id="id-filters" class="collapse" aria-labelledby="label-filters" data-parent="#accordion">
+                <div class="card-body">
+                    <!--Текст-->
+                    <p>
+                        Доступна фильтрация поселений на карте по отношению к определенному типу поселения и по вхождению в состав административных единиц. Группа фильтров представлена на рисунке ниже.
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "5"})" alt="Фильтры поселений">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                    <p>
+                        Цифрой <span class="font-weight-bold back-ground red">I</span> отмечена кнопка применения фильтров, а другая кнопка (цифра <span class="font-weight-bold back-ground orange">II</span>) отменит действие фильтров на карте и вернет списки в начальное состояние. 
+                        По умолчанию списки обоих фильтров находятся в свернутом состоянии и разворачиваются при нажатии на название. 
+                        Секция фильтра по типу поселений выделена цифрой <span class="font-weight-bold back-ground green">III</span>, а по административным единицам – <span class="font-weight-bold back-ground light-green">IV</span>, при этом цифрами <span class="font-weight-bold back-ground purple">V</span> отмечено количество вариантов фильтрации. 
+                        С помощью опций выбора <span class="font-weight-bold back-ground blue">VI</span> можно комбинировать фильтры, чтобы затем применить их одной кнопкой <span class="font-weight-bold back-ground red">I</span>.
+                    </p>
+                </div>
+            </div>
+        </div>
+
+        <!--Следующий раздел-->
+        <div class="card">
+            <div class="card-header" id="label-info">
+                <h5 class="mb-0">
+                    <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-info" aria-expanded="true" aria-controls="id-info">
+                        Подробная информация о поселении
+                    </button>
+                </h5>
+            </div>
+            <div id="id-info" class="collapse" aria-labelledby="label-info" data-parent="#accordion">
+                <div class="card-body">
+                    <!--Текст-->
+                    <p>
+                        Поселения на карте представлены в качестве маркеров. При нажатии на любой маркер слева появится боковая панель, содержащая подробную информация о выбранном поселении (секция <span class="font-weight-bold back-ground red">I</span> на рисунке ниже).
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "6"})" alt="Левая боковая панель">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                    <p>
+                        На панели подробной информации присутствует кнопка «Добавить в экспорт», отмеченная цифрой <span class="font-weight-bold back-ground orange">II</span>. При нажатии этой кнопки поселение добавится в список экспорта данных.
+                        Нажатие на кнопку <span class="font-weight-bold back-ground yellow">III</span> скроет боковую панель, то же самое произойдет при повторном нажатии на маркер того же самого поселения.
+                        Информация о поселении разделена <span class="green">зеленой линией</span>, выше которой расположена постоянная информация о поселении. В этом разделе при наличии отображается история города. Так как история может быть весьма большой, она по умолчанию скрыта и разворачивается по нажатию на кнопку <span class="font-weight-bold back-ground dark-blue">IV</span>.
+                        Ниже <span class="green">зеленой линии</span> располагаются секции (отмечены цифрами <span class="font-weight-bold back-ground purple">V</span>) с дополинтельной информацией, среди которой есть источник. Если источником является некоторая ссылка (цифры <span class="font-weight-bold back-ground blue">VI</span>), она будет доступна для перехода.
+                    </p>                   
+                </div>
+            </div>
+        </div>
+
+        <!--Следующий раздел-->
+        <div class="card">
+            <div class="card-header" id="label-export">
+                <h5 class="mb-0">
+                    <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-export" aria-expanded="true" aria-controls="id-export">
+                        Экспорт данных
+                    </button>
+                </h5>
+            </div>
+            <div id="id-export" class="collapse" aria-labelledby="label-export" data-parent="#accordion">
+                <div class="card-body">
+                    <!--Текст-->
+                    <p>
+                        Чтобы выполнить экспорт данных в определенный формат, необходимо в первую очередь добавить несколько поселений в список экспорта, как это было описано в разделе "Подробная информация о поселении".
+                        Затем нужно нажать кнопку, представленную на рисунке ниже цифрой <span class="font-weight-bold back-ground red">I</span>.
+                    </p>
+                    <div class="text-center">
+                        <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "7"})" alt="Правая панель в режиме экспорта">
+                        <p hidden>Название рисунка, если оно нужно</p>
+                    </div>
+                    <p>
+                        В результате нажатия на кнопку <span class="font-weight-bold back-ground red">I</span> появится боковая панель <span class="font-weight-bold back-ground green">II</span>, содержащая кнопки экспорта в формат Word (<span class="font-weight-bold back-ground purple">IV</span>) и Excel (<span class="font-weight-bold back-ground dark-blue">V</span>). 
+                        Кроме того, пользователю еще раз предлагается уточнить, информация о всех ли добавленных поселений должна быть экспортирована. 
+                        По умолчанию, все поселения отмечены для экспорта (отмечено цифрами <span class="font-weight-bold back-ground orange">III</span>), однако пользователь может снять выделение, либо вернуть его, пока открыта панель.
+                    </p>
+                </div>
+            </div>
+        </div>
+        
+        @if ((bool)ViewBag.isAuth)
+        {
+            <!--Следующий раздел-->
+            <div class="card">
+                <div class="card-header" id="label-moderator">
+                    <h5 class="mb-0">
+                        <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-moderator" aria-expanded="true" aria-controls="id-moderator">
+                            Модерация данных
+                        </button>
+                    </h5>
+                </div>
+                <div id="id-moderator" class="collapse" aria-labelledby="label-moderator" data-parent="#accordion">
+                    <div class="card-body">
+                        <!--Текст-->
+                        <p>
+                            Получив роль модератора появляется возможность добавления нового поселения на карту с помощью кнопки, отмеченной цифрой <span class="font-weight-bold back-ground red">I</span> на рисунке ниже.
+                        </p>
+                        <div class="text-center">
+                            <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "8"})" alt="Правая панель в режиме добавления нового поселения">
+                            <p hidden>Название рисунка, если оно нужно</p>
+                        </div>
+                        <p>
+                            Панель на рисунке содержит форму ввода данных (цифра <span class="font-weight-bold back-ground green">II</span>), которая позволит добавить новое поселение в онтологию.
+                            При нажатии на кнопку «Отправить данные» (цифра <span class="font-weight-bold back-ground orange">III</span>) происходит проверка введенных данных и в случае их корректности, данные формы будут отправлены на сервер.
+                            Отмеченные цифрой <span class="font-weight-bold back-ground dark-blue">IV</span> данные являются обязательными для заполнения, так как составляют основу любого поселения, а поля ввода с пометкой цифры <span class="font-weight-bold back-ground purple">V</span> являются дополнительными.
+                            Поле ввода URL поселения по умолчанию не редактируется, чтобы URL создавался программным образом на стороне сервера, так как он является уникальным ключом поселения.
+                            Однако с помощью селектора <span class="font-weight-bold back-ground blue">VI</span> можно ввести свой URL, при этом поле станет обязательным для заполнения.
+                        </p>
+                        <br />
+                        <p>
+                            Новый инструментарий также появляется при открытии подробной информации о поселении (см. рисунок ниже).
+                        </p>
+                        <div class="text-center">
+                            <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "9"})" alt="Левая панель с новым функционалом">
+                            <p class="font-weight-bold">Левая панель с новым функционалом</p>
+                        </div>
+                        <p>
+                            Новые элементы отмечены цифрами <span class="font-weight-bold back-ground">I-IV</span>.
+                            При нажатии на кнопку <span class="font-weight-bold back-ground red">I</span> появится правое боковое меню с возможность редактирования сведения об основном поселении (см. рисунок <span class="font-italic">"Редактирование информации основного поселения"</span>).
+                            При этом поля ввода правой панели будут заполнены соответствующими данными из левой панели.
+                        </p>
+                        <div class="text-center">
+                            <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "10"})" alt="Левая и правая панели в режиме редактирования информации основного поселения">
+                            <p class="font-weight-bold">Редактирование информации основного поселения</p>
+                        </div>
+                        <br />
+                        <p>
+                            Воспользовавшись кнопкой, отмеченной цифрой <span class="font-weight-bold back-ground orange">II</span> на рисунке <span class="font-italic">"Левая панель с новым функционалом"</span>, пользователь увидит в правой панели новую форму добавления новых дополнительных сведений, что показано на рисунке ниже.
+                            А если нажать кнопки <span class="font-weight-bold back-ground blue">IV</span>, откроется режим редактирования дополнительной информации.
+                        </p>
+                        <div class="text-center">
+                            <img class="img-fluid" src="@Url.Action("Image", "Home", new { id = "11"})" alt="Правая панель в режиме добавления дополнительной информации о поселении">
+                            <p hidden>Название рисунка, если оно нужно</p>
+                        </div>
+                        <p>
+                            На рисунке выше параметры формы, отмеченные цифрой <span class="font-weight-bold back-ground red">I</span>, обязательны для заполнения, так как являются основой для создания сведений. 
+                            Все остальные параметры не обязательные, однако также проходят проверку на корректность, например, в качестве численности населения нельзя ввести слово. 
+                            Для упрощения работы с большими массивами было решено сделать список выбора типов поселений и административных единиц (цифры <span class="font-weight-bold back-ground green">II</span> на рисунке).
+                        </p>
+                    </div>
+                </div>
+            </div>
+
+            <!--Следующий раздел-->
+            <div class="card">
+                <div class="card-header" id="label-doxygen">
+                    <h5 class="mb-0">
+                        <button class="btn btn-outline-secondary" data-toggle="collapse" data-target="#id-doxygen" aria-expanded="true" aria-controls="id-doxygen">
+                            Документация к приложению
+                        </button>
+                    </h5>
+                </div>
+                <div id="id-doxygen" class="collapse" aria-labelledby="label-doxygen" data-parent="#accordion">
+                    <div class="card-body">
+                        <!--Текст-->
+                        <p>
+                            Нажмите <a href="~/Content/html/index.html" target="_blank">сюда</a> для перехода к документации, созданной на основе комментариев с помощью Doxygen.
+                        </p>
+                    </div>
+                </div>
+            </div>
+        }
+    </div>
+</div>
diff --git a/web-map/Views/Home/Index.cshtml b/web-map/Views/Home/Index.cshtml
index 219cd1d..5fb3b5a 100644
--- a/web-map/Views/Home/Index.cshtml
+++ b/web-map/Views/Home/Index.cshtml
@@ -3,36 +3,28 @@
 }
 
 <div class="jumbotron">
-    <h1>Домашняя страница</h1>
-    <h2>Здесь будет описание проекта</h2>
+    <h5>Кафедра «Истории и культуры отечества» <a href="http://sstu.ru" style="color: #212529;" target="_blank"><ins>Саратовского государственного технического университета имени Гагарина Ю.А.</ins></a> заинтересована в разработке информационного ресурса историко-этнографического содержания в виде интерактивной карты о поселениях Саратовской области.</h5>
+    <br/>
+    <h5>На карте должны быть отображены поселения когда-либо существовавшие и ныне существующие на территории Саратовской области, данных о которых указаны в официальных источниках (переписи населения, архивных документы, научные работы). При этом информация о поселении (название, тип, количество и состав населения и т.п.) должна относиться к определенному году или временному интервалу.</h5>
+    <br/>
+    <h5>В качестве источника данных используется онтология "Поселения Саратовской области", разработанная в рамках данного проекта.</h5>
+    <br/>
+    <div>
+        <h6>Авторами являются:</h6>
+        <ul>
+            <li>
+                студенты Саратовского государственного технического университета имени Гагарина Ю.А. института прикладных информационных технологий и коммуникаций
+                <ul>
+                    <li><span><a href="mailto:salin.dv@protonmail.com" target="_blank">Салин Денис</a></span> (разработка приложения интерактивной карты)</li>
+                    <li>Гипич Никита (разработка и наполнение онтологии)</li>
+                </ul>
+            </li>
+            <li>
+                профессор кафедры «Информационно-коммуникационные системы и программная инженерия» института прикладных информационных технологий и коммуникаций
+                <ul>
+                    <li>д.ф-м.н., профессор, Шульга Татьяна Эриковна</li>
+                </ul>
+            </li>
+        </ul>
+    </div>  
 </div>
-
-<!--
-<div class="jumbotron">
-    <h1>ASP.NET</h1>
-    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
-    <p><a href="https://asp.net" class="btn btn-primary btn-lg">Learn more &raquo;</a></p>
-</div>
-
-<div class="row">
-    <div class="col-md-4">
-        <h2>Getting started</h2>
-        <p>
-            ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that
-            enables a clean separation of concerns and gives you full control over markup
-            for enjoyable, agile development.
-        </p>
-        <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301865">Learn more &raquo;</a></p>
-    </div>
-    <div class="col-md-4">
-        <h2>Get more libraries</h2>
-        <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
-        <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301866">Learn more &raquo;</a></p>
-    </div>
-    <div class="col-md-4">
-        <h2>Web Hosting</h2>
-        <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p>
-        <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301867">Learn more &raquo;</a></p>
-    </div>
-</div>
--->
diff --git a/web-map/Views/Map/Map.cshtml b/web-map/Views/Map/Map.cshtml
index fb0ac19..4428069 100644
--- a/web-map/Views/Map/Map.cshtml
+++ b/web-map/Views/Map/Map.cshtml
@@ -2,6 +2,45 @@
     ViewBag.Title = "Map";
 }
 
+<div class="modal fade bd-example-modal-sm" id="confirmDeleteModal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
+    <div class="modal-dialog modal-sm modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="exampleModalLabel">Требуется подтверждение</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div id="modal-delete-text" class="modal-body">
+                
+            </div>
+            <div class="modal-footer">
+                <button type="button" id="buttonConfirmDelete" class="btn btn-danger" data-dismiss="modal" data-type="" data-url="" data-title="" onclick="startDelete(this)">Удалить</button>
+                <button type="button" id="buttonDismissDelete" class="btn btn-success" data-dismiss="modal">Отменить</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<div class="modal fade bd-example-modal-sm" id="resultDeleteModal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
+    <div class="modal-dialog modal-sm modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="exampleModalLabel">Результат операции</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div id="modal-result-text" class="modal-body">
+
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">Подтвердить</button>
+            </div>
+        </div>
+    </div>
+</div>
+
 <div class="wrapper">
     <!-- боковая левая панель -->
     <nav id="sidebar-left" class="active rounded-right">
@@ -179,7 +218,11 @@
 @if ((bool)ViewBag.isAuth)
 {
     <script>
-        editButtonText = '<button type="button" id="_ID_" class="btn btn-outline-light btn-sm" onclick="printEditImportForm(\'_TYPE_\', \'_ID_\')"><img src="/Content/icon.png" width="20" height="20" /> редактировать</button>';
+        editButtonText = '<div class="row"><div class="col">';
+        editButtonText += '<button type="button" id="_ID_" class="btn btn-outline-light btn-sm" onclick="printEditImportForm(\'_TYPE_\', \'_ID_\')"><img src="/Content/icon.png" width="20" height="20" /> редактировать</button>';
+        editButtonText += '</div><div class="col">';
+        editButtonText += '<button type="button" id="_ID_" class="btn btn-outline-light btn-sm" onclick="deleteElement(\'_TYPE_\', \'_ID_\')"><img src="/Content/delete.png" width="20" height="20" /> удалить</button>';
+        editButtonText += '</div></div>';
         document.getElementById('addEditInfo').hidden = false;
     </script>
 }
@@ -194,5 +237,3 @@
 "~/Scripts/SiteScripts/Init.js")}
 
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" />
-<link rel="stylesheet" href="http://bootstraptema.ru/plugins/2018/irs/ion.rangeSlider.css" />
-<link rel="stylesheet" href="http://bootstraptema.ru/plugins/2018/irs/ion.rangeSlider.skin.css" />
diff --git a/web-map/Views/Shared/_Layout.cshtml b/web-map/Views/Shared/_Layout.cshtml
index 79ae6d8..786b87d 100644
--- a/web-map/Views/Shared/_Layout.cshtml
+++ b/web-map/Views/Shared/_Layout.cshtml
@@ -70,7 +70,7 @@
         @RenderBody()
         <hr />
         <footer>
-            <p>&copy; @DateTime.Now.Year – приложение ASP.NET</p>
+            <p>&copy; Историческая интерактивная карта "Поселения Саратовской области"</p>
         </footer>
     </div>
 
diff --git a/web-map/web-map.csproj b/web-map/web-map.csproj
index 0091248..5d0f6a1 100644
--- a/web-map/web-map.csproj
+++ b/web-map/web-map.csproj
@@ -174,12 +174,25 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
+    <Content Include="App_Data\Config\Config.xml" />
+    <Content Include="App_Data\pics\1.png" />
+    <Content Include="App_Data\pics\10.png" />
+    <Content Include="App_Data\pics\11.png" />
+    <Content Include="App_Data\pics\2.png" />
+    <Content Include="App_Data\pics\3.png" />
+    <Content Include="App_Data\pics\4.png" />
+    <Content Include="App_Data\pics\5.png" />
+    <Content Include="App_Data\pics\6.png" />
+    <Content Include="App_Data\pics\7.png" />
+    <Content Include="App_Data\pics\8.png" />
+    <Content Include="App_Data\pics\9.png" />
     <Content Include="Content\bootstrap-grid.css" />
     <Content Include="Content\bootstrap-grid.min.css" />
     <Content Include="Content\bootstrap-reboot.css" />
     <Content Include="Content\bootstrap-reboot.min.css" />
     <Content Include="Content\bootstrap.css" />
     <Content Include="Content\bootstrap.min.css" />
+    <Content Include="Content\delete.png" />
     <Content Include="Content\icon.png" />
     <Content Include="Content\jQRangeSlider-iThing.css" />
     <Content Include="Content\jquery-ui\jquery-ui.css" />
@@ -200,6 +213,7 @@
     <Content Include="Content\bootstrap-reboot.css.map" />
     <Content Include="Content\bootstrap-grid.min.css.map" />
     <Content Include="Content\bootstrap-grid.css.map" />
+    <Content Include="ClassDiagram1.cd" />
     <None Include="packages.config" />
     <None Include="Properties\PublishProfiles\FolderProfile.pubxml" />
     <Content Include="Scripts\bootstrap.bundle.js" />
@@ -273,7 +287,6 @@
     <Content Include="Views\Account\Login.cshtml" />
   </ItemGroup>
   <ItemGroup>
-    <Folder Include="App_Data\" />
     <Folder Include="Views\Base\" />
     <Folder Include="Views\MapAPI\" />
   </ItemGroup>