android室內導航
⑴ 問答:Android P都更新了哪些功能
Android P的新功能特性集中在了UI、通知體驗、室內定位、圖像存儲幾個方面,解決了之前一直存在的痛點。例如WiFi RTT一定程度上彌補了蜂窩網路在室內環境下的定位問題,HEIC圖像格式則重點解決了存儲容量問題。同時,Android P也在通知豐富度及操作便捷性等功能方面有所增強和提升。
一、WiFi RTT功能——復雜地形精確導航
WiFi RTT功能是Android P新引入的一個功能,從原理上來說與蜂窩網路的定位原理一致,但這個功能極大的彌補了蜂窩網路在室內定位的短板,WiFi RTT將能夠在室內提供高精度的定位,這是蜂窩網路很難做到的。
WiFi RTT是全新的功能,在android.net.wifi包下增加了rtt包,用於存放WiFi RTT相關類和介面。
WiFi RTT的API以WifiRttManager為核心,藉助AP熱點或WiFi,利用RTT原理完成測距,通過三個以上的測距點就能夠准確地定位到設備所在位置。
WiFiRTTManager提供了測距介面,是一個非同步測距操作,根據官方文檔(https://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager.html)說明,其測距介面如下:
void startRanging(RangingRequest request, RangingResultCallback callback, Handler handler);
註:SDK Platforms Android P Preview Revision 1的相關介面定義與此不同,但實際的官方鏡像中介面與此一致,開發者需要更新最新的Android P Preview Revision 2,此版本中Google已經修正該介面。
介面中,RangingRequest通過RangingRequest.Builder構建,RangingRequest.Builder構建出RangingRequest所需要的參數可以通過WiFiManager等系統服務獲取到相關的內容,如List<ScanResult> scanResults = wifiManager.getScanResults();
以下提供一個簡單的測試Demo,以供參考:
private WifiRttManager wifiRttManager;
private WifiManager wifiManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ... ...
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)) {
Object service = this.getApplicationContext().getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
if(service instanceof WifiRttManager) {
wifiRttManager= (WifiRttManager) service;
Log.i(TAG, "Get WifiRttManager Succ.");
}
wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
IntentFilter wifiFileter = new IntentFilter();
wifiFileter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
wifiFileter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
wifiFileter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new WifiChangeReceiver(), wifiFileter);
}
// ... ...
}
private void startScanAPs() {
wifiManager.setWifiEnabled(true);
wifiManager.startScan();
}
class WifiChangeReceiver extends BroadcastReceiver {
@RequiresApi(api = 28)
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
List<ScanResult> scanResults = wifiManager.getScanResults();
Log.i(TAG, "Wifi Scan size:" + scanResults.size());
for(ScanResult scanResult: scanResults) {
Log.i(TAG, scanResult.toString());
RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint(scanResult);
wifiRttManager.startRanging(builder.build(), new RangingResultCallback() {
@SuppressLint("Override")
@Override
public void onRangingFailure(int i) {
// TODO
}
@SuppressLint("Override")
@Override
public void onRangingResults(List<RangingResult> list) {
// TODO get result from list
for(RangingResult result : list) {
Log.i(TAG, result.toString());
}
}
}, new Handler());
}
}
}
}
使用WiFi RTT時,需要在AndroidManifest.xml中增加如下聲明:
<uses-feature android:name="android.hardware.wifi.rtt" />
通過上面的簡單代碼,就能夠實現WiFi RTT的功能。
WiFi RTT功能適用於復雜地形的大型室內外場所,如商場、娛樂場所、大型休閑、游樂場等等,提供場所內的局部區域精確化導航等功能。相信在很快的時間內,就能夠在各大地圖應用內體驗到這項便利功能,對於路痴、地圖盲的夥伴們將是極大的福音。
二、顯示剪切——支持劉海屏
隨著iPhone X的推出,「劉海屏」達到了空前的高潮。Android P里提供了對異形屏幕的UI適配兼容方案,通過DisplayCutout類提供的相關介面,能夠獲取到屏幕中Cutout區域的信息。
藉助DisplayCutout,可以獲取到如下信息:
DisplayCutout displayCutout = view.getRootWindowInsets().getDisplayCutout();
if(displayCutout != null) {
Region bounds = displayCutout.getBounds();
Log.d(TAG, String.format("Bounds:%s", bounds.toString()));
int top = displayCutout.getSafeInsetTop();
int bottom = displayCutout.getSafeInsetBottom();
int left = displayCutout.getSafeInsetLeft();
int right = displayCutout.getSafeInsetRight();
Log.d(TAG, String.format("Cutout edge:[left:%d, top:%d,right:%d, bottom:%d]", left, top, right, bottom));
}
public Region getBounds()能夠獲取到Cutout區域的所有信息,Region就是Cutout區域。
public int getSafeInsetTop()
public int getSafeInsetBottom()
public int getSafeInsetLeft()
public int getSafeInsetRight()
以上四個介面,可以獲取到去除Cutout區域後的安全區域邊界值。
通過上述數據,開發者能夠精準的控制UI的繪制,避免將UI內容繪制到Cutout區域造成UI顯示異常。
Android機器里,劉海屏目前還是極為罕見的Google為了方便開發者調試,在Android P Preview鏡像中,特別提供了Cutout的支持,具體打開方式可以參考Google提供的特性說明文檔cutout小節內容。
cutout小節:https://developer.android.com/preview/features.html#cutout
如圖所示,筆者使用手頭的Pixel 2 XL體驗了Android P的Cutout設置。
三、通知優化——操作更多樣,內容更豐富
Android P在通知內容的豐富度和操作上做了優化。
最近的版本中,Android系統的通知管理方面一直優化升級,Android O提供了更細粒度的Channel功能,通知欄推送時需要指定NotificationChannel,用戶可以對通知的Channel選擇,只允許感興趣的Channel推送的通知顯示。通過通道設置、免打擾優化等方式,極大增強了消息體驗。
增強消息體驗
Android P繼續改進和增強消息通知[v1]。早在Android 7.0時,就提供了在通知中直接應答和輸入,Android P對這一功能做了更多的增強。
Android P的通知中支持圖像內容,可以通過setData()方法,給出消息的圖像內容,在通知上展示給用戶。
Android P同樣簡化了通知的配置形式。Android P中增加了Notification.Person類,用於區分同一個對話的參與者信息,如參與者的頭像、URI等。根據官方說明,Android P中,通知消息的其他一些API,也使用Person替代之前的CharSequence。
簡單的體驗下新的API的開發:
NotificationChannel channel = new NotificationChannel("WtTestChannel",
"WtTestChannel", NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(true); // luncher icon right corner's point
channel.setLightColor(Color.RED); // read point
channel.setShowBadge(true); // whether show this channel notification on long press icon
Notification.Builder builder =
new Notification.Builder(MainActivity.this,
"WtTestChannel");
Notification.Person p = new Notification.Person();
p.setName("WeTest");
p.setUri("http://cdn.wetest.qq.com/" +
"ui/1.2.0/pc/static/image/newLogo-16042.png");
Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);
Notification.MessagingStyle.Message message =
new Notification.MessagingStyle.Message("WeTestMessage", 2000, p);
//show image
Uri image = Uri.parse(
"http://cdn.wetest.qq.com/ui/1.2.0/pc/static/image/newLogo-16042.png");
message.setData("image/png", image);
messageStyle.addMessage(message);
builder.setStyle(messageStyle);
builder.setSmallIcon(R.mipmap.ic_launcher);
Notification notification = builder.build();
NotificationManager notifyManager =
(NotificationManager) getSystemService(
MainActivity.this.getApplicationContext().NOTIFICATION_SERVICE);
notifyManager.createNotificationChannel(channel);
notifyManager.notify("WeTest", 1, notification);
通道設置、廣播和免打擾優化
Android P中,重點做了內容豐富上的工作,同時也對Channel的設置方面做了一些簡化處理。
Android O版本里,首次推出了NotificationChannel,開發者需要配置相應的Channel,才能夠推送通知給用戶。用戶能夠更加細粒度[v1]的針對App的Channel選擇,而不是禁止App的所有通知內容。
而在Android P中,對通知的管理做了進一步的優化,包括可以屏蔽通道組、提供新的廣播類型和新的免打擾優先順序。
屏蔽通道組:用戶可以在通知設置中屏蔽App的整個通道組。開發者可以通過isBlocked()來判斷某個通道組是否被屏蔽了,並根據結果,不向已經被屏蔽的通道組發送任何通知。另外,開發者可以在App中使用新介面getNotificationChannelGroup()來查詢當前的通道組設置。
新的廣播類型:新廣播類型是針對通道和通道組的功能增加的「通道(組)屏蔽狀態變化」廣播。開發者App中可以對所擁有的通道(組)接收廣播,並根據具體廣播內容作出動作。開發者可以通過NotificationManager,查看廣播相關的具體信息。針對廣播的動作可以通過Broadcasts查看具體的方法和信息。
免打擾優先順序:NotificationManager.Policy增加了兩個新的優先順序常量,PRIORITY_CATEGORY_ALARMS(警告優先),PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER(媒體、系統和游戲聲音優先)。
四、支持多攝像機和相機共享
近一段時間,雙攝、多攝等機型紛紛面世。雙攝及多攝提供了單攝像頭所無法完成的能力,如無縫縮放、散景和立體視覺。Android P在這方面也提供了系統級的API支持。
Android P提供了系統API,支持從兩個或者多個物理攝像頭同步獲取數據流。此前OEM廠商提供的雙攝設備多是廠商自行定製系統實現,此時Android P推出了API,從系統層面上制定了API規范。
新的API提供了在不同相機之間切換邏輯數據流或混合數據流的調用能力。在捕捉延遲方面,提供新的會話參數,降低初始捕捉延遲。同時,提供相機共享能力,以解決在多種使用相機的場景下重復停止、開啟相機流。閃光燈方面,Android P增加基於顯示的閃光燈支持。光學防抖方面,Android P向開發者提供OIS時間戳,用於圖像穩定性優化以及其他特效使用。
此外,Android P還支持外部USB/UVC相機,可以使用更強大的外置攝像頭模組。
五、支持圖像媒體後期處理
Android P引入了新的ImageDecoder,該類除了支持對各種圖片格式的解碼、縮放、裁剪之外,其強大之處在於支持對解碼後的圖像做後期處理(post-process),使用該功能可以添加復雜的自定義特效,比如圓角,或是將圖片放在圓形像框中。編寫後期處理回調函數,你可以添加任何繪圖指令實現需要的效果。
此外,Android P原生支持GIF和WebP格式的動圖,新增了AnimatedImageDrawable類,並被新增的解碼器類ImageDecoder直接支持,用法跟矢量動畫類AnimatedVectorDrawable類似,實現方式也類似,通過新增渲染線程和工作線程,不需要在UI線程處理動圖更新,可以說是無痛使用,非常省心。
下面通過編寫代碼,顯示一張gif圖,並利用後期處理機制,在圖像中間繪制一個綠色的實心圓。
final ImageView image = (ImageView) findViewById(R.id.image);
File gifFile = new File("/data/local/tmp/test.gif");
if (!gifFile.exists()) {
Log.d(TAG, "gifFile is not exsited!");
return;
}
ImageDecoder.Source source = ImageDecoder.createSource(gifFile);
try {
d = ImageDecoder.decodeDrawable(source, new ImageDecoder.OnHeaderDecodedListener() {
@Override
public void onHeaderDecoded(ImageDecoder imageDecoder, final ImageDecoder.ImageInfo imageInfo, ImageDecoder.Source source) {
imageDecoder.setPostProcessor(new PostProcessor() {
@Override
public int onPostProcess(Canvas canvas) {
int w = imageInfo.getSize().getWidth();
int h = imageInfo.getSize().getHeight();
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.GREEN);
canvas.drawCircle(w/2, h/2, h/4, new Paint(paint));
return 0;
}
});
}
});
image.setVisibility(View.VISIBLE);
image.setImageDrawable(d);
} catch (IOException e){
Log.d(TAG, e.toString());
}
Button button = (Button) findViewById(R.id.buttonText);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (d != null && d instanceof AnimatedImageDrawable) {
AnimatedImageDrawable ad = (AnimatedImageDrawable) d;
if (ad.isRunning()) {
Log.d(TAG, "stop running");
ad.stop();
} else {
Log.d(TAG, "start running");
ad.start();
}
}
}
});
六、支持HDR VP9和HEIF
Android P內置了對HDR VP9和HEIF(heic)圖像編碼的支持。HEIF是蘋果在iOS11推出的一種高效壓縮格式,目前在IphoneX、Iphone 8、IPhone 8P上已經支持。該格式的壓縮率更高,但是編碼該格式需要硬體的支持,解碼並不需要。最新的支持庫中的HeifWriter支持從YUV位元組緩沖區、Surface或是Bitmap類轉換為HEIF格式的靜態圖像。
Android P新引入了MediaPlayer2,支持DataSourceDesc創建的播放列表。
功能優化提升一覽
一、神經網路API 1.1
在前不久發布的Android 8.1 (API level 27)上,Google首次在Android平台上推出了神經網路API,這意味著我們的Android機器智能化水平又提高了一大步。而本次Android P,進一步豐富了神經網路的支持,不僅對之前的相關API進行了優化,並且提供了9個新的操作,為具體的數據操作方面提供了更深入的支持。
二、改進表單自動填充
Android 8.0(API等級26)中引入了自動填充框架,這使得在應用中填寫表單變得更加容易。 Android P引入了自動填充服務並實現了多項改進,得以在填寫表單時進一步增強用戶體驗。
三、安全增強
Android P引入了許多新的安全功能,包括統一的指紋驗證對話框和敏感交易的高確信度的用戶確認。應用程序內的指紋認證UI也將會更加一致。
統一的指紋驗證對話框
如果第三方APP想要使用指紋,Android系統框架為應用提供了指紋認證對話框,該功能可以提供統一的外觀和使用體驗,用戶使用起來更放心。如果您的程序還在使用FingerprintManager,現在改用FingerprintDialog替代吧,系統來提供對話框顯示。對了,在使用FingerprintDialog之前,別忘了調用hasSystemFeature()方法檢查手機設備是否支持指紋。
敏感交易的高確信度的用戶確認
Android P系統提供了受保護的確認API,藉助這組全新的API,應用可以使用ConfirmationDialog對話框向用戶提示,請求用戶批准一條簡短的聲明, 該聲明允許應用提醒用戶,即將完成一筆敏感交易,例如支付。
如果用戶接受聲明,應用將會收到一條key-hash的消息認證碼(HMAC),該簽名由TEE產生,以保護用於輸入和認證對話框的顯示。該簽名表示用於已經看到了聲明並同意了。
硬體安全模塊
Android P還提供了StrongBox Keymaster(強力沙盒秘鑰大師),一個存儲在硬體安全模塊的具體實現。在這個硬體安全模塊中有自己的CPU、安全存儲空間,真隨機數生成器,以及額外的機制抵禦應用被篡改或是未授權應用的惡意載入。當檢查存儲在StrongBox Keymaster中的密鑰時,系統通過可信執行環境(TEE)確認密鑰的完整性。為了降低能耗,StrongBox支持了一組演算法和不同長度的秘鑰:
●RSA 2048
●AES 128 and 256
●ECDSA P-256
●HMAC-SHA256 (支持8位元組到64位元組任意秘鑰長度)
●Triple DES 168
需要說明的是,這個機制需要硬體支持。
安全秘鑰導入KeyStore
使用新的ASN.1編碼的秘鑰格式添加導入秘鑰到Keystore,Android P提供了額外的密碼解密安全能力。之後KeyMaster就可以解密KeyStore存儲的秘鑰,這種工作方式使得秘鑰明文永遠不會出現在設備內存中。這項特性要求設備支持Keymaster 4。
四、支持客戶端側Android備份加密
Android P支持使用客戶端密鑰對Android備份進行加密。 這項隱私措施,需要設備的PIN、圖案密碼或標准密碼才能從用戶設備備份的數據中恢復數據。
五、Accessibility優化
為了使App使用更便捷,Android在多個方面為開發者提供了易用性的優化。
1、Navigation semantics
Android P在App的場景切換和操作上為開發者提供了很多的優化點。
2、Accessibility pane titles
Android P中對Section提供了新的機制,被稱為accessibility pane titles, Accessibility services能夠接收這些標題的變化,使得能夠對一些變化提供更加細粒度的信息。
指定Section的標題,可以通過android:accessibilityPaneTitle新屬性來設置,同樣運行時可以通過setAccessibilityPaneTitle()來設置標題。
3、頂部欄導航
Android P提供了新的頂部欄導航機制,通過設置View實例的android:accessibilityHeading屬性為true,來顯示邏輯標題。通過這些標題,用戶就可以從一個標題導航到下一個標題,
4、群組導航和輸出
針對屏幕閱讀器,Android P對View提供了新的屬性android:screenReaderFocusable代替原有的android:focusable來做標記,來解決在一些場景下為了使屏幕閱讀器工作而設置View為可獲取焦點的操作。這時,屏幕閱讀器需要同時關注android:screenReaderFocusable和android:focusable設置為ture的View。
5、便捷操作
tooltips交互
Android P中,可以使用getTooltipText()去讀取tooltips的文本內容。使用新的ACTION_SHOW_TOOLTIP和ACTION_HIDE_TOOLTIP控制View顯示或者隱藏tooltips。
新全局交互
Android P在AccessibilityService類中提供了兩個全新的操作。開發者的Service可以通過GLOBAL_ACTION_LOCK_SCREEN幫助用戶鎖屏,通過GLOBAL_ACTION_TAKE_SCREENSHOT幫助用戶完成屏幕截圖。
窗體改變的一些細節
Android P優化了在App多窗體同步發生變化時的更新內容獲取。當出現TYPE_WINDOWS_CHANGED時,開發者可以通過getWindowChanges()API獲取窗體變化情況。
當多窗體發生改變時,每個窗體都會發出自己的事件,開發者可以通過getSource()獲取到事件窗體的根View。
如果你的App為View定義了accessibility pane titles,UI更新時你的Service就能夠識別到相應的改動。當出現TYPE_WINDOW_STATE_CHANGED事件時,使用新方法 getContentChangeTypes()返回的類型,就能夠獲取到當前窗體的變化情況。例如,現在就能夠通過上述的機制,檢測到一個[v1]窗格是否有了新標題,或者一個窗格的消失。
六、新的Rotation方案
旋轉屏幕,是一些游戲、視頻等場景必要的操作,但有一些場景,用戶旋轉屏幕並不是為了讓應用顯示從豎屏變成橫屏或反過來。為了避免這種誤操作,Android P提供了新的機制,開發者可以指定屏幕不隨重力感應旋轉,而是用戶通過一個單獨的按鈕自行控制屏幕顯示轉向。
⑵ android 怎麼實現在室內定位
這個很難實現房間內定位,定位是靠檢測不同信號反射角,房間內距離過短且牆壁反射信號,說以現在來說有很大難度!
以下部分摘抄:
大家都知道GPS,這個東西很強大,被各行各業使用。不過它也有一個很明顯的缺陷,就是在室內不能定位,而且一般民用的精度也不夠高(10m左右),相對於室內導航的要求(1m左右)還有一段距離。隨著智能手機的普及,以及移動互聯網的發展,地圖與導航類軟體將進入一個新的時代——室內導航。近幾年來,包括谷歌、微軟、蘋果、博通等在內的一些科技巨頭,還有一些世界有名的大學都在研究室內定位技術。
室內定位技術的商業化必將帶來一波創新高潮,各種基於此技術的應用將出現在我們的面前,其影響和規模絕不會亞於GPS。我們可以想像一些比較常見的應用場景,比如在大型商場裡面藉助室內導航快速找到出口、電梯,家長用來跟蹤小孩的位置避免小孩在超市中走丟,房屋根據你的位置打開或關閉電燈,商店根據用戶的具體位置向用戶推送更多關於商品的介紹等等。之前筆者看過諾基亞發布的一個視頻,一位商務人士將手提包落在一個商店旁,當他走出幾米遠時手機就發出了提醒。室內定位還有很多場景可以被用上,讓我們放開思維盡情遐想吧。
目前我們已經能夠看到一些室內定位技術的應用介紹了。據我所知的有谷歌、諾基亞、博通、IndoorAtals、Qubulus、杜克大學這幾個方案。下面筆者就把它們整理一下,歡迎大家在此基礎上進行指正、補充。
談談室內定位
谷歌方案
谷歌手機地圖6.0版的時候已經在一些地區加入了室內導航功能,此方案主要依靠GPS(室內一般也能搜索到2~3顆衛星)、wifi信號、手機基站以及根據一些「盲點」(室內無GPS、wifi或基站信號的地方)的具體位置完成室內的定位。目前此方案的精度還不是很滿意,所以谷歌後來又發布了一個叫「Google Maps Floor Plan Marker」的手機應用,號召用戶按照一定的步驟來提高室內導航的精度。
谷歌一直在努力解決兩個問題:獲取更多的建築平面圖;提高室內導航的精度。建築平面圖是室內導航的基礎,就如同GPS車用導航需要電子導航地圖一樣。谷歌目前想通過「眾包」的方式解決數據源的問題,就是鼓勵用戶上傳建築平面圖。另外,用戶在使用谷歌的室內導航時,谷歌會收集一些GPS、wifi、基站等信息,通過伺服器進行處理分析之後為用戶提供更准確的定位服務。
諾基亞方案
諾基亞採用的是HAIP技術,具體是什麼筆者也沒能查到更多的資料,不過諾基亞正在努力使它成為藍牙協議的一部分,這樣只要你的設備帶有藍牙模塊,就能夠使用這種技術進行定位。當然,僅有一個藍牙模塊還不能完成定位,還需要在室內安裝一種定位發射台,通過這兩者之間的通信完成定位。這種發射台可以覆蓋100m×100m的范圍,定位精度在30cm~100cm,據說這種發射台還有成本低、功耗低等特點,一台或多台都能完成定位。
博通方案
博通公司研製了一種用於室內定位的新晶元(BCM4752),具備三維定位功能(即你所在位置的高度也算出來)。這種晶元可以通過wifi、藍牙或NFC等技術來提供室內定位系統支持。更強大的是,該晶元可以結合其它感測器,例如手機里的陀螺儀、加速度感測器、方位感測器等,將你位置的變化實時計算出來,甚至做到沒有死角。博通公司的如意算盤是將這種晶元內置到智能手機里。
IndoorAtlas方案
IndoorAtlas是一家專注於室內導航解決方案的公司,剛成立不久。IndoorAtlas的方案基於地球磁場,依據是每一個具體位置的磁場信息都不一樣。不過使用這種技術進行導航比較麻煩,首先用戶需要上傳建築平面圖,然後還需要你拿著移動設備繞室內一圈,記錄下各個位置的地磁信號特徵,這些信息需要上傳到IndoorAtlas的伺服器。最後,你需要使用IndoorAtlas提供的工具包開發一個應用才能使用定位功能(IndoorAtlas的開發工具包可以在線申請,不過筆者申請了兩次都沒結果)。
Qubulus方案
跟IndoorAtlas不同的是,Qubulus公司根據無線電信號(Radio Signature)來定位。每一個位置的無線電信號數量、頻度、強度等也是不同的,Qubulus根據這些差異計算出你的具體位置。使用Qubulus的方案,你同樣需要收集室內的無線電信號。Qubulus也提供了開發工具包,很容易申請下來。開發工具包里有一個例子,可以使用Eclipse直接編譯通過。
杜克大學方案
杜克大學則藉助現實生活中路標(landmarks)的思想,正在開發一個叫做UnLoc的應用。此應用通過感知wifi、3G信號死角,以及一些運動特徵,如電梯、樓梯等,並根據這些位置已知的路標來計算你的位置。當你移動的時候,就根據其他感應器( 陀螺儀、加速度感測器、方位感測器等)來跟蹤你的位置。這一過程精度會逐漸降低,但當你到達下一個路標時,位置就會被校準
⑶ 移動gis平台ucmap for android有哪些功能哪位大神詳細列舉一下
UCMap for Android是當前主流的移動GIS開發組件,擁有業界最快的地圖顯示性能,依託龐大的介面體系為開發者提供強大且豐富的定製功能,UCMap for Android從2009年第一版推出至今,經歷了多次的版本升級,其穩定性得到眾多實際項目的檢驗,在GIS各行業得到廣泛應用,例如,土地確權、國土監察、電力踏勘、林業調查、林業消防、管線巡檢、部件採集、城市管理、房產測繪、農業測圖配方、單兵通、航跡管理、室內導航、智慧景區、公安應急等
1、數據格式
UCMap for Android支持通用的矢量地圖格式SHP,支持各種遙感影像格式Geotiff、Img、BMP、JPG、PNG等,同時還支持離線的Google地圖和影像,或者自定義瓦片圖;
2、數據加密
地圖數據是重要的保密信息,為了在數據丟失或未授權的情況下,外界無法解讀出數據本身的內容,這就要求數據以密文的形式存在;為此,UCMap for Android支持地圖數據的加密,經過加密的地圖是以密文的形式存在,只有輸入正確的口令才能解密;
3、數據更新
地圖數據是有現勢性的,即經過一段時間,由於地理自然環境的變化,地圖數據也應及時更新,這樣才能讓地圖數據更加准確地反映現實情況,所以,地圖數據的更新就顯得尤為重要;UCMap for Android不但支持離線地圖,同時也支持地圖在線更新,即可以在線更新替換整個地圖數據,也可以更新替換地圖中的某些圖層;
4、符號化
地圖是將地理數據通過符號化的方式予以展現的,UCMap for Android除了支持常規預定義的點、線、面符號外,還支持自定義的SVG矢量符號,用戶可以自定義各種矢量符號來渲染地圖,實現地圖強大的直觀表現力;
5、地圖顯示
地圖是由各個專題的圖層疊加而成,圖層的性質有兩種,即矢量圖層和影像圖層,在坐標一致的前提下,可以將影像圖層作為背景圖,將矢量圖層疊加在影像圖層之上;UCMap for Android擁有業界最高的地圖瀏覽性能,支持矢量圖和影像圖疊加顯示,支持地圖的縮小、放大、平移、雙指旋轉,支持滑動的動畫效果,支持地圖比例尺&指北針等小部件;
6、地圖與圖層管理
裝載地圖、設置\獲取地圖范圍、設置\獲取地圖比例尺、設置\獲取地圖單位、獲取地圖圖層,添加圖層、刪除圖層、調整圖層順序、修改圖層標注欄位、修改圖層樣式、查詢圖層等;
7、地圖查詢
地圖查詢分屬性查詢和空間查詢,屬性查詢是以地圖要素的某些屬性值為條件進行SQL查詢,查詢返回要素的屬性或幾何信息;空間查詢是以地圖要素之間的空間拓撲關系為條件進行擴展型的SQL查詢;UCMap for Android支持各種類型的SQL查詢,尤其是空間查詢,能覆蓋要素之間各種空間拓撲關系,如Disjoint、Touches、Crosses、Within、Overlaps、Contains、Intersects、Equals、DWithin等空間謂詞;
8、要素編輯
一個要素對應資料庫表中的一條記錄,記錄里有屬性欄位和幾何欄位,所謂編輯就是對這些屬性欄位和幾何欄位進行增加、刪除、修改等動作,於是,添加要素、刪除要素、更新要素、導出shp是UCMap for Android最基礎的功能;為了適應移動端手指或觸筆來編輯幾何圖形,UCMap for Android設計了人性化的編輯交互模式,如點選或框選要素、捕捉節點、移動節點、添加節點、刪除節點、移動要素、編輯動作的Redo\Undo(可以無數次)、信息查詢info等;UCMap for Android還提供了更高級的編輯,如線或圖斑的裁剪、合並等拓撲編輯;針對測量成圖的需求,還提供了根據測圖過程中測得的長度和角度自動繪制圖形的功能;
9、專題圖渲染
UCMap for Android支持多種專題圖渲染,根據所給定的屬性條件,可定製各種專題渲染,甚至可以隱藏圖層中的要素;
10、坐標系轉換
UCMap for Android支持2個任意投影類型之間的坐標轉換,支持四參數、七參數坐標轉換;
11、地圖量算
UCMap for Android支持地圖測距、測面積、測角度;
12、定位監控和軌跡顯示
UCMap for Android能實時對若干監控點進行實時顯示並快速刷新,能查詢並繪制某個監控點的歷史軌跡;
13、地圖標注
UCMap for Android提供了一個特殊的圖層,即裝飾圖層,用戶可以在這個圖層上對地圖進行標繪,下面要重點介紹的地圖標繪就繪制在這個圖層上,除了能標繪軍標以外,還能繪制矩形、直線、圓、橢圓、路徑、文字等;
14、等值線繪制
UCMap for Android支持對離散高程點(或氣象點)進行插值,並生成高程等值線或氣象等值線圖;
15、路徑規劃與導航
UCMap for Android支持特定場所的簡單道路的路徑規劃,例如,室內地圖、景區地圖、港口碼頭等特定場所的路徑規劃;
16、地圖標繪
針對軍事作戰、應急等行業,協同標繪是其基本需求,UCMap for Android是支持矢量標繪,能對標繪的符號進行組合、拆分、移動、縮放、拉伸、旋轉等等操作;標繪是在裝飾圖層上進行的,一個標繪就是一個裝飾對象,裝飾對象可以是任意的SVG符號,也可以是預定義的圖形;對於測繪行業,地圖標繪也為測繪草圖的繪制提供了完美的解決方案;
17、集成功能
UCMapfor Android還可以將手機拍照、錄音、錄像、GPS定位等功能集成在一起,在地圖上記錄這些多媒體信息採集的時空信息;
UCMapfor Android為開發人員提供了強大的GIS基礎平台,用戶根據自身項目的需求、通過二次開發來實現所需要的應用產品;UCMap介面龐大、結合本人近幾年移動GIS開發經驗,以上只是UCMap基礎功能的節略,更深入細致的使用還需要開發者閱讀UCMap的開發教程和API文檔!
⑷ 鍦ㄥ浗澶栫敤浠涔堢墝瀛愮殑鎵嬫満鍦板浘濂藉憿錛
鍦ㄥ浗澶栧栧彲浠ョ敤鐨勫艱埅鍦板浘錛
1.鐧懼害鍦板浘錛氫笓闂ㄤ負涓鍥戒漢鍑哄冩父閲忚韓瀹氬仛錛岄潰鍚戝浗鍐呭嚭澧冩父浜虹兢銆傜洰鍓嶅凡緇忚嗙洊鍏ㄧ悆200澶氫釜鍥藉訛紝鐑闂ㄥ嚭澧冩父鐩鐨勫湴杈懼埌鍏ㄨ嗙洊錛屽姛鑳戒笂姝ヨ屽艱埅,椹捐濺瀵艱埅閮芥湁錛屽綋鍦板煄甯傚ぉ姘旓紝緲昏瘧錛屾眹鐜囷紝鍦伴搧錛屾敾鐣ラ兘鑳芥柟渚挎煡鍒幫紝鍑嗙『鎬у緢楂樸