Скачать 0.74 Mb.
|
ЗАКЛЮЧЕНИЕПодведем итоги нашей работы. Была поставлена задача создания туристической карты для мобильных устройств, работающих на платформе Android. Основной идеей было создание специализированной активной карты с послойной организацией географических и семантических данных на данной карте. Разработан прототип программы, реализующий нашу идею. Программа представляет собой «электронный помощник» туриста, используя который он может познакомиться с достопримечательностями города. На следующем этапе необходимы консультации со специалистами в области туризма и аккуратное опробование на реальных пользователях. Следует отметить, что данный прототип нуждается в развитии. Перечислим некоторые идеи для дальнейшей доработки нашей системы:
ЛИТЕРАТУРА
ПРИЛОЖЕНИЕФайл AndroidManifest.xml "1.0" encoding="utf-8"?> package="com.touristmap" android:versionCode="1" android:versionName="1.0."> ".providers.ObjectViewProvider" android:authorities="com.touristmap.ObjectViewProvider"> ".providers.MuseamProvider" android:authorities="com.touristmap.MuseamProvider"> ".providers.ArhitectureProvider" android:authorities="com.touristmap.ArhitectureProvider"> ".providers.InterestProvider" android:authorities="com.touristmap.InterestProvider"> ".providers.TemplesProvider" android:authorities="com.touristmap.TemplesProvider"> ".providers.HostelProvider" android:authorities="com.touristmap.HostelProvider"> android:label="TouristMap MainMenu" android:launchMode="singleTask"> android:label="Map" /> android:label="Objects"> android:label="@string/title_view"> android:label="@string/title_view"> android:label="@string/title_view"> android:label="@string/title_view"> android:label="@string/title_view"> android:label="@string/title_view"> android:label="@string/title_view"> Файл 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 "1.0" encoding="utf-8"?> xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/mapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="0GJi6BBZP0bHZdweHL03Lq1vTlpaVxMqpoZrqMQ" /> Файл 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 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 private Stack private int stackSize = 0; public LinkedList /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { 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); // Добавляем маркер своего местоположения positionOverlay = new MyPositionOverlay(); List overlays.add(positionOverlay); theatres = getResources().getDrawable(R.drawable.h_theatre); museams = getResources().getDrawable(R.drawable.h_museum); monuments = getResources().getDrawable(R.drawable.h_memorial); interestObjects = getResources().getDrawable(R.drawable.h_view_point); temples = getResources().getDrawable(R.drawable.h_shelter); hostels = getResources().getDrawable(R.drawable.h_hotel); LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager) getSystemService(context); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); String provider = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(provider); updateWithNewLocation(location); locationManager.requestLocationUpdates(provider, 1500, 3, 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(menu)); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case IDM_SETTINGS: Intent objectsEditorActivity = new Intent(MapsActivity.this, ObjectsEditorActivity.class); startActivity(objectsEditorActivity); 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.search_menu2, null); final Button button_addr = (Button) root.findViewById(R.id.button_addr); final Button button_coord = (Button) root.findViewById(R.id.button_coord); 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.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CallSearchAddressDialog(); }; }); button_coord.setOnClickListener(new OnClickListener() { @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.setMultiChoiceItems(mObjects, mCheckedObjItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { mCheckedObjItems[which] = isChecked; } }); builderObj.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { if (!mapOverlays.isEmpty()) { mapOverlays.clear(); } else { if (mCheckedObjItems[0]) { addGroup(ObjectViewProvider.CONTENT_URI, theatres); } if (mCheckedObjItems[1]) { addGroup(MuseamProvider.CONTENT_URI, museams); } if (mCheckedObjItems[2]) { addGroup(ArhitectureProvider.CONTENT_URI, monuments); } if (mCheckedObjItems[3]) { addGroup(InterestProvider.CONTENT_URI, interestObjects); } if (mCheckedObjItems[4]) { addGroup(TemplesProvider.CONTENT_URI, temples); } if (mCheckedObjItems[5]) { addGroup(HostelProvider.CONTENT_URI, hostels); } } } }); builderObj.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); Toast.makeText(getApplicationContext(), "Dialog cancel", Toast.LENGTH_SHORT).show(); } }); builderObj.setCancelable(false); 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.getString(2)); lng = Double.parseDouble(cursor.getString(3)); 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(overlayitem); mapOverlays.add(itemizedOverlay); } //Процедура поиска по адресу private void CallSearchAddressDialog() { LayoutInflater inflater = LayoutInflater.from(this); View root = inflater.inflate(R.layout.search_address, null); final EditText textStreet = (EditText)root.findViewById(R.id.street); final EditText textHouse = (EditText)root.findViewById(R.id.house); AlertDialog.Builder b = new AlertDialog.Builder(this); b.setView(root); b.setTitle("Search by address"); b.setPositiveButton( "Ок", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String street = textStreet.getText().toString(); int house = Integer.parseInt(textHouse.getText().toString()); ReadInTxtSearch(); searchadress(street, house); if (latIsc!=0 & lonIsc !=0 ){ String text = "Широта: " + latIsc + "\nДолгота: " + lonIsc; Toast.makeText(getBaseContext(), text, Toast.LENGTH_SHORT).show(); itemizedOverlay = new HelloItemizedOverlay(null, getResources().getDrawable(R.drawable.androidmarker)); isAddLocationPoint(latIsc, lonIsc, "Искомая точка"); } else { String ErrMsg = "Адрес не найден!"; Toast.makeText(getBaseContext(), ErrMsg, Toast.LENGTH_SHORT).show(); } } }); b.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) {} }); b.show(); } //Процедура поиска по координатам private void CallSearchCoordDialog() { LayoutInflater inflater = LayoutInflater.from(this); View root = inflater.inflate(R.layout.search_coord, null); final EditText textLatitude = (EditText)root.findViewById(R.id.latitude); final EditText textLongitude = (EditText)root.findViewById(R.id.longitude); AlertDialog.Builder b = new AlertDialog.Builder(this); b.setView(root); b.setTitle("Search by coordinates"); b.setPositiveButton( "Ок", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String sslat = textLatitude.getText().toString(); String sslon = textLongitude.getText().toString(); double slat = Double.parseDouble(sslat); double slon = Double.parseDouble(sslon); Drawable SearchCoord = getResources().getDrawable(R.drawable.androidmarker); itemizedOverlay = new HelloItemizedOverlay( null, SearchCoord); isAddLocationPoint (slat,slon,"искомая точка"); } }); b.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) {} }); b.show(); } //Процедура считывания данных для поиска private void ReadInTxtSearch() { try { BufferedReader ibr = new BufferedReader( new InputStreamReader( new FileInputStream("/mnt/sdcard/insearch.txt"),"windows-1251")); String str; Scanner scanner; String[] vr; sizeSTR=Integer.parseInt(ibr.readLine()); 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 { lath[i]=-1000; lonh[i]=-1000; street[i]=" "; house[i]=-1; } for(int i = 0; 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[1]); lath[i]=Double.parseDouble(vr[2]); lonh[i]=Double.parseDouble(vr[3]); } ibr.close(); } catch(IOException ae){} }; private void searchadress(String streetIsc, int houseIsc) { streetIsc = streetIsc.toLowerCase(); int fl=0, ch=0; while ((fl==0) & (ch { if ((streetIsc.equals(street[ch])) & (houseIsc == house[ch])) { latIsc = lath[ch]; lonIsc = lonh[ch]; fl=1; } ch=ch+1; } }} |
Правила оформления дипломных работ Министерство образования и науки... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Программа дисциплины «Сценарный трейдинг» Правительство Российской... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Министерство образования и науки российской федерации федеральное... Государственное автономное образовательное учреждение дополнительного профессионального образования (повышения квалификации) специалистов... | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Правительство Российской Федерации Федеральное государственное автономное... Федеральное государственное автономное образовательное учреждение высшего профессионального образования |