Разработка информационных систем на базе мобильных интерфейсов

Автор работы: Пользователь скрыл имя, 30 Ноября 2013 в 20:08, дипломная работа

Описание работы

Что бы ни говорили, а мобильность сегодня — явление глобальное, проникающее во многие сферы нашей жизни. Почти половина всех пользователей мобильных услуг проживают в пяти странах, среди которых и Россия. Ныне потребитель ищет не просто мобильный телефон, он внимательно изучает условия, соотнося их с требованиями современного рынка. Именно поэтому можно утверждать, что развитие мобильных технологий будет только ускоряться.

Содержание работы

ВВЕДЕНИЕ 5
1. ГОРОДСКИЕ ИНФОРМАЦИОННЫЕ СИСТЕМЫ И МОБИЛЬНЫЕ ИНТЕРФЕЙСЫ 8
1.1 Введение в ГИС 8
1.2 Организация данных в ГИС 11
1.3 ГИС среди информационных технологий 17
1.4 Что ГИС могут сделать для туризма 24
1.5 Предметно ориентированные ГИС 25
1.6 Основные концепции информационной визуализации, используемые в ГИС 25
1.7 ГИС и мобильные интерфейсы 27
2. ГЕОКОДИРОВАНИЕ В ИС 28
2.1 Понятие геокодирования. 28
2.2 Назначение геокодирования 28
2.3 Методы геокодирования 29
3. ОСНОВНЫЕ ТРЕБОВАНИЯ К ТУРИСТИЧЕСКОЙ КАРТЕ 33
4. ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА РАЗРАБОТКИ 34
4.1 Операционная система Google Android 34
5. ОПИСАНИЕ ПРОЕКТА ПРИЛОЖЕНИЯ 44
5.1 Структура программы. 44
5.2 Описание компонентов программы 45
5.3 Программная реализация. 58
ЗАКЛЮЧЕНИЕ 68
ЛИТЕРАТУРА 69

Файлы: 1 файл

Diplom__Ba_va__FINAL.doc

— 2.78 Мб (Скачать файл)
    • Отображение карты (получение контроля над картой, определение вида отображения карты, добавление кнопок масштабирования, загрузка слоев)

super.onCreate(savedInstanceState);

setContentView(R.layout.map);

myMapView = (MapView) findViewById(R.id.mapView);

mapController = myMapView.getController();

myMapView.setStreetView(true);

myMapView.setBuiltInZoomControls(true);

mapOverlays = myMapView.getOverlays();

mapController.setCenter(START_POINT);

mapController.setZoom(12);

MapOverlay mapOverlay = new MapOverlay();

List<Overlay> listOfOverlays = myMapView.getOverlays();

listOfOverlays.clear();

       listOfOverlays.add(mapOverlay);

    • Создание всплывающего меню в процедуре onCreateOptionsMenu(Menu menu). Создание обработчика событий выбора пункта меню onOptionsItemSelected(MenuItem Item).
    • Создание всплывающих диалогов поиска и добавления групп объектов на карту.
    • Процедура добавления группы объектов на карту AddGroup(Uri uri, Drawable drawable)
    • Процедура добавления точки на карту isAddLocationPoint(double netlat, double netlng, String name)
    • Процедуры вызова диалогов поиска CallSearchAddressDialog(), CallSearchCoordDialog()

 

 

В файле ObjectsEditorActivity.java описывается функциональность окна poi:

    • Создается список групп объектов
    • Создание обработчика событий выбора элементов списка (групп объектов), а именно переходы на новые активити содержащие списки объектов данной группы.

В файле TheatersViewActivity.java описывается функциональность окна theaters:

    • Создается список объектов, данные о которых берутся из соответствующей базы данных
    • Создание обработчика событий выбора элементов списка
    • Процедура добавления объекта на карту CallViewOnMap()
    • Процедура отображения диалога с информацией об объекте CallObjectInfoDialog().

 файлы MuseamViewActivity.java, ArhitectureViewActivity.java, InterestViewActivity.java, TemplesViewActivity.java, HostelViewActivity.java аналогичным образом определяют структуру соответствующих окон.

Вспомогательные файлы для работы с базой данных

Рассмотрим структуру данных файлов на примере ObjectDbHelper.java. Класс ObjectDbHelper, расширяющий класс SQLiteOpenHelper представляет таблицу object базы данных. В нем объявлена структура таблицы и в методе onCreate() производится создание таблицы и заполнение её текстовыми данными при первом запуске приложения на устройстве.

public void onCreate(SQLiteDatabase db){

db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, "+ NAME + " TEXT, " + ADDRESS + " TEXT, " + LAT + " TEXT, " + LON + " TEXT);");

ContentValues values = new ContentValues();

 

values.put(NAME, "Театр Эстрады");

values.put(ADDRESS, "8 Марта 15");

values.put(LAT, "56.835662");

values.put(LON, "60.600392");

db.insert(TABLE_NAME,  NAME, values);

Файлы MuseamDbHelper.java, ArhitectureDbHelper.java, InterestDbHelper.java, TemplesDbHelper.java, HostelDbHelper.java устроены аналогичным образом.

Провайдеры

Рассмотрим структуру провайдера на примере файла класса провайдера ObjectViewProvider.java.

Класс ObjectViewProvider данного файла расширяющий базовый класс ContentProvider представляет логику доступа к содержимому базы данных object.

В методе обратного вызова onCreate() который вызывается системой при создании экземпляра ContentProvider, инициализируется объект SQLiteDatabase.

private SQLiteDatabase db;

@Override

    public boolean onCreate() {

 

        db = (new ObjectDbHelper(getContext())).getWritableDatabase();

        return (db == null) ? false : true;

    }

Метод query(Uri url, String[] projection,

            String selection, String[] selectionArgs, String sort)реализует запрос к бд.

Метод insert(Uri url, ContentValues inValues) используется для вставки данных и возвращает клиенту контент-провайдера Uri вставляемой строки.

Метод update(Uri url, ContentValues values,

            String where, String[] whereArgs) реализует модификацию данных, а метод delete(Uri url, String where, string[] whereArgs) – удаление данных.

Файлы MuseamProvider.java, InterestProvider.java, ArhitectureProvider.java, TemplesProvider.java, HostelProvider.java устроены аналогичным образом.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

 

Подведем итоги нашей работы. Была поставлена задача создания туристической карты для мобильных устройств, работающих на платформе Android. Основной идеей было создание специализированной активной карты с послойной организацией географических и семантических данных на данной карте. Разработан прототип программы, реализующий нашу идею. Программа представляет собой «электронный помощник» туриста, используя который он может познакомиться с  достопримечательностями города. На следующем этапе необходимы консультации со специалистами в области туризма и аккуратное опробование на реальных пользователях.

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

  • Создание локальной карты города, с которой можно работать без подключения к интернету.
  • Добавление возможности редактирования и сохранения информации о туристических объектах в базе данных.
  • Расширение базы данных туристических объектов.
  • Расширение файла  связи адресов и географических координат.
  • Локализация программы на различные языки

 

 

 

ЛИТЕРАТУРА

 

  1. Ципилева Т.А. - Геоинформационные системы.
  2. http://www.dataplus.ru/ - ООО "ДАТА+" – распространение в России и других странах СНГ передовых геоинформационных технологий ESRI.
  3. http://www.trisoftrus.com/ - Научно-техническая фирма Трисофт
  4. http://www.objectland.ru/ - Геоинформационная система ObjectLand
  5. Голощапов А.Л. - Google Android. Программирование для мобильных устройств
  6. Reto Meier – Professional Android™ 2 Application development
  7. Rick Rogers, John Lombardo, Zigurd Mednieks, and Blake Meike - Android Application Development
  8. Chris Haseman – Android Essentials

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ

Файл AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.touristmap" android:versionCode="1" android:versionName="1.0.">

 

<uses-sdk android:minSdkVersion="8" />

 

<application android:icon="@drawable/icon" android:label="@string/app_name">

<provider android:name=".providers.ObjectViewProvider"

android:authorities="com.touristmap.ObjectViewProvider">

</provider>

<provider android:name=".providers.MuseamProvider"

android:authorities="com.touristmap.MuseamProvider">

</provider>

<provider android:name=".providers.ArhitectureProvider"

android:authorities="com.touristmap.ArhitectureProvider">

</provider>

<provider android:name=".providers.InterestProvider"

android:authorities="com.touristmap.InterestProvider">

</provider>

<provider android:name=".providers.TemplesProvider"

android:authorities="com.touristmap.TemplesProvider">

</provider>

<provider android:name=".providers.HostelProvider"

android:authorities="com.touristmap.HostelProvider">

</provider>

 

 

 

<uses-library android:name="com.google.android.maps" />

 

<activity android:name=".activities.MainActivity"

android:label="TouristMap MainMenu"

android:launchMode="singleTask">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

 

<activity android:name=".activities.MapsActivity"

android:label="Map" />

 

<activity android:name=".activities.ObjectsEditorActivity"

android:label="Objects">

</activity>

<activity android:name=".activities.TheatersViewActivity"

android:label="@string/title_view">

</activity>

<activity android:name=".activities.MuseamViewActivity"

android:label="@string/title_view">

</activity>

<activity android:name=".activities.ArhitectureViewActivity"

android:label="@string/title_view">

</activity>

<activity android:name=".activities.InterestViewActivity"

android:label="@string/title_view">

</activity>

<activity android:name=".activities.TemplesViewActivity"

android:label="@string/title_view">

</activity>

<activity android:name=".activities.HostelViewActivity"

android:label="@string/title_view">

</activity>

<activity android:name=".activities.ViewObjectOnMapActivity"

android:label="@string/title_view">

</activity>

</application>

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

</manifest>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Файл MainActivity.java

package com.touristmap.activities;

import com.touristmap.R;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.location.LocationManager;

import android.os.Bundle;

import android.provider.Settings;

import android.view.View;

import android.widget.Button;

 

public class MainActivity extends Activity {

 

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

 

final AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage("GPS выключен")

.setCancelable(false)

.setPositiveButton("Настройки GPS", new DialogInterface.OnClickListener() {

public void onClick(final DialogInterface dialog, final int id) {

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

startActivityForResult(intent, 1);

}

})

.setNegativeButton("Отмена", new DialogInterface.OnClickListener() {

public void onClick(final DialogInterface dialog, final int id) {

finish();

}

});

final AlertDialog alert = builder.create();

alert.show();

}

       

        final Button button_map = (Button) findViewById (R.id.button_map);

        button_map.setOnClickListener(new View.OnClickListener() {

 

@Override

public void onClick(View v) {

Intent mapsActivity = new Intent(MainActivity.this,MapsActivity.class);

     startActivity(mapsActivity);

 

}

});

       

        final Button button_settings = (Button) findViewById (R.id.button_poi);

        button_settings.setOnClickListener(new View.OnClickListener() {

 

@Override

public void onClick(View v) {

Intent objectsEditorActivity = new Intent(MainActivity.this,ObjectsEditorActivity.class);

     startActivity(objectsEditorActivity);

}

});

       

        final Button button_exit = (Button) findViewById (R.id.button_exit);

        button_exit.setOnClickListener(new View.OnClickListener() {

 

@Override

public void onClick(View v) {

finish();

}

});

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Файл map.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent">

  <com.google.android.maps.MapView

    android:id="@+id/mapView"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:enabled="true"

    android:clickable="true"

    android:apiKey="0GJi6BBZP0bHZdweHL03Lq1vTlpaVxMqpoZrqMQ"

  />

</LinearLayout>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Файл MapsActivity.java

package com.touristmap.activities;

import android.net.Uri;

import android.os.Bundle;

import com.touristmap.DirectionPathOverlay;

import com.touristmap.HelloItemizedOverlay;

import com.touristmap.MyPositionOverlay;

import com.touristmap.ObjectDbHelper;

import com.touristmap.R;

import com.google.android.maps.GeoPoint;

import com.google.android.maps.MapActivity;

import com.google.android.maps.MapController;

import com.google.android.maps.MapView;

import com.google.android.maps.Overlay;

import com.google.android.maps.OverlayItem;

import com.touristmap.activities.MapsActivity;

import com.touristmap.providers.ArhitectureProvider;

import com.touristmap.providers.HostelProvider;

import com.touristmap.providers.InterestProvider;

import com.touristmap.providers.MuseamProvider;

import com.touristmap.providers.ObjectViewProvider;

import com.touristmap.providers.TemplesProvider;

import android.app.AlertDialog;

import android.app.Dialog;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.database.Cursor;

import android.graphics.drawable.Drawable;

import android.location.Address;

import android.location.Criteria;

import android.location.Geocoder;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.util.*;

 

public class MapsActivity extends MapActivity {

MapController mapController;

MyPositionOverlay positionOverlay;

 

private String[] street;

private int[] house;

private double[] lath;

private double[] lonh;

private int sizeSTR=-1;

private String streetIsc="ленина";

private int houseIsc = 47;

private double latIsc=0;

private double lonIsc=0;

public static final int IDM_SETTINGS = 101;

public static final int IDM_ADD_OBJ = 102;

public static final int IDM_ADD_ROUTE = 103;

public static final int IDM_PATH_TEST = 104;

public static final int IDM_SEARCH = 105;

public static final int IDM_EXIT = 106;

private final static int IDD_OBJECTS = 0;

private final static int IDD_ADD_TOURIST_ROUTE = 1;

private final static int IDD_COLLECT_ROUTE=2;

final CharSequence[] mObjects = { "Theaters", "Museams", "Monuments", "Interest Objects", "Temples", "Hostels" };

final boolean[] mCheckedObjItems = { false, false, false, false, false, false };

final boolean[] mCheckedPathItems = { false, false, false, false, false, false };

final CharSequence[] mRouteObj = { "Памятник первому паравозу", "гостиница Свердловск", "Усадьба Расторгуева-Харитонова", "Храм-на-крови", "Отель Вознесенский", "Галерея Эгида", "Коляда-театр", "Площадь Советской Армии", "Театр Музыкальной Комедии", "Гостиница Исеть", "Памятник “Первая конная”" };

final boolean[] mCheckedRouteObjItems = { false, false, false, false, false, false, false, false, false, false, false};

private static final String[] mCoord = new String[] { ObjectDbHelper._ID,

ObjectDbHelper.NAME, ObjectDbHelper.LAT, ObjectDbHelper.LON };

public static String NLAT = "nlat";

public static String NLNG = "nlng";

List<Overlay> mapOverlays;

HelloItemizedOverlay itemizedOverlay;

MapView myMapView;

double lat;

double lng;

private double[] latiC;

private double[] longC;

private String[] nameC;

Drawable theatres;

Drawable museams;

Drawable monuments;

Drawable interestObjects;

Drawable temples;

Drawable hostels;

String path = "/mnt/sdcard/OutCoord.txt";

String coord = "/mnt/sdcard/coord.txt";

String in = "/mnt/sdcard/in.txt";

String out = "/mnt/sdcard/out.txt";

String out_coord = "/mnt/sdcard/OutCoord.txt";

private int[][] A;

private int s, t;

private int size = -1;

int[] d;

private Stack<Integer> st;

private Stack<Integer> st1;

private int stackSize = 0;

public LinkedList<Integer> l = new LinkedList<Integer>();

 

/** Called when the activity is first created. */

Информация о работе Разработка информационных систем на базе мобильных интерфейсов