Автор работы: Пользователь скрыл имя, 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
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(
setContentView(R.layout.map);
myMapView = (MapView) findViewById(R.id.mapView);
mapController = myMapView.getController();
myMapView.setStreetView(true);
myMapView.
mapOverlays = myMapView.getOverlays();
mapController.setCenter(START_
mapController.setZoom(12);
// Добавляем маркер своего местоположения
positionOverlay = new MyPositionOverlay();
List<Overlay> overlays = myMapView.getOverlays();
overlays.add(positionOverlay);
theatres = getResources().getDrawable(R.
museams = getResources().getDrawable(R.
monuments = getResources().getDrawable(R.
interestObjects = getResources().getDrawable(R.
temples = getResources().getDrawable(R.
hostels = getResources().getDrawable(R.
LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) getSystemService(context);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.
criteria.setAltitudeRequired(
criteria.setBearingRequired(fa
criteria.setCostAllowed(true);
criteria.setPowerRequirement(
String provider = locationManager.
Location location = locationManager.
updateWithNewLocation(location
locationManager.
locationListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, IDM_SETTINGS, Menu.NONE, "POI")
.setAlphabeticShortcut('p');
menu.add(Menu.NONE, IDM_ADD_OBJ, Menu.NONE, "Add objects")
.setAlphabeticShortcut('a');
menu.add(Menu.NONE, IDM_ADD_ROUTE, Menu.NONE, "Route")
.setAlphabeticShortcut('r');
menu.add(Menu.NONE, IDM_SEARCH, Menu.NONE, "Search")
.setAlphabeticShortcut('s');
menu.add(Menu.NONE, IDM_EXIT, Menu.NONE, "Exit").setAlphabeticShortcut(
'x');
return (super.onCreateOptionsMenu(
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case IDM_SETTINGS:
Intent objectsEditorActivity = new Intent(MapsActivity.this, ObjectsEditorActivity.class);
startActivity(
item.setChecked(true);
break;
case IDM_ADD_OBJ:
showDialog(IDD_OBJECTS);
item.setChecked(true);
break;
case IDM_SEARCH:
LayoutInflater inflater = LayoutInflater.from(this);
View root = inflater.inflate(R.layout.
final Button button_addr =
(Button) root.findViewById(R.id.button_
final Button button_coord
= (Button) root.findViewById(R.id.button_
button_addr.setText("Search by address");
button_coord.setText("Search by coordinates");
AlertDialog.Builder menu = new AlertDialog.Builder(this);
menu.setView(root);
menu.show();
button_addr.
@Override
public void onClick(View v) {
CallSearchAddressDialog();
};
});
button_coord.
@Override
public void onClick(View v) {
CallSearchCoordDialog();
};
});
item.setChecked(true);
break;
case IDM_EXIT:
System.exit(0);
break;
default:
return false;
}
return true;
}
// Меню с чекбоксами для добавления групп объектов на карту
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case IDD_OBJECTS:
AlertDialog.Builder builderObj = new AlertDialog.Builder(this);
builderObj.setTitle("Add group objects");
builderObj.
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
mCheckedObjItems[which] = isChecked;
}
});
builderObj.setPositiveButton("
public void onClick(DialogInterface dialog, int id) {
if (!mapOverlays.isEmpty()) {
mapOverlays.clear();
} else {
if (mCheckedObjItems[0]) {
addGroup(ObjectViewProvider.
}
if (mCheckedObjItems[1]) {
addGroup(MuseamProvider.
}
if (mCheckedObjItems[2]) {
addGroup(ArhitectureProvider.
}
if (mCheckedObjItems[3]) {
addGroup(InterestProvider.
}
if (mCheckedObjItems[4]) {
addGroup(TemplesProvider.
}
if (mCheckedObjItems[5]) {
addGroup(HostelProvider.
}
}
}
});
builderObj.setNegativeButton("
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
Toast.makeText(
}
});
builderObj.setCancelable(
return builderObj.create();
// Процедура Добавления группы объектов на карту
private void addGroup(Uri uri, Drawable drawable) {
Cursor cursor = managedQuery(uri, mCoord, "_ID", null, null);
int count = cursor.getCount();
latiC = new double[count];
longC = new double[count];
nameC = new String[count];
for (int i = 0; i < count; i++) {
latiC[i] = -1;
longC[i] = -1;
nameC[i] = "";
}
for (int i = 0; i < count; i++) {
cursor.moveToPosition(i);
lat = Double.parseDouble(cursor.
lng = Double.parseDouble(cursor.
latiC[i] = lat;
longC[i] = lng;
nameC[i] = cursor.getString(1);
}
double nl, nlg;
itemizedOverlay = new HelloItemizedOverlay(this, drawable);
try {
for (int i = 0; i < count; i++) {
nl = latiC[i];
nlg = longC[i];
String name = nameC[i];
isAddLocationPoint(nl, nlg, name);
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
// Процедура добавления точки на карту
public void isAddLocationPoint(double netlat, double netlng, String name) {
GeoPoint point = new GeoPoint((int) (netlat * 1E6),
(int) (netlng * 1E6));
String coord = "Широта: " + netlat + "\nДолгота: " + netlng;
// Создаем точку и текст появляющийся при нажатии
OverlayItem overlayitem = new OverlayItem(point, name, coord);
// Положение карты при запуске в точке point
mapController.animateTo(point)
mapController.setZoom(13);
// Добавляем точку на карту
itemizedOverlay.addOverlay(
mapOverlays.add(
}
//Процедура поиска по адресу
private void CallSearchAddressDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View root = inflater.inflate(R.layout.
final EditText textStreet = (EditText)root.findViewById(R.
final EditText textHouse = (EditText)root.findViewById(R.
AlertDialog.Builder b = new AlertDialog.Builder(this);
b.setView(root);
b.setTitle("Search by address");
b.setPositiveButton(
"Ок", new DialogInterface.
public void onClick(DialogInterface dialog, int whichButton) {
String street = textStreet.getText().toString(
int house = Integer.parseInt(textHouse.
ReadInTxtSearch();
searchadress(street, house);
if (latIsc!=0 & lonIsc !=0 ){
String text = "Широта: " + latIsc + "\nДолгота: "
+ lonIsc;
Toast.makeText(
itemizedOverlay = new HelloItemizedOverlay(null, getResources().getDrawable(R.
isAddLocationPoint(latIsc, lonIsc, "Искомая точка");
}
else {
String ErrMsg = "Адрес не найден!";
Toast.makeText(
}
}
});
b.setNegativeButton(
"Cancel", new DialogInterface.
public void onClick(DialogInterface dialog, int whichButton) {}
});
b.show();
}
//Процедура поиска по координатам
private void CallSearchCoordDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View root = inflater.inflate(R.layout.
final EditText textLatitude = (EditText)root.findViewById(R.
final EditText textLongitude = (EditText)root.findViewById(R.
AlertDialog.Builder b = new AlertDialog.Builder(this);
b.setView(root);
b.setTitle("Search by coordinates");
b.setPositiveButton(
"Ок", new DialogInterface.
public void onClick(DialogInterface dialog, int whichButton) {
String sslat = textLatitude.getText().
String sslon = textLongitude.getText().
double slat = Double.parseDouble(sslat);
double slon = Double.parseDouble(sslon);
Drawable SearchCoord = getResources().getDrawable(R.
itemizedOverlay = new HelloItemizedOverlay( null, SearchCoord);
isAddLocationPoint (slat,slon,"искомая точка");
}
});
b.setNegativeButton(
"Cancel", new DialogInterface.
public void onClick(DialogInterface dialog, int whichButton) {}
});
b.show();
}
//Процедура считывания данных для поиска
private void ReadInTxtSearch()
{
try
{
BufferedReader ibr = new BufferedReader(
new InputStreamReader(
new FileInputStream("/mnt/sdcard/
String str;
Scanner scanner;
String[] vr;
sizeSTR=Integer.parseInt(
street = new String [sizeSTR];
house = new int [sizeSTR];
lath = new double [sizeSTR];
lonh = new double [sizeSTR];
vr = new String [4];
int a;
for(int i = 0; i<sizeSTR; i++)
{
lath[i]=-1000;
lonh[i]=-1000;
street[i]=" ";
house[i]=-1;
}
for(int i = 0; i<sizeSTR; i++)
{
for (int j=0;j<4;j++)
{
vr[j]="";
}
a=0;
str=ibr.readLine();
scanner = new Scanner(str);
while (scanner.hasNext())
{
vr[a]=scanner.next();
a=a+1;
}
street[i]=vr[0];
house[i]=Integer.parseInt(vr[
lath[i]=Double.parseDouble(vr[
lonh[i]=Double.parseDouble(vr[
}
ibr.close();
}
catch(IOException ae){}
};
private void searchadress(String streetIsc, int houseIsc)
{
streetIsc = streetIsc.toLowerCase();
int fl=0, ch=0;
while ((fl==0) & (ch<sizeSTR))
{
if ((streetIsc.equals(street[ch])
{
latIsc = lath[ch];
lonIsc = lonh[ch];
fl=1;
}
ch=ch+1;
}
}}
Файл ObjectsEditorActivity.java
package com.touristmap.activities;
import com.touristmap.R;
import android.os.Bundle;
import android.app.ListActivity;
import android.content.Intent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ObjectsEditorActivity extends ListActivity {
/** Called when the activity is first created. */
private int mId = -1;
String[] mObjectsClass = { "Theaters", "Museams", "Monuments",
"Interest Objects", "Temples", "Hostels" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceSt
setContentView(R.layout.
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_
}
public void onListItemClick(ListView parent, View v, int position, long id) {
mId = position;
switch (mId) {
case 0: {
Intent intent = new Intent();
intent.setClass(this, TheatersViewActivity.class);
startActivity(intent);
}
break;
case 1: {
Intent intent = new Intent();
intent.setClass(this, MuseamViewActivity.class);
startActivity(intent);
}
break;
case 2: {
Intent intent = new Intent();
intent.setClass(this, ArhitectureViewActivity.class)
startActivity(intent);
}
break;
case 3: {
Intent intent = new Intent();
intent.setClass(this, InterestViewActivity.class);
startActivity(intent);
}
break;
case 4: {
Intent intent = new Intent();
intent.setClass(this, TemplesViewActivity.class);
startActivity(intent);
}
break;
case 5: {
Intent intent = new Intent();
intent.setClass(this, HostelViewActivity.class);
startActivity(intent);
}
break;
}
}
}
Файл TheatersViewActivity.java
package com.touristmap.activities;
import com.touristmap.ObjectDbHelper;
import com.touristmap.R;
import com.touristmap.providers.
import android.os.Bundle;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ListAdapter;
import android.widget.
import android.widget.Toast;
import android.content.Intent;
public class TheatersViewActivity extends ListActivity {
private Cursor mCursor;
private ListAdapter mAdapter;
private String netlat;
private String netlng;
double lat;
double lng;
private static final String[] mContent = new String[] { ObjectDbHelper._ID,
ObjectDbHelper.NAME, ObjectDbHelper.ADDRESS };
private static final String[] displayContent = new String[] {
ObjectDbHelper.NAME, ObjectDbHelper.ADDRESS };
int[] displayViews = new int[] { R.id.ObjectName, R.id.ObjectAddress };
private int infId;
private static final String[] mCoord = new String[] { ObjectDbHelper._ID,
ObjectDbHelper.LAT, ObjectDbHelper.LON };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(
mCursor = managedQuery(
null, null);
mAdapter = new SimpleCursorAdapter(this, R.layout.object_view, mCursor,
displayContent, displayViews);
setListAdapter(mAdapter);
}
public void onListItemClick(ListView parent, View v, int position, long id) {
infId = position;
Cursor cursor = managedQuery(
"_ID", null, null);
cursor.moveToPosition(
String text = "Широта: " + cursor.getString(1) + "\nДолгота: "
+ cursor.getString(2);
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
netlat = cursor.getString(1);
netlng = cursor.getString(2);
LayoutInflater inflater = LayoutInflater.from(this);
View root = inflater.inflate(R.layout.obje
final Button button_add = (Button) root.findViewById(R.id.button_
final Button button_info = (Button) root.findViewById(R.id.button_
final Button button_route = (Button) root.findViewById(R.id.button_
button_add.setText("Add on Map");
button_info.setText("Informati
button_route.setText("
AlertDialog.Builder menu = new AlertDialog.Builder(this);
menu.setView(root);
menu.show();
button_info.
@Override
public void onClick(View v) {
CallObjectInfoDialog();
};
});
button_add.setOnClickListener(
@Override
public void onClick(View v) {
CallViewOnMap();
};
});
button_route.
@Override
public void onClick(View v) {
};
});
}
private void CallViewOnMap(){
Intent intent = new Intent();
intent.setClass(this, ViewObjectOnMapActivity.class)
intent.putExtra(MapsActivity.N
intent.putExtra(MapsActivity.N
startActivity(intent);
finish();
}
private void CallObjectInfoDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View root = inflater.inflate(R.layout.obje
final TextView textName = (TextView) root.findViewById(R.id.name);
final TextView textPhone = (TextView) root.findViewById(R.id.address
mCursor.moveToPosition(infId);
textName.setText(mCursor.
textPhone.setText(mCursor.
AlertDialog.Builder b = new AlertDialog.Builder(this);
b.setView(root);
b.show();
}
}
Файл ObjectViewProvider.java
package com.touristmap.providers;
import java.util.HashMap;
import com.touristmap.ObjectDbHelper;
import android.content.
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.
import android.net.Uri;
import android.text.TextUtils;
public class ObjectViewProvider extends ContentProvider {
public static final String DB_OBJECTS = "objects.db";
public
static final Uri CONTENT_URI = Uri.parse("content://com.
public static final int URI_CODE = 1;
public static final int URI_CODE_ID = 2;
private static final UriMatcher mUriMatcher;
private static HashMap<String, String> mObjectMap;
private SQLiteDatabase db;
static {
mUriMatcher = new UriMatcher(UriMatcher.NO_
mUriMatcher.addURI("com.
Информация о работе Разработка информационных систем на базе мобильных интерфейсов