顯示具有 Maps 標籤的文章。 顯示所有文章
顯示具有 Maps 標籤的文章。 顯示所有文章

2011年7月28日 星期四

在 MapView 中新增一個 View

當點擊地標後,如果需要顯示一個按鈕,那就需要另外加入一個包含著按鈕的 View ,而在本篇則會記錄一下如何利用 Layout 產生一個客製化的 View ,並加入至 MapView 中顯示。

Layout 部分 pop.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"
>
<TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/textView1"></TextView>
<Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

</LinearLayout>
首先必須先建立一個 Layout ,之後將在主程式內製成一個客製化的 View ,以用來點擊地標後顯示;這個 Layout 可以直接利用 XML 編寫,或是利用 Eclipse 圖形介面做設計。




exMap 原始碼 :
public class exMap extends MapActivity {
/** Called when the activity is first created. */
GeoPoint mGeoPoint01,mGeoPoint02;
ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
Context mContext;
View popView;
MapController mMapController;
MapView mMapView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

CreatPopView();

mMapView = (MapView)findViewById(R.id.mapview);
mMapView.addView(popView,new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,MapView.LayoutParams.WRAP_CONTENT, null, MapView.LayoutParams.BOTTOM_CENTER));
mMapView.setBuiltInZoomControls(true);
mMapView.setTraffic(false);
mMapController = mMapView.getController();
mMapController.setZoom(17);
mGeoPoint01 = new GeoPoint(24121194,120675526);
mGeoPoint02 = new GeoPoint(24123689,120672358);
mMapController.animateTo(mGeoPoint01);


List<Overlay> list = mMapView.getOverlays();
MyOverlay mOverlay = new MyOverlay(getResources().getDrawable(R.drawable.icon),this);

OverlayItem mOverlayItem01 = new OverlayItem(mGeoPoint01,"這裡是地標01","點擊地標");
OverlayItem mOverlayItem02 = new OverlayItem(mGeoPoint02,"這裡是地標02","點擊地標");
mOverlay.addItem(mOverlayItem01);
mOverlay.addItem(mOverlayItem02);
list.add(mOverlay);
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

public void CreatPopView(){
popView = LayoutInflater.from(this).inflate(R.layout.pop, null);
Button btn = (Button) popView.findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
popView.setVisibility(View.GONE);
}
});
popView.setVisibility(View.GONE);
}

class MyOverlay extends ItemizedOverlay<OverlayItem>{
public MyOverlay(Drawable defaultMarker,Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}

@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return items.get(i);
}

@Override
public int size() {
// TODO Auto-generated method stub
return items.size();
}

@Override
protected boolean onTap(int index) {
popView.setVisibility(View.VISIBLE);
MapView.LayoutParams geoLP = (MapView.LayoutParams)popView.getLayoutParams();
Button btn = (Button)popView.findViewById(R.id.button1);
TextView text = (TextView)popView.findViewById(R.id.textView1);

geoLP.point = items.get(index).getPoint();
geoLP.x=15;
geoLP.y=-40;
btn.setText("PUSH");
text.setText(items.get(index).getTitle());
text.setTextColor(Color.MAGENTA);
mMapController.animateTo(items.get(index).getPoint());
mMapView.updateViewLayout(popView, geoLP);
return true;
}

public void addItem(OverlayItem item){
items.add(item);
populate();
}
}
}
在主程式這邊,首先要把剛剛的 Layout 新建為一個自訂的 View ;做法則是利用 LayoutInflater 類別,用法如下程式碼,from(this) 是指定目前使用的這個 context,inflate() 方法將 reslurce 中的 pop.xml 這個 layout 格式製成一個 View , 指定的 root View 為 null ,代表使用這個製成的 View 做為 root。
popView = LayoutInflater.from(this).inflate(R.layout.pop, null);

接著就可以取得 popView 裡的物件來使用,並監聽與設定按鈕按下時該做的動作,在這邊設定為將按鈕按下後即不顯示 popView。在程式初始後沒多久,就可以靠著呼叫 CreatPopView() 這個自訂方法來創建 popView 物件,不過 popView 物件雖然已經建立,但是在創建的初始值中,是將這個 View 設為不顯示,所以在程式執行後是看不到這個建立的 View,直到點擊地標後才會顯示。

為了在點擊地標後能夠控制顯示在 MapView 中的位置,所以在創建 MapView 後還必須將 popView 物件加入,並加入 MapView 相關 Layout 參數,之後才能夠在地圖上指定顯示位置。


接著就需要來看點擊地標後的執行動作,較為重要的是取得 MapView 的 LayoutParams ,利用取得的 LayoutParams 就可以設定顯示在地圖上的哪個位置,設定的方式可以利用經緯度也可以利用 GeoPoint ,這邊的例子使用的是 GeoPoint。

點擊地標後可以利用 getPoint() 取得點擊的地標位置,並回傳給 geoLP 這個 LayoutParams 物件的 point ,之後可以用 geoLP.x 和 geoLP.y 設定其 x、y座標的位移,達成控制顯示在螢幕上的位置。

在這順便記錄一下 Android 的繪圖座標系統,螢幕左上角為原點 (0,0) ,往右 X 值增加,往下 Y 值增加,以剛剛所提到的 geoLP 為例,當取得地標的 point 位置時,如果要將 PopView 放置在地標上方,則 Y 值必須減少,又因為 geoLP.x 和 geoLP.y 為 popView 與 MapView 的相對位置,所以只需要填寫差距值即可。


執行畫面 :

X 與 Y 皆無設定的狀態


X 與 Y 皆設為 0 ,與上圖比較可看出預設值即為0


當 X 為正值,Y為負值時,View則往右上角移動

如果要改變點擊地標產生的畫面,可以輕易的改變 Layout 來完成

2011年7月27日 星期三

2011-07-27 UCampusMap 功能畫面

本篇僅是目前地圖功能的畫面與記錄,因為未來的資料庫會有變動,所以暫時將目前的狀況做一個簡單的記錄,以供之後做參考。目前程式撰寫的部分著重在未來擴充性及維護的設計面上,而非功能性或畫面美觀,所以在這個版本與前一個版本的功能上差異並不大。

Map 基礎物件簡介

目前 Map 的架構下,在新增不同類型的地標時比之前更為容易,除了原本負責向 DB 要資料的 queryDB 這個類別外,還有 MarkerOverlay 類別負責建立地標圖層和 MarkerPoint 類別負責存取地標資訊。


queryDB 類別
接收到 query 的位址或是包含需求欄位與判斷值的要求,向遠端的 AP 做查詢的要求,並取回 JSON 格式資料,此 JSON 資料將存在於 queryDB 物件中,經由操作 queryDB 物件可以取出查詢到的資料甚至於將 queryDB 中的 JSON 物件取出。

MarkerOverlay 類別
在建構 MarkerOverlay 物件時,可以依照不同類別的資料創建,代表著不同類別的資料分別放在不同的圖層中,方便未來的維護;而在點擊地標時可將地標移至畫面中央,並跳出一個可點擊的按鈕,經由點擊此按鈕得到更多相關的資訊;點擊按鈕後的相關資訊由另外的類別作維護,將建構地標的資訊以及地標本身所包含的資訊做分割,好處在於可以需要的時候再向 DB 作要求,一方面可以減少 query 時傳遞的資料量,另一方面也可以降低行動裝置內存在著許多不需要的資訊。


MarkerPoint 類別
繼承自 GeoPoint 類別,並包含了建構地標時所需要的資料;像是地標的位置或是需要顯示的標題等等,都可以經由操作此類別物件而取得。目前的版本因為資料庫還不確定,所以取得資料的操作還需要將所需欄位名稱傳入當參數,未來等資料庫確定後,將改成直接取得資料的方式而不需要再傳欄位名稱,而不同類型所產生的物件將可取得不同的資料。可做為類似功能快速開發的基礎類別。


PointInformation 類別
此類別負責地標的完整資訊,而非建構資訊,物件的建立是在點擊地標後再點擊所產生的按鈕時才產生,而不是程式執行時就建立,物件建立後會再建立一個 queryDB 物件,並經由此物件取得地標的完整訊息,並將訊息呈現於螢幕上;目前此類別是將資訊與呈現方式包在一起,未來將此兩項分開,以達到更大的彈性。

Map 功能畫面
目前畫面上會顯示所有類型的地標,藍色水滴狀的地標為餐廳類型,小的招牌形狀地標為行政單位類型;畫面右上角有一個較大類似招牌的圖示按鈕,目前功能撰寫中,將規劃為類別按鈕,點擊此按鈕後可以叫出地標類型選單以供選擇,且未來在畫面上並不會顯示所有類型的地標,而是依照使用者選擇的類型做變動。

這個圖示按鈕並不是由地圖圖層所產生,如果由圖層所繪製,則地圖移動時按鈕也會跟著移動;這邊的做法是利用 Layout 去做規劃,所以這是個圖示按鈕,也因為如此規劃才能在點擊後同時在地圖畫面上顯示一個類型列表。

另外還有一個外面包覆一圈白色環狀的小藍點,這個是由 MyLocationOverlay 這個類別所產生,藍點的位置為目前定位的位置,外面的藍色範圍為誤差範圍,誤差範圍依照不同的定位方式而有所不同,如果有 WIFI 訊號可以利用則較 3G 訊號準確,GPS 只能在室外使用。


WIFI 及 GPS 關閉,利用 3G 訊號定位,誤差範圍較大。



同時開啟 WIFI 及 3G 時 ,定位自動採取 WIFI 訊號,誤差範圍縮小,定位位置也靠近資科大樓。


點選行政單位地標,地標移至畫面中央,顯示地標標題按鈕,並可點擊按鈕


點擊按鈕之後,跳至下一個頁面,頁面為單位相關資料


返回上一頁,並點擊餐廳地標,同樣的顯示地標標題按鈕,並可點擊


依據不同類型的地標,顯示不同的地標資料,目前餐廳資料只存有電話號碼



將地圖縮小可以很清楚的看到因為比例尺的不一樣,所有地標幾乎合在一起,但右上角的類別按鈕卻同樣的保持在螢幕的右上角。

Google Map ItemizedOverlay 使用

這個部分會來簡介一下如何使用 ItemizedOverlay 來達到放至地標在地圖上,並且點選地標可以顯示相關訊息的功能。

ItemizedOverlay

ItemizedOverlay 是繼承自 Overlay 的抽象物件,所以也必須要先實做,當實做 ItemizedOverlay 時,除了建構子外有兩個必須要覆寫的方法,一個是 creamItem() 另一個是 size() ,如果需要對地標做點擊的動作,那就需要再覆寫 onTap() 這個方法,首先來看一下完整的原始碼 (此處把 import 的部分刪除) :
public class exMap extends MapActivity {
/** Called when the activity is first created. */
GeoPoint mGeoPoint01,mGeoPoint02;
ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
Context mContext;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MapView mMapView = (MapView)findViewById(R.id.mapview);
mMapView.setBuiltInZoomControls(true);
mMapView.setTraffic(false);
MapController mMapController = mMapView.getController();
mMapController.setZoom(17);
mGeoPoint01 = new GeoPoint(24121194,120675526);
mGeoPoint02 = new GeoPoint(24121190,120675520);
mMapController.animateTo(mGeoPoint01);


List<Overlay> list = mMapView.getOverlays();
MyOverlay mOverlay = new MyOverlay(getResources().getDrawable(R.drawable.icon),this);

OverlayItem mOverlayItem01 = new OverlayItem(mGeoPoint01,"這裡是地標01","點擊地標");
OverlayItem mOverlayItem02 = new OverlayItem(mGeoPoint02,"這裡是地標02","點擊地標");
mOverlay.addItem(mOverlayItem01);
mOverlay.addItem(mOverlayItem02);
list.add(mOverlay);
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

class MyOverlay extends ItemizedOverlay<OverlayItem>{
public MyOverlay(Drawable defaultMarker,Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}

@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return items.get(i);
}

@Override
public int size() {
// TODO Auto-generated method stub
return items.size();
}

@Override
protected boolean onTap(int index) {
OverlayItem item = items.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}

public void addItem(OverlayItem item){
items.add(item);
populate();
}
}
}
先來看一下 ItemizedOverlay 在此處的執行流程 :
  1. 實做 ItemizedOverlay 類別,覆寫 createItem() 與 size() 兩個方法。
  2. 新增 addItem() 用來將地標加入
  3. 覆寫 onTap() 方法,可執行暗地標所需動作
  4. 在 MapActivity 中新增地圖
  5. 接著取得 MapView 中存放圖層的 List
  6. 建立 ItemizedOverlay 物件,並傳入地標圖示
  7. 建立地標點
  8. 將地標點加入至 ItemizedOverlay 物件中
  9. 將 ItemizedOverlay 物件加入至存放圖層的 List

建立 ItemizedOverlay 類別

這裡實做 ItemizedOverlay 需要傳入兩個參數,一個是地標的圖示另一個是要使用的 Context,這個 Context 是之後要用來顯示點選地標時所顯示的對話框,createItem() 在這裡雖然沒有直接被呼叫,但是在 addItem 中的 populate() 會去呼叫 createItem() ,所以當我們使用 addItem() 將地標加入圖層時,也同時可以利用 createItem() 做初始化的動作。當必須要使用到點選地標的功能時,則需要覆寫 onTap() 方法,這個方法可以讀入點選的地標號碼並取得 OverlayItem 物件,取得後即可作物件的相關操作。


建立與使用 ItemizedOverlay 物件
除了要建立 ItemizedOverlay 物件外,對於地標物件的建立也是必須的,基本的地標物件包含了 GeoPoint 物件、標題以及簡短內文;地標必須加入至圖層,圖層在繪製的時候才會有此地標,並且這個圖層也必須加入至 MapView 中存放圖層的 List 中,才會真正的被繪出。



實際執行畫面


兩個地標




點選中間第一個座標




點選左上角第二個座標

2011年7月26日 星期二

Google Map Overlay 使用

當使用 Map 時需要在地圖上使用一些座標圖示或是繪圖等功能,這時候就需要在原本的地圖上加上圖層,利用圖層就可以達成並且可以針對不同的圖層給予不同的功能,方便於管理與設計。

Overlay

Overlay是一個抽象類別,所以必須在使用前,先建立一個繼承自此抽象類別的自訂圖層類別,並將需求的功能實做,這裡用一個簡單的例子來說明如何使用圖層,範例功能將利用圖示顯示 animateTo(GeoPoint) 所設定的座標。

原始碼 :

package com.nchu.exMap;

import java.util.ArrayList;
import java.util.List;

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 android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;

public class exMap extends MapActivity {
/** Called when the activity is first created. */
GeoPoint mGeoPoint;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MapView mMapView = (MapView)findViewById(R.id.mapview);
mMapView.setBuiltInZoomControls(true);
mMapView.setTraffic(false);
MapController mMapController = mMapView.getController();
mMapController.setZoom(17);
mGeoPoint = new GeoPoint(24121194,120675526);
mMapController.animateTo(mGeoPoint);

MyOverlay mOverlay = new MyOverlay();
List<Overlay> list = mMapView.getOverlays();
list.add(mOverlay);
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

class MyOverlay extends Overlay{
public void draw(Canvas canvas,MapView mapView,boolean shadow){
Paint mPaint = new Paint();
Point mScreenCoords = new Point();
mapView.getProjection().toPixels(mGeoPoint, mScreenCoords);
mPaint.setStrokeWidth(1);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
canvas.drawBitmap(bmp, mScreenCoords.x, mScreenCoords.y,mPaint);
canvas.drawText("地圖中心點", mScreenCoords.x, mScreenCoords.y, mPaint);
}
}
}
首先來看一下 MyOverlay 這個類別,繼承自 Overlay 這個抽象類別,並實作 draw() 這個方法, Paint 為畫筆物件,利用此物件可以設定筆觸的大小或式風格等;而 Point 物件則是螢幕的點,接著利用 getProjection() 所取得的 projection 物件做經緯度與螢幕位置的轉換;我們所要貼的圖可以事先放入 Resource 中,再經由 BitmapFactory 的 decodeResource 取得,最後利用drawBitmap 或是 drawText 將圖或文字繪出。

接著來看如何使用 MyOverlay 類別,建立 MyOverlay 物件的方法跟一般物件建立方法沒什麼兩樣,但是建立出來的圖層必須加入到目前所使用的 MapView 中,不然的話就只是一個毫無用途的物件,首先我們必須取得 MapView 中存放 Overlay 的容器,放在這個容器內的 Overlay 才會被繪出,方法為
List<Overlay> list = mMapView.getOverlays();
要注意的是此處 getOverlays() 所回傳的是 List<Overlay< 所以無法使用 ArrayList 做為代替,最後只要將建立的 Overlay 物件嫁入至此容器中即可。

以下為執行畫面,可以看到中心點已經繪出紅色的 "地圖中心點" 五字,並且在下方貼了一張圖。

Android 上使用 Google Map API

當新建一個 Android 的專案時,可以選擇要使用的 API 版本,要注意的是一般的 Android API 版本並不包含 Google Map API,所以當需要使用到 Google Map API 時則需要選擇 Target name 為 Google APIs 的選項,並配合所需要的版本,使用前還必須申請一個 Android Map API Key。



申請 Android Map API Key

申請 Key 必須要有系統的證明書以及一個 Google 帳號,測試用的可以利用 Debug 的證書,不過未來如果需要發佈的話,則需要一份利用所要發佈的程式產生的 MD5 證書,並利用此證明書去申請 Key 之後才能發佈。
詳細申請步驟可以參考 Google 說明頁面 : Obtaining a Maps API Key

Debug 證書的路徑在 Eclipse 中選擇 Windows > Preference > Android > Build,其中的 Default debug keystore 的值就是 debug.keystore 的路徑。得知此路徑後就可以利用 keytool 指令取得MD5值,指令為 keytool -list -keystore debug.keysotre

接著利用剛剛取得的 MD5 碼,可以至 Google Map API key 申請頁面上申請 key,只要將取得的 MD5 碼填入並按下產生即可取得。



Google Map API 簡介

Google Map API 中有幾個重要也常用到的功能,分別為:
  • MapActivity : 一般來說 Android 程式的頁面都會繼承 Activity 類別,但是要使用 Google Map 的功能時,則必須繼承這個 MapActivity 類別,並且在 onCreate() 中實做一個 MapView 實例。
  • MapView : 用於顯示地圖的 View 元件。
  • MapController : 用來控制地圖的縮放移動等動作。
  • Overlay : 用來顯示地圖上可繪製的物件。
  • GeoPoint : 包含了經緯度的物件。


建立基本地圖

因為使用 Google Map API 必須使用到網路,所以必須在 AndroidManifest.xml 中增加網路存取的權限,並且須定義使用 com.google.android.maps 這個 package,如下原始碼。
<uses-library android:name="com.google.android.maps" />
因為顯示為 MapView ,所以可以在 main.xml 將這個 MapView 加入,並將取得的 key 填入,基本的 main.xml 如下 :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
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:clickable="true"
android:apiKey="07MiAWWKO9Na0Aa8sf9hsd6uhZNXjrRwZU2zyGQ"
/>
</RelativeLayout>
或是直接利用程式碼建立 MapView。
MapView mMapView = new MapView(this, "API Key");
在建立 MapView之前,必須先建立起 MapActivity,再經由覆寫 MapActivity的 onCreat()方法建立MapView,之後就可以做一些地圖的設定,像是透過 setBuiltInZoomControls 設定地圖是否可以縮放,還有當地圖的顯示方式可以有三種,交通模式、衛星模式還有街景模式,分別為 setTraffic、setSatellite 以及 setStreeView 三個方法;最後再建立 MapController,而建立 MapController 物件可以利用下面方式產生 :
mMapController = mMapView.getController();
MapController 除了可以控制地圖縮放倍數外,也可以利用 animateTo(GeoPoint)的方法將地圖定位至 GeoPoint 的位置。

以下為完整範例原始碼 :

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nchu.exMap"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".exMap"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
</manifest>


main.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:clickable="true"
android:apiKey="07MiAWWKO9Na0Aa8sf9hsd6uhZNXjrRwZU2zyGQ"
/>
</LinearLayout>


exMap.java

package com.nchu.exMap;

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 android.os.Bundle;

public class exMap extends MapActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MapView mMapView = (MapView)findViewById(R.id.mapview);
mMapView.setBuiltInZoomControls(true);
mMapView.setTraffic(false);
MapController mMapController = mMapView.getController();
mMapController.setZoom(17);
GeoPoint mGeoPoint = new GeoPoint(24121194,120675526);
mMapController.animateTo(mGeoPoint);
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}



實際執行畫面


一般地圖



移動




縮放

2011年6月9日 星期四

CAMPUS APP - uAlberta


uAlberta 簡介:


uAlberta campus app 是由位於加拿大 University of Alberta 所開發的行動校園應用程式,我們可以利用 uAlberta 掌握最新的校園活動、瀏覽任何學院的課程或是查看建築物資訊等。


uAlberta 應用包含了11項,分別為 : news, events, courses, directory, onecard, library, map, transit, student services, emergency, feedback


接下來將對這些功能分別做些介紹

程式版本 : 1.0.2 for Android


News : 提供校園相關新聞



News為大部分校園應用都會有的功能,uAlberta提供了一些分類 :

Express News, The complete Gateway Feed Experience, News, Opinion, Arts & Entertainment, Sports, Features

除了上述幾樣分類外並沒有其他對於發佈日期或是關鍵字做搜尋的能力,當進入某一分類後所顯示的是各新聞標題、日期與內文簡介,每則新聞以一條淺灰色的分隔線加以區隔。


當我們想要更深入得知某則新聞的詳細內容,只需要點選我們所關心的那則新聞,隨即會呼叫瀏覽器,將我們所點選的新聞及其他詳細資訊利用瀏覽器連上網路開啟。


由這個部分可以發現,當我們點選News功能後,應用程式並不是將所有的內文載入,也不會將所有資訊存在本機的檔案或是資料庫中,當我們對某則新聞有興趣時才及時的利用瀏覽器連線至網頁觀看,這樣的處理方式對於行動裝置的儲存空間與連線速度或是流量都可以大大的減少,不會讓使用者等太久的時間只為了載入自己並無興趣的內容,也可以減少伺服器對外連線的負荷。



Events : 提供校園相關的活動訊息

進入Events功能,首先會被帶往這個月份的頁面,頁面上方有一個日期選擇功能,可以利用這個功能轉換到自己想查的月份,而事件的排列方式是以我們所選擇當月份資料以日期先後順序來做排列。

點選關心的事件後,可以得知完整的活動內容、活動時間、地點或是活動相關的網址。


Courses : 提供各個學院課程相關資訊



同樣的也是幾乎每個校園應用會提供的功能,分類方式是利用學院、部門、課程分類加以歸納,課程資訊除了開課名稱外還包含了哪一季所開的課程,有哪些老師開設了哪些課以及上課地點等。


Courses只是單純的提供所有課程的資訊,並沒有能夠與學生更進一步的互動,此功能中沒有讓學生可以將查詢到的課程加入到最愛,這在擁有許多課程的查詢系統中容易讓使用者對於不斷的重複選取感到不耐煩,也沒有提供任何的搜索功能,如此一來使用者就只能不斷的去每個分類下逐一尋找,並且一直重複這個動作,直到將所有想知道的課程內容的查詢完畢,如果下次還需要再進入查詢,那這個動作不可避免的還要再執行一次。








Directory : 提供人員的連絡資訊



第一次進入directory時,頁面並不會有預設的分類,而是直接前往搜尋頁面,利用搜尋的功能可以快速查詢到名字中有包含所輸入的關鍵字,像是關鍵字打jack,查詢的結果並不會只有 Jack Born 或是 Jack Braakman,甚至於像是 Jackline Baniak 還是 Ishtiak Ahmed Jacky 等名字都會一並顯示出來。


比起其他學校的校園應用來說,這個功能所提供的資訊並不多,只有名字和e-mail,沒有可以加入至連絡人清單的功能,也沒有提供其他的聯絡方式。






ONEcard : 提供 University of Alberta 的 ONEcard 功能



ONEcard 功能可以讓我們使用一張卡片,這張卡片內可以儲值以及包含了一些個人資訊,利用這張卡我們可以轉搭交通工具、在圖書館借書或是需要影印時利用此卡也可以使用校園內的影印機等功能。




Library : 提供圖書館藏書或是相關資訊



uAlberta 的 Library 提供了許多豐富的資訊,主要有9項

Locate & Contact, Hours, WorldCat Local Catalogue, browse by subject, Mobile E-Services, My account, Ask Us, full site, feedback



  • Locate & Contact


    提供各個圖書館的簡介、位置和聯絡方式等








  • Hours


    提供圖書館的開放時間





  • WorldCat Local catalogue

    提供了最主要的圖書搜尋功能,進入了查訊系統後我們可以利用下方已經提供的預設分類直接查詢,預設分類包含了以下13種


    Artistic photographyBiographyChildren's bookscookingGraphic novels
    HealthHobbiesLandscape gardeningMilitary historyMovie reviews
    Music history and criticismPersonal financeTravel description



    如果不想使用預設分類,我們可以直接輸入關鍵字的方式搜尋,除此之外對於搜尋的方式Library還提供了進階的設定,例如依照ISBN做搜尋或是依照作者做排序等功能,下表為可做設定之選項。


    Search by

    Sort by

    keywordrelevance
    authorauthor
    titletitle
    subjectpublication date
    ISBN







  • Browse by Subject


    此功能項目提供許多導覽的資訊,讓我們可以利用主題瀏覽圖書館藏書資訊。


    我們可以利用頁面上方的圖書導覽搜尋找到相關的導覽文章,或是利用分類好的導覽遍尋相關主題,如果不熟悉此功能Browse by Subject還提供了一段影片教學。








  • Mobile E-Services


    提供幾個行動電子服務的資訊


    Mobile Library Catalogue, Mobile Enabled Databases, RefWorks Mobile, Health Sciences Resources





  • Ask Us


    此功能裡包含了ask us chat, email, visit us, phone, text 五種連絡方式可供使用者詢問問題。





    除了上述的功能之外,我們可以登入自己的帳號做相關操作,或是連結至圖書館完整的網址,如果你覺得有什麼問題可以反映,也可以利用feedback的功能向圖書館提出。



Map : 提供餐飲、公車站、建築物等地圖資訊



此功能使用google map標示出你所感興趣的地理位置,包含那種類有


buildings, landmarks, transit, food, parking, accessibility


除了基本的地理資訊外,針對不同的類別系統還另外提供更多的資訊,像是點選landmarks我們可以得知相關的介紹。








Transit : 大眾運輸交通相關訊息



Transit 功能除了提供 lrt 或是 bus 的到站資訊外,我們也可以新增自己需求的停靠站,經由這樣的方式我們可以快速查詢到自己的需求而不必要再點選搜尋,除此之外系統也貼心的將過去瀏覽的站點存成歷史資料方便以後使用。







Student services : 提供有關於學生日常生活所需的服務聯絡資訊



此部分的功能為單純的服務中心的資訊,內容除了學校的許多服務中心之外,還包含了一些學生團體的連絡資訊,在列表列後方如果有一個勾的標誌代表著這是一個父目錄,裡面還包含了其他的子類別。





Emergency : 提供了各校園緊急聯絡電話



目前只有靜態的提供校園內各個緊急聯絡電話,並沒有提供即時的緊急事件資訊。




Feedback : 透過Feedback我們可以將想法或是意見回饋給uAlberta



此功能會經由呼叫 e-mail 程式進行發送電子郵件,而進入後由建會預先將你所使用的應用程式版本、行動裝置型號還有系統版本等資訊列入郵件內容,對於開發者除錯或是收集資訊有相當大的幫忙。



uAlberta 內容相當的豐富,除了行動裝置的應用外也結合了 mobile web 上的一些相關系統,對於資訊載入的速度也是非常的快速,在官網上有提及未來將會提供的功能,像是 Emergency Notifications, My Agenda, Timetable,目前這三個功能已經在 iPhone平台上推出了,相信不久的將來就會在 Android 平台上就能使用到,而 uAlberta 的校園應用確實非常值得我們這些需要開發此種相關應用的人參考。

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger