Map
Changes
web-map/Controllers/MapController.cs 3(+2 -1)
web-map/Scripts/mapInit.js 138(+74 -64)
web-map/Views/Map/Map.cshtml 2(+1 -1)
Details
web-map/Controllers/MapController.cs 3(+2 -1)
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
web-map/Scripts/mapInit.js 138(+74 -64)
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"];
web-map/Views/Map/Map.cshtml 2(+1 -1)
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&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>