Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Геоинформационные системы предназначены для сбора, хранения, анализа и графической визуализации пространственных данных и связанной с ними информации о представленных в системе объектах.



ВВЕДЕНИЕ

 

Геоинформационные системы предназначены для сбора, хранения, анализа и графической визуализации пространственных данных и связанной с ними информации о представленных в системе объектах.

ГИС различаются предметной областью информационного моделирования, к примеру, городские ГИС, или муниципальные ГИС и т. п.; среди них особое наименование, как особо широко распространённые, получили земельные информационные системы.

Реализация геоинформационных проектов, включает следующие этапы:

¾ предпроектных исследований, в том числе изучение требований пользователя и функциональных возможностей используемых программных средств ГИС;

¾ технико-экономическое обоснование, оценку соотношения «затраты/прибыль»;

¾ системное проектирование ГИС, включая стадию пилот-проекта, разработку ГИС;

¾ её тестирование на небольшом территориальном фрагменте, или тестовом участке, прототипирование - создание опытного образца, или прототипа;

¾ внедрение ГИС;

¾ эксплуатацию и использование.

Научные, технические, технологические и прикладные аспекты проектирования, создания и использования ГИС изучаются геоинформатикой.


 

 

1 ТЕХНИЧЕСКОЕ ЗАДАНИЕ

 

В рамках курсовой работы требуется создать геоинформационную систему, применив полученные навыки и знания.

 

1.1 Выбор предметной области

 

В повседневной жизни могут возникать ситуации, когда человек оказывается в незнакомом месте без денег, но с банковской картой и мобильным устройством оснащённым системой GPS и доступом в интернет. Поэтому в качестве предметной области были выбраны банкоматы Архангельской области, а разработанная система должна будет помочь пользователю найти ближайший банкомат.

 

1.2 Описание предметной области

 

Предметная область - это мысленно ограниченная область реальной действительности, подлежащая описанию или моделированию и исследованию.

Основные объекты рассматриваемой предметной области – банкоматы. Важные, с точки зрения проектирования и пользователя системы, свойства объектов это их пространственные координаты, а также принадлежность банкомата к определённому банку.

Пространственно данные будут ограничены территорией Архангельской области.


 

1.3 Определение требований пользователя

 

Исходя из описания предметной области, можно выдвинуть ряд требований, которыми должна обладать разрабатываемая система, что бы удовлетворить запросам пользователя:



¾ Доступ к системе должен осуществляться с помощью мобильного устройства – коммуникатора/телефона;

¾ от пользователя требуется лишь указать наименование банка, банкомат которого ему необходимо найти;

¾ интерфейс приложения должен быть простым для работы с помощью мобильного устройства;

 

1.4 Спецификация качества

 

Функциональность: программа должна являться полностью завершенным программным продуктом, и предоставлять пользователю все возможные функции.

Надёжность: программа должна быть автономной.

Эффективность: должен быть предусмотрен контроль над введёнными данными. Приложение должно наиболее наглядно отображать все объекты. Программа должна иметь интуитивно понятный пользовательский интерфейс.

 

1.5 Функциональная спецификация

 

Стабильная работа программы требует:

¾ наличие у устройства выхода в интернет;

¾ желательно наличие в устройстве GPS-приёмника.


 

 

2 ОПРЕДЕЛЕНИЕ И АНАЛИЗ ТРЕБОВАНИЙ К ДАННЫМ

 

2.1 Инфологическая модель данных

 

Исходя из описания предметной области и поставленных требований, можно описать модель данных, которая полностью опишет объекты системы.

Разрабатываемая ГИС содержит лишь один тип объектов, данные о которых следует структурировать – банкоматы. Так же уже были выделены важные для проектирования свойства объекта: пространственные координаты и принадлежность к конкретному банку.

 

2.2 Даталогическое проектирование

 

В качестве модели данных была выбрана реляционная модель данных, так как количество банкоматов в Архангельской области невелико для описания их с помощью данной модели, а так же из семантического описания видно, что структура разрабатываемой БД будет достаточно проста.

Описание данные с помощью выбранной модели показано в таблице 1.

 

Таблица 1 – Реляционная структура данных

 

Идентификатор объекта (id)

Долгота

Широта

Наименование банка

Тип

Целое число

Вещественное число

Строка

 


 

 

2.3 Нормализация отношений

 

При проектировании реляционных баз данных обычно выполняется так называемая нормализация.

Нормализация предназначена для приведения структуры базы данных к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма БД. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в БД информации.

Так как связей (отношений) в разработанной модели данных нет, то в нормализации они не нуждаются – т.е. избыточности и противоречивости, которая потенциально может привести к логически ошибочным результатам выборки или изменения данных в полученной БД нет.

 

2.4 ER-диаграмма

 

ER-диаграмма предназначена для наглядного представления модели сущность-связь и позволяют проектировать базы данных с большим количеством объектов и атрибутов. На рисунке 1 показана ER-диаграмма составленная для разрабатываемой БД с использованием нотация Питера Чена.

 

Рисунок 1 – ER-диаграма БД


 

2.5 Физическое проектирование

 

Из результата анализа предметной области видно, что БД для хранения информации о банкоматах имеет простую структуру и может быть реализована без помощи СУБД. Объем и конфигурация данных позволят реализовать их хранение с помощью XML или CSV файла. Для уменьшения избыточности данных выберем CSV - текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом — запятой или точкой с запятой.

Информация о банкоматах была получена с сайта Open Street Map и зашифрована с помощью выбранной технологии.


 

 

3 ВЫБОР И ОБОСНОВАНИЕ СИСТЕМЫ РЕАЛИЗАЦИИ

 

В качестве платформы для реализации разрабатываемой ГИС был выбран API Яндекс.Карт — программный интерфейс, с помощью которого вы можете установить карту и весь инструментарий для работы с ней к себе на сайт.

API предоставляет доступ ко всему содержимому Яндекс.Карт — это сотни подробных схем городов, карта мира, спутниковые снимки планеты, Народная карта а так же геокодер — сервис для поиска географических объектов на карте.

Геокодер так же позволяет получить координаты устройства, которое оснащено GPS-приёмником – это и было ключевым фактором повлиявшим на выбор платформы, т.к. для поиска ближайшего банкомата нужно точно знать своё местоположение.

Geolocation API предоставляет высокоуровневый интерфейс для получения координат местоположения устройства, предоставляющего доступ в интернет. API не зависит от средств получения информации о местоположении. Эта информация может быть получена при помощи GPS, сетевых параметров (IP адрес, RFID, WiFi адрес или ID ячейки GSM/CDMA), а также введена пользователем. Поэтому, информация полученная с помощью Geolocation API, является более точной, чем простое определение координат по IP адресу.


 

3.1 Работа с базой данных

 

Обработка данных с помощью JavaScript исключается, т.к. пользователю пришлось бы загружать всю базу банкоматов. Поэтому работа с базой должна проводиться на сервере, который после обработки полученной информации возвратил бы клиенту лишь нужные данные, уменьшив тем самым объём передаваемой пользователю информации в разы.


 

 

4 ОПИСАНИЕ АЛГОРИТМА

 

С помощью выбранных средств реализации и результатов анализа предметной области был создан прототип действующей системы, выполняющий все функции, которые были выявлены при составлении технического задания исходя из потребностей пользователя ГИС.

 

4.1 Алгоритм работы системы

 

Для реализации прототипа системы были созданы несколько php-скриптов, каждый из которых выполняет свою функцию:

¾ ycsvParser.class.php – класс для работы с csv-файлами, передаёт в основной метод информацию о подходящих банкоматах из базы в удобном виде;

¾ index.php – основной скрипт системы, который получает с помощью JavaScript Geolocation API координаты устройства, рассчитывает расстояние до каждого банкомата нужного банка, находит ближайший и передаёт его координаты в JS, который отрисовывает карту с результатом.

На рисунке 2 показана блок-схема основного алгоритма системы.


 

 
 

 

 


Рисунок 2 - БСА алгоритма


 

 

5 ТЕСТИРОВАНИЕ ПРОТОТИПА

 

Для тестирования прототипа была разработана система тестов представленная в таблице 2.

 

Таблица 2 – Ситсема тестов прототипа

Поиск ближайшего Сбербанка

Координаты устройства получены верно, Сбербанк найден верно.

Повторный поиск на той же карте Росбанка

Росбанк найден верно.

Тестирование на другом устройстве

Тест пройден без ошибок.

 

В ходе тестирование прототипа был выявлен ряд недоработок:

¾ отсутствует возможность уточнить местоположение – т.к. устройство может не обладать GPS приёмником и, соответственно, его местоположение будет определено не достаточно точно;

¾ недостаток информации о найденном банкомате – пользователь не получал информацию о адресе банкомата и примерном расстоянии, которое ему предстоит преодолеть.

 

5.1 Исправление недостатков и недоработок

 

После изучения документации API Яндекс.Карт код получения координат был переработан, пользователь получил возможность уточнить своё местоположение. Что бы сделать это, достаточно просто передвинуть метку на карте, отвечающую за местоположение клиента (метка снабжена соответствующей подписью).

Так же для получения информации о дистанции до банкомата, был использован класс Router Яндекс.Карт – класс предоставляет методы, позволяющие проложить маршрут между двумя точками и получить информацию о его длине, а так же отобразить его на карте (на данный момент для Архангельска доступна бета-версия).

Кроме того, для расширения информации о найденном банкомате к метке на карте, которая обозначает данный объект, были добавлены данные о его адресе, полученные с помощью класса Geocoder.

 

5.2 Руководство пользователя

 

Для нахождения банкомата пользователю требуется трижды кликнуть мышью (или иным средством ввода):

¾ щелчок по выпадающему меню – откроет список для выбора наименования банка;

¾ клик по нужному наименованию – выберет необходимый банк;

¾ нажатие на кнопку “показать результат” – передаст данные для обработки на сервер, который возвратит пользователю карту с результатом поиска.

¾ возможен повторный поиск в той же последовательности действий.


 

 

6 РЕАЛИЗОВАННАЯ ГИС

 

После устранения всех найденных на этапе тестирования недочётов исправленный прототип перерос в геоинформационную систему, выполняющую все предъявленные пользователем требования.

 

6.1 Интерфейс разработанной ГИС

 

Интерфейс приложения отвечает требованиям простоты и эргономичности. Так же он приспособлен для работы на экранах с малым разрешением коммуникаторов или мобильных телефонов.

Интерфейс состоит из элемента div, содержащего карту выпадающего списка для выбора наименования банка владельца банкомата и кнопки вывода результата. Т.е. от пользователя требуется минимум действий – всего три клика.

Интерфейс приложения показан на рисунке 3.

Рисунок 3 – Интерфейс приложения

 

Также пользователь может осуществлять повторный поиск без перезагрузки страницы, а при раскрытии метки банкомата, пользователь может получить информацию о его адресе (рисунок 4).

Рисунок 4 – Повторный поиск банкомата


 

ЗАКЛЮЧЕНИЕ

 

В процессе выполнения задания на курсовую работы были укреплены знания и навыки, полученные на лекционных и практических занятиях по курсу ГИС. Получен опыт по работе с Яндекс.Картами и Geolocation API.

Результатом курсового проектирования стала работоспособная ГИС, которая выполняет поиск ближайшего к пользователю мобильного устройства банкомата. Интерфейс приложения интуитивно понятен любому пользователю, имеющему начальные навыки работы с компьютером.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1 Бугаевский Л. М., Цветков В. Я. Геоинформационные системы. Учебное пособие для вузов. М.: 2000.

2 Цветков В.Я. Методы прогнозирования в геоинформационных технологиях. – 1999.

3 Зейлер М. Моделирование нашего мира. Руководство ESRI по проектированию базы геоданных. 2000.


 

ПРИЛОЖЕНИЕ А

(обязательное)

Листинг программы

Листинг index.php

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script>

<script type="text/javascript">

// Создает обработчик события window.onLoad

YMaps.jQuery(function () {

// Создает экземпляр карты и привязывает его к созданному контейнеру

var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

navigator.geolocation.getCurrentPosition(

// Обработчик успшеного получения координат

function (position) {

//alert("Координаты: " + position.coords.longitude + ", " + position.coords.latitude);

map.setCenter(new YMaps.GeoPoint(position.coords.longitude, position.coords.latitude), 14);

document.forms[0].elements('longitude').value = position.coords.longitude;

document.forms[0].elements('latitude').value = position.coords.latitude;

map.enableScrollZoom();

// Задает опции метки и отображает метку на карте.

//var placemark = new YMaps.Placemark(new YMaps.GeoPoint(position.coords.longitude, position.coords.latitude), {style: "default#bankIcon"});

//map.addOverlay(placemark);

var placemark = new YMaps.Placemark(new YMaps.GeoPoint(position.coords.longitude, position.coords.latitude), {

//{style: "default#greenPoint"}

draggable: 1,

hintOptions: {

maxWidth: 100,

showTimeout: 200,

offset: new YMaps.Point(5, 5)

},

balloonOptions: {

maxWidth: 200,

hasCloseButton: true,

mapAutoPan: 0

}

});

placemark.setStyle('default#arrowDownLeftIcon');

placemark.name = "Вы примерно здесь.";

placemark.description = "Для уточнения своего место положения перетащите метку.";

map.addOverlay(placemark);

YMaps.Events.observe(placemark, placemark.Events.DragEnd, function (obj) {

document.forms[0].elements('longitude').value = obj.getGeoPoint().toString().split(",")[0];

document.forms[0].elements('latitude').value = obj.getGeoPoint().toString().split(",")[1];

});

 

},

// Оработчик неудачного завершения получения коордиант

function (error) {

alert("При определении координат произошла ошибка. Ее код: " + error.code);

},

 

// Параметры

{

enableHighAccuracy: true, // Режим получения наиболее точных данных

timeout: 10000, // Максиальное время ожидания ответа (в миллисекундах)

maximumAge: 100000 // Максимальное время жизни полученных данных

}

);

 

})

</script>

<center>

<div style="width:700px;">

<h1 style="text-align: left; text-shadow: 30#000000; color: #A6A6A6">Где банкомат?</h1>

</div>

<div id="YMapsID" style="width:700px; height:450px; background: #DBDBDB">

</div>

<form method="POST" enctype = "multipart/form-data">

<table style="width:700px;">

<tr align="right">

<td>

<select name="search_bank_name" title="выберите банк" style="width:563px; height:27px;">

<option value="балтийский банк">балтийский банк</option>

<option value="банк советский">банк советский</option>

<option value="мдм банк">мдм банк</option>

<option value="московский индустриальный банк">московский индустриальный банк</option>

<option value="мособлбанк">мособлбанк</option>

<option value="росбанк">росбанк</option>

<option value="россельхозбанк">россельхозбанк</option>

<option value="росэнергобанк">росэнергобанк</option>

<option value="русский стандарт">русский стандарт</option>

<option value="сбербанк">сбербанк</option>

<option value="севкомбанк">севкомбанк</option>

<option value="уралсиб">уралсиб</option>

<option value="хоум кредит">хоум кредит</option>

<option value="noname">noname</option>

</select>

</td>

<td>

<input type= "submit" value="Показать результат" style="width:134px; height:27px;"/>

</td>

</tr>

<tr>

<td>

<input type="text" name="longitude"style="visibility: hidden" />

<input type="text" name="latitude"style="visibility: hidden" />

</td>

</tr>

</table>

</form>

</center>

<?php

if (isset($_POST['search_bank_name'])){

$x = $_POST['longitude'];

$y = $_POST['latitude'];

 

$locationsX = array();

$locationsY = array();

$distances = array();

$discriptions = array();

$banks = array();

$indexes = array();

 

ini_set ('display_errors', 1); // при тестировани - 1, при работе -

ini_set ('display_startup_errors', 1); // при тестировани - 1, при работе -

ini_set ('log_errors', 1); // всегда 1. Читайте логи Апача, там будут копиться ПХП-ошибки!!!

ini_set ('error_reporting', 2047); // при тестировании - 2047, при работе - 2039

ini_set ('track_errors', 0); // Сохранять ли последнее сообщение об ошибке или предупреждение в переменной $php_errormsg

 

define ('Path', realpath (dirname (__FILE__).'/').'/');

require_once Path.'ycsvParser.class.php';

//$ycsv = new ycsvParser($_FILES['csv_file']['tmp_name'],true);

$ycsv = new ycsvParser("base.csv",true);

if (!$ycsv)

die("Cannot start a parser");

 

///echo "<center><table width=90% style='border: thin solid #DDDDDD'>";

if (count($ycsv->config)) {

///echo "<tr>";

$i=0;

$j=0;

foreach($ycsv->config as $title) {

///echo "<td>$title</td>";

if ($i==0) $indexes[$j] = $title;

if ($i==1) $locationsX[$j] = $title;

if ($i==2) $locationsY[$j] = $title;

if ($i==3) $banks[$j] = $title;

if ($i==4) $discriptions[$j] = $title;

$i++;

}

$j++;

///echo "</tr>";

}

$j=0;

while ($record = $ycsv->getRecord()) {

$res = $ycsv->parseRecord($record);

 

if (count($res)) {

///echo "<tr>";

$i=0;

foreach($res as $title) {

///echo "<td>$title</td>";

//input to array

if ($i==0) $indexes[$j] = $title;

if ($i==1) $locationsX[$j] = $title;

if ($i==2) $locationsY[$j] = $title;

if ($i==3) $banks[$j] = $title;

if ($i==4) $discriptions[$j] = $title;

$i++;

}

$j++;

}

}

$ycsv->close();

$distances = array();

$i=0;

foreach($locationsX as $item)

{

if ($locationsY[$i])

{

$distances[$i] = sqrt(($item - $x)*($item - $x)+($locationsY[$i] - $y)*($locationsY[$i] - $y));

// echo "$i: $distances[$i] <br/>";

$i++;

}

else break;

}

$distances_sort = $distances;

sort($distances_sort);

$indexes_result = array(); //в 0-ом хранит индекс ближайшего нужного

 

$i=0;

echo "<center>";

foreach($distances_sort as $item_sort)

{

$j=0;

foreach($distances as $item)

{

if (($item_sort == $item) && ($_POST['search_bank_name'] == $banks[$j]))

{

$indexes_result[$i] = $j;

//echo $j+1;

//echo ": ближайщий $banks[$j] - $item <br/>";

}

$j++;

}

$i++;

}

echo "<script type='text/javascript'>

// Создание обработчика для события window.onLoad

YMaps.jQuery(function () {

// Создание экземпляра карты и его привязка к созданному контейнеру

var map = new YMaps.Map(YMaps.jQuery('#YMapsID')[0]);";

foreach($indexes_result as $i)

{

echo "// Установка для карты ее центра и масштаба

map.setCenter(new YMaps.GeoPoint($locationsX[$i],$locationsY[$i]), 13);

 

map.enableScrollZoom();

placemark = new YMaps.Placemark(new YMaps.GeoPoint($x, $y), {style: 'default#arrowDownLeftIcon', draggable: 'true'});

placemark.name = 'Вы всё ещё здесь?';

placemark.description = 'Для уточнения своего место положения перетащите метку.';

map.addOverlay(placemark);

YMaps.Events.observe(placemark, placemark.Events.DragEnd, function (obj) {

document.forms[0].elements('longitude').value = placemark.getGeoPoint().toString().split(',')[0];

document.forms[0].elements('latitude').value = placemark.getGeoPoint().toString().split(',')[1];

});

// Запуск процесс геокодера

var geocoder = new YMaps.Geocoder(new YMaps.GeoPoint($locationsX[$i], $locationsY[$i]), {results: 1});

 

// Обработчик успешного завершения процесса геокодирования

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {

if (this.length()) {

var over = new YMaps.Placemark(this.get(0).getGeoPoint(), {style: 'default#bankIcon'});

over.name = 'Адрес ближайшего банкомата.';

over.description = this.get(0).text;

map.addOverlay(over);

map.panTo(over.getContentLayout());

//map.addOverlay(this.get(0));

//map.panTo(this.get(0).getContentLayout());

}else {

alert('не найдено')

}

});

// Обработчик неудачного завершения геокодирования

YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {

alert('Произошла ошибка: ' + error.message)

});

// Прокладывание маршрута через три станции метро

var router = new YMaps.Router([new YMaps.GeoPoint($x,$y),

new YMaps.GeoPoint($locationsX[$i],$locationsY[$i])]);

// После заверешение построения маршрута изменяем содержмое значков начальной и конечной точек

// И добавляем маршрут на карту

YMaps.Events.observe(router, router.Events.Success, function() {

router.getWayPoint(0).setIconContent('');

//router.getWayPoint(0).setStyle('default#bicycleIcon'); // png

router.getWayPoint(0).setIconContent('Начало маршрута');

//var dist = router.getDuration();

var dist = new YMaps.GeoPoint($x,$y).distance(new YMaps.GeoPoint($locationsX[$i],$locationsY[$i]));

var realDist = router.getDistance().toString().split('.')[0];

 

router.getWayPoint(1).setIconContent('Расстояние по прямой ' + dist.toString().split('.')[0] + 'м. По маршруту ' + realDist + 'м.');

map.addOverlay(router);

});

});

</script> ";

//$indexO_o = $i+1;

//echo "<b> ближайший $banks[$i]: $indexO_o </b>";

echo "</center>";

break;

}

}

?>

 


Дата добавления: 2015-11-04; просмотров: 171 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
,Әдебиет сыны - әдеби сын, көркем әдеби сын — әдебиеттану ғылымының бір саласы. Ол өмір шындығы мен әдеби шығармадағы | Вновь опустились крылья ангела мои,

mybiblioteka.su - 2015-2024 год. (0.073 сек.)