SuperMap iMobile for Android常見問題解答集錦(十三)
作者:皇皇
問:SuperMap iMobile for Android中是否支援實時GPS定位,怎麼實現?
答:可以支援;通過LocationManagePlugin管理外掛類,開啟GPS裝置,並設定定位時間間隔,預設為1000毫秒,最後新增位置改變監聽器addLocationChangedListener()來監聽獲取定位的經緯度。
問:SuperMap iMobile 8C for Android中怎麼求兩點間的距離,返回結果單位是什麼?
答:可以通過Geometrist.distance()實現,該方法中的引數是Geometry1和Geometry2,得到的結果單位和資料集的單位一致,即如果資料集是經緯度的,返回的結果單位就是度,如果資料集是平面投影座標系,返回的結果單位就是米。
問:SuperMap iMobile 8C for Android中剛申請的試用許可,但是執行工程時還是報許可已過期,怎麼回事?
答:首先,確認申請的試用許可放在測試機的位置和工程中設定的許可路徑是否一致;其次,檢視測試機的系統時間是否為當前時間,如果不是應改為當前時間。
問:移動端開發,我把資料和許可拷貝到外掛卡上的,能讀取到嘛?
答:能讀取到的,其程式碼跟讀取儲存卡的一樣,android系統本身會根據程式碼路徑先去記憶體找,如果沒找到再去外掛卡找對應的路徑。
問:怎麼限制地圖的移動只是在地圖範圍內,不想地圖視窗移動到空白區域?
答:可以設定其地圖的鎖定可視範圍。setViewBoundsLocked問true,setLockedViewBounds的可視範圍。
問:SuperMap iMobile 8C for Android的行業導航中GPS定位點作為當前起始點,導航時起始點會發生很大偏移,是什麼原因,怎麼辦?
答:在行業導航中有個一個setIsEncryptGPS(boolean)方法,是用來設定是否加密GPS資料,如果在導航前沒有新增這句程式碼,預設是true,而GPS定位的點在設定為導航的起始點前沒有設定其加密;解決方案就是確保導航的地圖資料和起始點加密與否保持一致即可。
問:SuperMap iMobile 8C中開啟iServer釋出的WMS服務資料失敗,怎麼回事?
答:一般是WMS服務地址的引數設定不對或者服務釋出的WMS版本與程式碼中setWebVersion()引數不一致造成的。
問:我的地圖裡有一個圖層是CAD資料,把地圖開啟在iDesktop能顯示正常,但是用移動端程式開啟地圖,唯獨CAD資料顯示不出來是什麼原因啊?
答:出現這種情況,是因為你的CAD資料是直接作為資料來源的方式開啟的,而目前移動端不支援CAD型別的外部資料來源顯示,如果需要CAD資料顯示出來,請用匯入資料集的方式,將CAD檔案匯入到資料來源裡,然後對CAD圖層重新指定資料集即可。
問:SuperMap iMobile 8C(2017) for Android設定固定比例尺在怎麼沒效果?
答:通過mapControl.getMap().setVisibleScales(比例尺陣列)設定固定比例尺,數組裡面的值是1除以比例尺的值,不能是1:70000或者1/70000,需要是1.428571428571429e-5
問:我要在動態圖層裡新增一個面對象,怎樣讓其面填充區域透明,邊線顏色不透明呢?
答:可以做到。首先製作一個帶有透明風格圖片,步驟:1.把純色圖片插入PPT裡–雙擊圖片–在左上角點選設定透明色–然後點圖片另存為PNG格式。2.對動態元素風格設定背景圖片DynamicStyle.setBackground(),設定動態元素邊線顏色DynamicStyle.setLineColor()。3.把動態元素風格再賦給動態面對象DynamicPolygon.setStyle(DynamicStyle)。
問:在Android端訪問iServer釋出的rest地圖服務,該服務在iServer那邊更新後,能讓Android端也實時更新,動態出圖啊?
答:可以做到Android端實時更新,動態出圖,只需清除資料集和該圖層的快取即可,程式碼如下:
Layer imageLayer=mapControl.getMap().getLayers().get(“rest”);
DatasetImage image=(DatasetImage) imageLayer.getDataset();
imageLayer.removeCache();
image.getMapCacheService().removeCache();
問:在Android移動端開發裡,通過程式碼建立了標籤專題圖,怎麼可以讓一部分標籤不顯示啊?
答:分兩種情況:
1.如果只是讓一些小物件的標籤不顯示的話,可以設定themeLabel.setSmallGeometryLabeled(false)屬性。
2.如果讓某些特定的標籤物件不顯示的話,可以做如下設定:
QueryParameter parameter=new QueryParameter();
parameter.setAttributeFilter(“SMID=5”);
themeLabelLayer.setDisplayFilter(parameter);
mapcontrol.getMap().refresh();
問:已知一個點和待畫直線的斜率,怎麼繪製出該直線?
答:可以根據已知點、線斜率和另取待畫線的長度L,通過三角形中的正弦和餘弦求出由已知點和L長的斜邊構成的水平長度和豎直長度,然後根據已知點座標得到在直線上的另一個點座標,最後通過兩個點畫線。
問:SuperMap iClient for Android如何用氣泡在地圖顯示詳細資訊?
答:在MapView上面新增view,如下顯示點的座標資訊:
View view = LinearLayout.inflate(MainActivity.this, R.layout.overlay_view, null);
TextView text=(TextView)view.findViewById(R.id.textView);
text.setText(“當前座標 X:”+arg1.getPoint().x+” Y:”+arg1.getPoint().y);
MapView.LayoutParams lp = new MapView.LayoutParams(172, 172, arg1.getPoint(), LayoutParams.CENTER);
mapView.addView(view, lp);
mapView.invalidate();
問:SuperMap iClient for Android中如何獲取點選螢幕時的地圖座標資訊?
答:繼承Overlay(class PointTouchOverlay extends Overlay)在onTouchEvent(MotionEvent event, final MapView mapView)方法中獲取螢幕座標X(event.getX())和Y(event.getY())值,再把螢幕座標轉地圖座標mapView.getProjection().fromPixels(x,y)。把PointTouchOverlay 新增到mapView的Overlays裡面(mapView.getOverlays().add(pointTouchOverlay))。