国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Google Android平臺手機局域地圖的實現(xiàn)

2014-04-18 03:20:48楊武年
地理空間信息 2014年5期
關(guān)鍵詞:電子地圖控件定位

郭 瑾,楊武年,易 鵬

(1.成都理工大學(xué) 地學(xué)空間信息技術(shù)國土資源部重點實驗室,四川 成都 610059;2.成都理工大學(xué) 遙感與GIS研究所,四川 成都 610059)

基于Google Android平臺手機局域地圖的實現(xiàn)

郭 瑾1,2,楊武年1,2,易 鵬1,2

(1.成都理工大學(xué) 地學(xué)空間信息技術(shù)國土資源部重點實驗室,四川 成都 610059;2.成都理工大學(xué) 遙感與GIS研究所,四川 成都 610059)

分析局域環(huán)境下的個人生活需求,在Google網(wǎng)絡(luò)數(shù)據(jù)庫和本地數(shù)據(jù)庫上進行功能設(shè)計,提出加密本地數(shù)據(jù)和制作以個體應(yīng)用為中心的局域?qū)n}地圖的方法,實現(xiàn)手機地圖的一般功能,并提供關(guān)鍵代碼。系統(tǒng)對用戶的機動性要求不高,適合個人應(yīng)用,能讓新進用戶快速融入環(huán)境。

Google;Android;KML;電子地圖;查詢;定位

目前,各種載體的電子地圖已十分普及,但市面上的絕大多數(shù)電子地圖都運用于車載電子或者行車線路查詢,相較于車輛來說,人的機動性不夠快捷,能動范圍不夠廣闊,人類活動方向往往不能夠及時反映在電子地圖之上,同時也由于地圖標注的不詳盡和地理環(huán)境的不熟悉,人們使用電子地圖時仍有不明方向的感覺?;贕oogle Android平臺手機局域電子地圖就是針對這一點進行設(shè)計,使之適合人類個體非機動的相關(guān)活動。本系統(tǒng)的制作理念就是在現(xiàn)有衛(wèi)星影像和矢量地圖的基礎(chǔ)之上,以熟悉某區(qū)域的導(dǎo)游視線為出發(fā)點,制作詳細的區(qū)域電子地圖,然后將其與該區(qū)域的衛(wèi)星影像圖進行完全覆蓋,在這樣的數(shù)據(jù)基礎(chǔ)上進行以人類個體行動需求為指導(dǎo)的功能設(shè)計,讓個體在使用本系統(tǒng)時有如向?qū)г趥?cè)的體驗。

1 基于Google Android平臺手機地圖的系統(tǒng)架構(gòu)

1.1 Google Android平臺

Android是一種基于Linux的開放源代碼的操作系統(tǒng)[1],主要分為3部分:①底層以Linux核心為基礎(chǔ),由C語言開發(fā),提供基本功能;②中間層包括函數(shù)庫Library和虛擬機Virtual Machine,由C++開發(fā);③最上層是各種應(yīng)用軟件,由各公司自行開發(fā),以JAVA編寫[2]。

本實驗開發(fā)基于Google Android平臺結(jié)合Android SDK和Eclipse插件,通過安裝JDK→Eclipse→Eclipse插件ADT→Android SDK搭建 Google Android開發(fā)平臺,應(yīng)用JAVA語言進行開發(fā)[3]。

1.2 手機電子地圖架構(gòu)

手機電子地圖一般通過三層架構(gòu)工作,分別是數(shù)據(jù)層、中間層和表示層。由數(shù)據(jù)層提供地圖、路徑、標注等基礎(chǔ)數(shù)據(jù);中間層負責(zé)連接數(shù)據(jù)層與表示層并提供功能設(shè)計和數(shù)據(jù)調(diào)用、處理方式;表示層是軟件與用戶的交流平臺,是顯示數(shù)據(jù)處理結(jié)果的窗口[4]。本實驗利用Android系統(tǒng)手機為表示層,Google Map和Android操作系統(tǒng)為中間層,Google網(wǎng)絡(luò)數(shù)據(jù)庫、GPS信息、通信信息以及添加數(shù)據(jù)為數(shù)據(jù)層進行框架的構(gòu)建(如圖1)。

圖1 手機電子地圖結(jié)構(gòu)框架

Google Map網(wǎng)絡(luò)服務(wù)器提供開放式接口Google Map API供用戶調(diào)用其網(wǎng)絡(luò)數(shù)據(jù),通過GPRS/Internet建立于Google Map間的通行,調(diào)用它的GIS數(shù)據(jù)庫[5]。對于本地數(shù)據(jù)系統(tǒng)采用實地采集、網(wǎng)絡(luò)繪制的方式進行添加,同時利用GPS衛(wèi)星信號進行定位獲取本地地理信息。

2 系統(tǒng)設(shè)計

2.1 數(shù)據(jù)庫建立

實驗數(shù)據(jù)主要由3部分組成:Google Map網(wǎng)絡(luò)數(shù)據(jù)、GPS定位數(shù)據(jù)和本地加密數(shù)據(jù)。數(shù)據(jù)主要包括點、線、面等圖形數(shù)據(jù)以及地名、坐標等物理數(shù)據(jù)?;镜貓D影像來自Google網(wǎng)絡(luò)GIS,保留其部分點位信息,對于偏移較大和不詳細的信息采用KML文件進行擴充,通過文件儲存方式加載到手機存儲設(shè)備,將文件唯一命名,方便調(diào)用。

2.1.1 Google Map網(wǎng)絡(luò)數(shù)據(jù)

通過獲取Google Maps API來調(diào)用Google Map網(wǎng)絡(luò)數(shù)據(jù),首先需要申請Google Maps API Key,生成Google Maps API Key要使用2種工具:JDK的Keytool和Android debug模式下的Keystore密鑰庫[6],本系統(tǒng)采用第一種方式。

在Eclipse→file→new下新建的工程Google_Map下,將獲取的Google Maps API Key添加在布局文件main.xml:

Android:apiKey="0G7MFkkJ9COpfKvsJ0N7w7A Rc_9-zsekXgB0PxQ"

在activity里編寫一段簡單代碼,要求能調(diào)用和控制Google Map[7]:

public class Google_MapActivity extends MapActivity

{linearLayout = (LinearLayout) findViewById(R.id.zoomview);

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

m Z o o m = (Z o o m C o n t r o l s) m a p V i e w.getZoomControls();

linearLayout.a(chǎn)ddView(mZoom);}

2.1.2 GPS定位數(shù)據(jù)

Android設(shè)備既提供傳統(tǒng)的 GPS 定位系統(tǒng),又提供A-GPS定位方式。A-GPS 是一種結(jié)合了網(wǎng)絡(luò)基站信息和 GPS 信息對移動臺進行定位的技術(shù),可以在 GSM/ GPRS、WCDMA 和CDMA2000 網(wǎng)絡(luò)中使用。在該設(shè)計中,使用嵌入式關(guān)系型數(shù)據(jù)庫 SQLite3 來存儲和更新采集點信息,大小只有幾KB,但功能十分完善,擁有大部分關(guān)系型數(shù)據(jù)庫共有的特征,可移植性強,數(shù)據(jù)導(dǎo)出方便[8]。

2.1.3 本地數(shù)據(jù)

本地數(shù)據(jù)主要由Google Earth生成的KML圖形文件組成,將文件唯一命名方便調(diào)用。本實驗的KML文件由筆者實地調(diào)查后在Google Earth上添加,包括實驗區(qū)地物點點位選取,各種辦公、生活區(qū)域面狀覆蓋,以及道路、區(qū)域分化等線狀信息,同時也對部分建筑或場所進行文字描述。將所有信息進行分類方便提取和查看,形成運動場所、辦公區(qū)域、教學(xué)區(qū)域、生活區(qū)域各為一體的模塊(如圖2)。

圖2 Google Earth上繪制的KML文件

工程文件下的res文件夾提供了一個緩存文件row文件夾,如果沒有自己創(chuàng)建一個。這里可以儲存自己的數(shù)據(jù)文件,程序不會把它編譯成二進制代碼。把經(jīng)緯度以及名稱按鍵值對存取該文件的數(shù)據(jù)進行提取,并在地圖上進行操作。

加載KML圖形文件時對每一個地物分配合適的字段長度,要足夠包含該區(qū)域內(nèi)編輯相應(yīng)的屬性和介紹,但也不能過長,那會導(dǎo)致空間冗余,為手機存儲設(shè)備帶來不必要的負擔(dān),也會延緩調(diào)用和顯示速度。編輯調(diào)用時只需寫入提取一定的字段長度,在這個字段內(nèi)包含了地名、位置等相關(guān)信息,查詢到該部分內(nèi)容時將內(nèi)部信息以文字和圖形形式顯示于屏幕[9]。

2.2 界面設(shè)計

在Activity中使用View和ViewGroup控件配XML樣式來進行界面設(shè)計,使用事件處理進行人機交互,主要的事件處理為按鈕事件、觸屏事件以及一些高級控件的事件監(jiān)聽。通過設(shè)置控件與事件處理就形成了UI界面,手機地圖的用戶界面一般由一個或多個UI控件組成,用戶界面及UI控件以XML的形式描述[10]。

系統(tǒng)界面主要內(nèi)容包括:地圖顯示區(qū)、圖層控制區(qū)、選擇列表查詢區(qū)。地圖顯示區(qū)是網(wǎng)絡(luò)地圖界面中最主要的區(qū)域,是對實驗區(qū)最直觀的展示,各種操作的大量結(jié)果都顯示在此區(qū)域中,包括地圖縮放、平移等各種控件,為用戶提供基本操作與查看;另外在地圖的上方還添加了搜索條,便于用戶進行地點查詢。選擇列表查詢區(qū)是通過提供給用戶一些可選擇的地點,進而方便用戶在未知某些地點信息的時候可以通過選擇已有選項進行查看。圖層控制區(qū)用于對專題圖層進行控制,衛(wèi)星視圖、矢量視圖以及加密圖層的顯示可在這里控制。圖3是衛(wèi)星視圖情況下對地名為“六教”的選擇結(jié)果和定位。

圖3 應(yīng)用示例

2.2.1 按鍵設(shè)置

根據(jù)用戶需求和地圖功能,添加一些按鈕,并編寫JAVA文件,設(shè)置事件監(jiān)聽,通過按鈕實現(xiàn)放大縮小功能。通過togglebutton實現(xiàn)衛(wèi)星視圖與地圖的切換,按鈕控制用setonclicklistenner()方法添加。

2.2.2 GPS定位信息的顯示

通過TextView控件顯示定位信息,在程序打開時顯示目前用戶的具體位置。利用手機GPS進行定位,并在地圖上方顯示經(jīng)緯度等定位信息,若GPS定位不成功或者出錯,則顯示“無法獲取目前地址”。

2.2.3 編輯框功能的實現(xiàn)

1)獲取編輯框內(nèi)容:editText.getText().toString();

2)通過main.xml布局文件,在編輯框內(nèi)添加一個按鈕,并在JAVA文件編寫相應(yīng)代碼,設(shè)置事件監(jiān)聽,當(dāng)點擊按鈕時,獲取該單擊事件,獲取編輯框內(nèi)容,以執(zhí)行相應(yīng)操作。

2.3 功能設(shè)計

2.3.1 設(shè)置主界面

首先進行界面布局,在顯示界面設(shè)計添加一些功能按鈕,并編寫java文件,設(shè)置事件監(jiān)聽,以布置按鈕實現(xiàn)放大縮小、視圖切換、查詢等功能。

實現(xiàn)縮放主要代碼[11]:case R.id.in: /*縮小*/

ctrlMap.zoomIn();

case R.id.out: /*放大*/

ctrlMap.zoomOut();

2.3.2 導(dǎo)入本地數(shù)據(jù)

前文已經(jīng)提到將加密數(shù)據(jù)添加到工程文件下的res文件夾,現(xiàn)在要做的就是將這個文件夾里的內(nèi)容讀取并顯示到界面。主要代碼如下:

public static HashMap<String,GeoPoint> addMyData(InputStream inputStream) {

InputStreamReader inputStreamReader = null;

String line; //判斷是否到文件末尾

String name; //位置點名稱

int longitude,latitude;

GeoPoint point;

HashMap<String,GeoPoint> map=new HashMap<String, GeoPoint>();

try {inputStreamReader = new InputStreamReader(in putStream,"gbk"); }

catch (UnsupportedEncodingException e1) {e1.printStackTrace(); }

BufferedReader reader = new BufferedReader(inputSt reamReader);

try {while ((line=reader.readLine()) != null)

{ latitude=(int)(Double.parseDouble(line.substring(9, 18))*1E6);

longitude=(int)(Double.parseDouble(line.substring(21, 31))*1E6);

point=new GeoPoint(latitude,longitude);

name=line.substring(42, 44);

map.put(name, point); }

} catch (IOException e) {e.printStackTrace();}

2.3.3 查 詢

當(dāng)用戶輸入某一地名時,圖上會顯示該地名所在位置,查詢功能具體通過網(wǎng)絡(luò)通信來實現(xiàn),Google Map提供了該數(shù)據(jù)庫的接口。接口地址:http:// Map.Google.com/Map/api/geocode/json?address= ka&sensor=false。具體實現(xiàn)代碼如下:

通過HTTP協(xié)議獲取Google Map網(wǎng)絡(luò)數(shù)據(jù)

HttpGet httpGet = new HttpGet("http://Map.Google."

+"com/Map/api/geocode/json?address="+address+ "ka&sensor=false");

根據(jù)客戶端的查詢語句從網(wǎng)絡(luò)數(shù)據(jù)庫獲取回答

response = client.execute(httpGet);

HttpEntity entity = response.getEntity();

InputStream stream = entity.getContent();

2.3.4 添加圖標圖層

顯示位置需要地圖圖標。將圖標添加到想要添加的位置,例如當(dāng)查詢到一個位置時,在該位置添加圖標,并將它顯示在當(dāng)前位置,如圖3中標注查詢結(jié)果的藍色氣球,具體情況通過編寫代碼實現(xiàn)。首先得通過mapview.getController()方法控制整張地圖,才能對其進行操作。主要代碼如下[12]:

Private void addMyMarker(GeoPoint point,String query) {

mapview.setBuiltInZoomControls(true);

List mapOverlays = mapview.getOverlays();

Drawable drawable=this.getResources().getDrawable(R.drawable.ic);

M a k e r O v e r l a y i t e m i z e d O v e r l a y =n e w MakerOverlay(drawable, this);

OverlayItem overlayitem =new OverlayItem(point, "緯 度 "+point.getLatitudeE6()+",經(jīng) 度 "+point.getLongitudeE6(), query);

2.3.5 定位服務(wù)

通過GPS獲取當(dāng)前所在經(jīng)緯度,并實時更新。主要代碼如下[13]:

String provider = locationManager.GPS_PROVIDER;

Location location = locationManager.getLastKnownLocation(provider);

updateWithNewLocation(location);

locationManager.requestLocationUpdates(provider200 0,10,locationListener);

在空曠地帶,獲取衛(wèi)星信號,會顯示當(dāng)前位置。

2.3.6 導(dǎo)入真機測試

安裝usb驅(qū)動,使電腦與手機相連并控制手機;獲取手機的root權(quán)限,才能對系統(tǒng)文件進行編輯;執(zhí)行chmod 777/system 取得系統(tǒng)文件編輯的權(quán)限;導(dǎo)入手機沒有的jar包,如com.google.a(chǎn)ndroid.maps.jar等,并在/system/etc/permissons文件夾下的platform.xml里面編輯相應(yīng)的權(quán)限;運行Android工程文件,測試效果。圖4為測試的定位結(jié)果,與真實點偏差1 m左右。

圖4 定 位

3 結(jié) 語

本文所設(shè)計系統(tǒng)的優(yōu)點為:通過多個查詢標識和GPS定位,在加密地圖上用戶可以通過多點定位確定位置和方向,不會出現(xiàn)因為機動性不夠,導(dǎo)航標識不能及時指示方向的情況;加密后的地圖可以讓用戶對區(qū)域進行詳細查看,能夠很好地滿足居住、購物、生活等應(yīng)用目的;區(qū)域地圖的數(shù)據(jù)量較小,對手機儲存不會造成較大的負擔(dān);地圖和程序均可以封裝打包,比較適合園區(qū)、景點應(yīng)用。不足之處有:數(shù)據(jù)過密導(dǎo)致節(jié)點增多,給路徑運算造成負擔(dān),計算難度增加;定位數(shù)據(jù)依賴手機GPS定位信息,定位誤差會直接反應(yīng)在電子地圖上,在小范圍內(nèi)1~2 m的定位誤差也會帶來較大的影響。

[1] 鄢軍霞,周焰.基于Google Android平臺的移動開發(fā)初探[J].硅谷,2012(15):31-58

[2] 吳雁鳴.基于Android手機的人員定位與管理系統(tǒng)[J].電子制作,2013(5): 110-111

[3] 陳昱,江蘭帆.基于Google Android平臺的移動開發(fā)研究[J].福建電腦,2008(11):156-157

[4] 覃婕,韋波,黃俊華.Java手機地圖服務(wù)系統(tǒng)研究與實現(xiàn)[J].地理空間信息,2008,6(6):73-75

[5] 李沛鴻,白東強,李營營.基于 Android 的 WebGIS 地理定位服務(wù)[J].地理空間信息,2012,10(6):59-61

[6] 中華文本庫.申請android google map API key[EB/OL].http://www.chinadmd.com/file/eia3zrtrwwriotcxezpaaiu3_1.html, 2013-11-25

[7] 孫成,何光禹,蔡海峰.基于J2ME技術(shù)的電子地圖的設(shè)計[C].第六屆全國高等學(xué)校物理實驗教學(xué)研討會,2010

[8] 侯春良,張義文.基于Android平臺的地理信息系統(tǒng)工具設(shè)計與開發(fā)[J].地理空間信息,2012,10(5):14-16

[9] 杜英俊,于重重,劉杰.基于KML開發(fā)的GIS系統(tǒng)研究與應(yīng)用[J].計算機應(yīng)用與軟件,2010,10(27):49-51

[10] 孫曉宇.Android手機界面管理系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2009

[11] 王銳君.縣域地理空間信息平臺電子地圖發(fā)布與共享的方法[J].遙感技術(shù)與應(yīng)用,2011,10(5):598-603

[12] 龐國明.網(wǎng)站開發(fā)之 Google 地圖的應(yīng)用[J].電腦編程技巧與維護,2013(1):67-70

[13] 周穎穎.基于Android平臺的手機地圖系統(tǒng)的實現(xiàn)[J].現(xiàn)代計算機,2013,22(8):74-76

P208

B

1672-4623(2014)05-0158-04

10.3969/j.issn.1672-4623.2014.05.058

郭瑾,碩士,研究方向為測繪工程。

2013-12-02。

項目來源:國家自然科學(xué)基金資助項目(41071265); 高等學(xué)校博士學(xué)科點專項科研基金資助項目(20105122110006)。

猜你喜歡
電子地圖控件定位
中國公豬站引種指南電子地圖
《導(dǎo)航定位與授時》征稿簡則
Smartrail4.0定位和控制
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
找準定位 砥礪前行
基于Mapserver的增強現(xiàn)實電子地圖的設(shè)計與實現(xiàn)
青年擇業(yè)要有準確定位
電子地圖在初中地理教學(xué)中的應(yīng)用實踐
電子地圖多尺度顯示模型研究
就這樣玩會VBA中常見的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
禄丰县| 岳西县| 固镇县| 阳原县| 丰原市| 寿宁县| 佛坪县| 库伦旗| 博兴县| 城口县| 康保县| 乌海市| 泗水县| 平昌县| 子洲县| 尖扎县| 辉南县| 石景山区| 盖州市| 密云县| 台湾省| 洛川县| 梁平县| 通化县| 合水县| 阿瓦提县| 宜章县| 大连市| 靖西县| 香河县| 扶沟县| 贞丰县| 买车| 莲花县| 崇州市| 西藏| 集安市| 三明市| 莆田市| 绩溪县| 锡林郭勒盟|