亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Google Android平臺(tái)手機(jī)局域地圖的實(shí)現(xiàn)

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

        郭 瑾,楊武年,易 鵬

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

        基于Google Android平臺(tái)手機(jī)局域地圖的實(shí)現(xiàn)

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

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

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

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

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

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

        1.1 Google Android平臺(tái)

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

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

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

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

        圖1 手機(jī)電子地圖結(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]。對于本地?cái)?shù)據(jù)系統(tǒng)采用實(shí)地采集、網(wǎng)絡(luò)繪制的方式進(jìn)行添加,同時(shí)利用GPS衛(wèi)星信號(hào)進(jìn)行定位獲取本地地理信息。

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

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

        實(shí)驗(yàn)數(shù)據(jù)主要由3部分組成:Google Map網(wǎng)絡(luò)數(shù)據(jù)、GPS定位數(shù)據(jù)和本地加密數(shù)據(jù)。數(shù)據(jù)主要包括點(diǎn)、線、面等圖形數(shù)據(jù)以及地名、坐標(biāo)等物理數(shù)據(jù)?;镜貓D影像來自Google網(wǎng)絡(luò)GIS,保留其部分點(diǎn)位信息,對于偏移較大和不詳細(xì)的信息采用KML文件進(jìn)行擴(kuò)充,通過文件儲(chǔ)存方式加載到手機(jī)存儲(chǔ)設(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 信息對移動(dòng)臺(tái)進(jìn)行定位的技術(shù),可以在 GSM/ GPRS、WCDMA 和CDMA2000 網(wǎng)絡(luò)中使用。在該設(shè)計(jì)中,使用嵌入式關(guān)系型數(shù)據(jù)庫 SQLite3 來存儲(chǔ)和更新采集點(diǎn)信息,大小只有幾KB,但功能十分完善,擁有大部分關(guān)系型數(shù)據(jù)庫共有的特征,可移植性強(qiáng),數(shù)據(jù)導(dǎo)出方便[8]。

        2.1.3 本地?cái)?shù)據(jù)

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

        圖2 Google Earth上繪制的KML文件

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

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

        2.2 界面設(shè)計(jì)

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

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

        圖3 應(yīng)用示例

        2.2.1 按鍵設(shè)置

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

        2.2.2 GPS定位信息的顯示

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

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

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

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

        2.3 功能設(shè)計(jì)

        2.3.1 設(shè)置主界面

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

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

        ctrlMap.zoomIn();

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

        ctrlMap.zoomOut();

        2.3.2 導(dǎo)入本地?cái)?shù)據(jù)

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

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

        InputStreamReader inputStreamReader = null;

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

        String name; //位置點(diǎn)名稱

        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)用戶輸入某一地名時(shí),圖上會(huì)顯示該地名所在位置,查詢功能具體通過網(wǎng)絡(luò)通信來實(shí)現(xiàn),Google Map提供了該數(shù)據(jù)庫的接口。接口地址:http:// Map.Google.com/Map/api/geocode/json?address= ka&sensor=false。具體實(shí)現(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 添加圖標(biāo)圖層

        顯示位置需要地圖圖標(biāo)。將圖標(biāo)添加到想要添加的位置,例如當(dāng)查詢到一個(gè)位置時(shí),在該位置添加圖標(biāo),并將它顯示在當(dāng)前位置,如圖3中標(biāo)注查詢結(jié)果的藍(lán)色氣球,具體情況通過編寫代碼實(shí)現(xiàn)。首先得通過mapview.getController()方法控制整張地圖,才能對其進(jìn)行操作。主要代碼如下[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)緯度,并實(shí)時(shí)更新。主要代碼如下[13]:

        String provider = locationManager.GPS_PROVIDER;

        Location location = locationManager.getLastKnownLocation(provider);

        updateWithNewLocation(location);

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

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

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

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

        圖4 定 位

        3 結(jié) 語

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

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

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

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

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

        [5] 李沛鴻,白東強(qiáng),李營營.基于 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è)計(jì)[C].第六屆全國高等學(xué)校物理實(shí)驗(yàn)教學(xué)研討會(huì),2010

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

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

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

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

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

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

        P208

        B

        1672-4623(2014)05-0158-04

        10.3969/j.issn.1672-4623.2014.05.058

        郭瑾,碩士,研究方向?yàn)闇y繪工程。

        2013-12-02。

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

        猜你喜歡
        電子地圖控件定位
        中國公豬站引種指南電子地圖
        《導(dǎo)航定位與授時(shí)》征稿簡則
        Smartrail4.0定位和控制
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        找準(zhǔn)定位 砥礪前行
        基于Mapserver的增強(qiáng)現(xiàn)實(shí)電子地圖的設(shè)計(jì)與實(shí)現(xiàn)
        青年擇業(yè)要有準(zhǔn)確定位
        電子地圖在初中地理教學(xué)中的應(yīng)用實(shí)踐
        電子地圖多尺度顯示模型研究
        就這樣玩會(huì)VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        曰韩内射六十七十老熟女影视| 太大太粗太爽免费视频| 国产一区二区三区在线观看蜜桃| 白白发在线视频免费观看2| 欧美乱人伦人妻中文字幕| 国产99r视频精品免费观看| 日本一区二区亚洲三区| 精品三级国产一区二区三 | 国产精品入口牛牛影视| 中文字幕成人乱码亚洲| 男女18视频免费网站| 国产莉萝无码av在线播放| 狠狠色狠狠色综合日日92| 国产精品一级黄色大片| 免费观看91色国产熟女| 熟女人妇交换俱乐部| 成 人 网 站 在线 看 免费| 按摩少妇高潮在线一区| 日韩日韩日韩日韩日韩日韩| 国产精品一区二区 尿失禁| 激情内射亚洲一区二区| 国产色视频一区二区三区不卡| 亚洲成av人在线观看天堂无码 | 久久亚洲精品国产精品婷婷| 国产av一级黄一区二区三区| 亚洲日产精品一二三四区| 国产精品无码无片在线观看3D| 亚洲天堂线上免费av| 国产一区二区精品久久岳| 老少交欧美另类| 久久狠狠爱亚洲综合影院| 女同视频一区二区在线观看 | 美女黄网站永久免费观看网站| 日韩在线观看入口一二三四| 青青草原精品99久久精品66| 欧美激情国产亚州一区二区| 国产成人一区二区三区影院| 人人色在线视频播放| 亚洲不卡无码高清视频| 亚洲长腿丝袜中文字幕| 中文字幕在线日亚洲9|