Map

http POST от клиента с параметром данные возвращаются из

11/5/2018 3:44:23 PM

Details

diff --git a/web-map/Controllers/MapController.cs b/web-map/Controllers/MapController.cs
index 176bf2d..84998aa 100644
--- a/web-map/Controllers/MapController.cs
+++ b/web-map/Controllers/MapController.cs
@@ -14,7 +14,7 @@ namespace web_map.Controllers
             return View();
         }
 
-        [HttpPut]
+        [HttpPost]
         public JsonResult MapData(string id)
         {
             if (Convert.ToInt32(id) == 0)
@@ -30,6 +30,7 @@ namespace web_map.Controllers
         }
 
 
+        //  Костыль, который надо перенести в модель данных
         public class Settlement
         {
             public class Position
diff --git a/web-map/Scripts/mapInit.js b/web-map/Scripts/mapInit.js
index 9abf009..516f113 100644
--- a/web-map/Scripts/mapInit.js
+++ b/web-map/Scripts/mapInit.js
@@ -1,11 +1,17 @@
 ymaps.ready(init);
 
+var collectionAll;
+var collectionReligion_1;
+var collectionReligion_2;
+var collectionReligion_3;
+var collectionReligion_4;
+var collectionName;
+var collectionExport;
 
-
-
+var map;
 
 function init() {
-    var map = new ymaps.Map
+    map = new ymaps.Map
         ('map', {
             center: [51.533103, 46.034158],
             zoom: 7,
@@ -57,96 +63,100 @@ function init() {
             map.geoObjects.add(background);
         });
 
-    var startData;
-    function onLoad()
-    {
-        Data = new Date();
-        console.log("onLoad: " + Data.getHours() + "." + Data.getMinutes() + "." + Data.getSeconds());
-        startData = getData(0);
-    }
-    onLoad();
-    //console.log(startData);
-
-    var allMarks = new ymaps.GeoObjectCollection({},
+    //  Набор коллекций, которые формируются для более гибкого отображения данных на странице.
+    //  Объявлены, как глобальные переменные, однако инициализируются лишь один раз.
+    collectionAll = new ymaps.GeoObjectCollection({},
         {
+            //  Параметр коллекции всех элементов, отображающий название в красной рамке
             preset: 'islands#redStretchyIcon'
         });
-    loadMarks(allMarks, startData);
-    map.geoObjects.add(allMarks);
+    collectionReligion_1 = new ymaps.GeoObjectCollection();
+    collectionReligion_2 = new ymaps.GeoObjectCollection();
+    collectionReligion_3 = new ymaps.GeoObjectCollection();
+    collectionReligion_4 = new ymaps.GeoObjectCollection();
+    collectionName = new ymaps.GeoObjectCollection();
+    collectionExport = new ymaps.GeoObjectCollection();
+
+    //  Функция, осуществляющая первую загрузку данных с параметром 0 (см. запрос в модели данных сервера)
+    function onLoad() {getData(0);}
+    onLoad(); 
 }
 
+//  Функция, помещающая новые геобъекты на основе переданного массива fromData в переданную коллекцию collection
 function loadMarks(collection, fromData)
 {
-    collection.removeAll();
-    //sendRequest
-    //var response = getRequest().then(function)
+    //  Очистка коллекции от старых элементов. Параметры остаются прежними
+    collection.removeAll(); 
+    fromData.forEach(function (el)
     {
-        Data = new Date();     
-        console.log("loadMarks: " + Data.getHours() + "." + Data.getMinutes() + "." + Data.getSeconds());
-        
-        fromData.forEach(function (el)
-        {
-            console.log("2");
-            var tmp = new ymaps.Placemark(el.Position,
-                {
-                    iconContent: el.Name,
-                    //balloonContent: String(el[1]) + " " + String(el[0]) + ". Год основания " + String(el[3]),
-                    hintContent: el.Position
-                }
-            );
-            tmp.events.add('click', function (e) {
-                e.preventDefault();
-                alert(String(el.Type) + " " + String(el.Name) + ". Год основания " + String(el.Year));
-            });
-            collection.add(tmp);
-        });   
-        console.log("3");
-    }
+        var tmp = new ymaps.Placemark(el.position,
+            {
+                iconContent: el.Name,   //  Содержимое названия
+                hintContent: el.position//  Содержитмое подписи при наведении
+            }
+        );      
+        //  Переопределяем стадартный обработчик нажатия
+        tmp.events.add('click', function (e) {
+            e.preventDefault(); //  Запрещаем стандартный обработчик
+            alert(String(el.Type) + " " + String(el.Name) + ". Год основания " + String(el.Year));
+        });
+        //  Добавление нового геообъекта в коллекцию
+        collection.add(tmp);
+    });   
 }
 
-
+//  Функция отправки запроса с переданным id, который позволит выбрать тип запроса на контроллере
 function getData(id)
 {
-    Data = new Date();
-    console.log("getData: " + Data.getHours() + "." + Data.getMinutes() + "." + Data.getSeconds());
-    var result = new Array();
-    console.log(result);
+    //  Асинхронный запрос к контроллеру Map методу MapData(string id)
     $.ajax({
         url: '/Map/MapData',
-        type: 'PUT',
+        type: 'POST',
+        //data : "", // Параметры запроса
         contentType: "application/json; charset=utf-8",
         dataType: 'json',
         cache: false,
-
-        success: function (data) {
-            for (var i = 0; i < data.length; i++) {
-                var temp = Parse(data[i]);
-                console.log(temp);
-                result.push(temp);
-                console.log(result.length);
-                console.log(result.i);
-            }
-            console.log("result length " + result.length);
-            //  !!!!!!!!!!!!!!! Здесь нужно не самописный метод, а JSON.parse
+        success: function (data)
+        {
+            //  В случае успеха, загрузи данные в коллекции.
+            loadCollections(data);   
+            //  Асинхронность подразумевает, что создается отдельный поток обработки, поэтому необходим последовательный вызов всех зависимых компонентов
         },
 
         error: function (response) {
+            //  Ошибка
             console.log(response.responseText);
         }
+        });
+}
+
+function loadCollections(fromData)
+{
+    //  json данные необходимо конвертировать в новый массив, чтобы упростить заполнение коллекций с помощью встроенных фильтров
+    var data = [];
+    fromData.forEach(function (el) {
+        data.push(Parse(el));
+        //  !!!!!!!!!!!!!!! Здесь нужно не самописный метод, а JSON.parse
     });
-    console.log("result");
-    console.log(result);
-    console.log("result length " + result.length);
-    return result;
+
+    //  Вызов внесения переданных данных (из нужного массива) в коллекцию
+    loadMarks(collectionAll, data);
+    // loadMarks(collectionReligion_1, "массив с выборкой по религии_1");
+
+
+    //  для начала, отобразим полную коллекцию
+    map.geoObjects.add(collectionAll);
+
+    //  Применить фильтры, если таковые установлены
 }
 
+
+//  Самописный парсер json объекта (не массива), жестко связанный с моделью
 function Parse(obJSON) {
-    Data = new Date();
-    console.log("Parse: " + Data.getHours() + "." + Data.getMinutes() + "." + Data.getSeconds());
     var res = new Object();
 
     res.Name = obJSON["Name"];
-    res.Position = [obJSON["position"].X, obJSON["position"].Y];
+    res.position = [obJSON["position"].X, obJSON["position"].Y];
 
     res.Year = obJSON["Year"];
     res.Type = obJSON["Type"];
diff --git a/web-map/Views/Map/Map.cshtml b/web-map/Views/Map/Map.cshtml
index 36ad70d..2802df6 100644
--- a/web-map/Views/Map/Map.cshtml
+++ b/web-map/Views/Map/Map.cshtml
@@ -3,7 +3,7 @@
 }
 
 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=0ea4f7d6-01f0-471d-b717-ada9d94faa49&lang=ru_RU" type="text/javascript"></script>
-@section Scripts {@Scripts.Render("~/scripts/mapInit.js")}
+@section Scripts {@Scripts.Render("~/Scripts/mapInit.js")}
 
 
 <h2>Здесь будет размещена карта</h2>