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

2012年6月13日 星期三

方法。判斷封閉區域內外。InputType切換。


為了考賞自己所以買了新背包,超開心。

然後該工作的還是要工作,最近實做了一個試著判斷封閉區域內外的程式,詳細說明如下:

本來還有更高畫質的圖檔的,可惡Google竟然不給我傳。
然後傳完赫然發現第三個點點位置跑掉了!(大驚)


主要的演算法參考這裡(備份在這裡):

/**
     * 這是主要的演算法。
     * 
     * @param p
     *            p點,待測點。
     * @param polygon
     *            依序點集合所產生的封閉區間。
     * @param mStringBuffer
     *            將演算法的資訊顯示出來所需要的文字容器
     * @return true is inside;false is outside
     */
    private boolean InsidePolygon(Vector<GeoPoint> polygon, GeoPoint p,
            StringBuffer mStringBuffer) {
        // ref: http://paulbourke.net/geometry/insidepoly/
        int counter = 0;
        int i;
        double xinters;
        GeoPoint p1, p2;

        p1 = polygon.get(0);
        for (i = 1; i <= polygon.size(); i++) {
            p2 = polygon.get(i % polygon.size());
            if (p.getLatitudeE6() > Math.min(p1.getLatitudeE6(),
                    p2.getLatitudeE6())) {
                if (p.getLatitudeE6() <= Math.max(p1.getLatitudeE6(),
                        p2.getLatitudeE6())) {
                    if (p.getLongitudeE6() <= Math.max(p1.getLongitudeE6(),
                            p2.getLongitudeE6())) {
                        if (p1.getLatitudeE6() != p2.getLatitudeE6()) {
                            xinters = (p.getLatitudeE6() - p1.getLatitudeE6())
                                    * (p2.getLongitudeE6() - p1
                                            .getLongitudeE6())
                                    / (p2.getLatitudeE6() - p1.getLatitudeE6())
                                    + p1.getLongitudeE6();
                            if (p1.getLongitudeE6() == p2.getLongitudeE6()
                                    || p.getLongitudeE6() <= xinters)
                                counter++;
                        }
                    }
                }
            }
            p1 = p2;
        }

        mStringBuffer.append("\n count is: " + counter);
        if (counter % 2 == 0) {
            return (false);
        } else {
            return (true);
        }
    }
功能很簡單,就是只要在狀態2底下我們點擊地圖,落點在紅色範圍內就是圈內,落點在紅色範圍外就是圈外,判斷為圈內就會有特別的標示和說明。
然後,還有一個也是功能很簡單的程式,就是把InputType類別給全部列出來讓我們調用,
畫面如下:


然後程式碼很蠢,所以就不貼上來分享了。
要注意的,有些type有版本的限制,所以可能會無效,請參考官網說明,
可以試著把Filter by API Level上下調看看就會發現嘍!

不嫌棄的話載點在這裡。


















2012年4月9日 星期一

說說,MapView也就是地圖。 API Key篇。

好可愛~>///<'

注意目前Google Map已經是v2的版本,申請程序也有所不同,其中獲取SHA1的方法依然可以下面所敘述的方法獲得,不過申請的方式請參照這個網頁。

猜測這篇會有點長,所以分成幾個段落。

話說,我們要使用Google地圖開發就必須知道幾樣事情:
  1. 它使用的是google的API,所以我們在選擇Build Target的時候,要找有標明「Google APIs」相對應API Level的版本。

  1. 理由同上,所以要注意的必須在application裡面加上額外的宣告(應該是叫做宣告吧?)。

  1. ...
    <uses-library android:name="com.google.android.maps" />
        </application>
    
  2. MapView是一個Viewgroup,必需要注意兩點:
    1. touchListener會和mapView相關的物件(MapController)產生衝突。
    2. MapView需要API Key才能正確的顯示地圖圖檔。
於是我們今天的關鍵就來啦!今天來分享小書如何申請和使用API Key,讓我們一步一步來:

  1. 網路上方法很多、很多、很多,小書整理出了一個至少我在手機和模擬器上可以用的還滿簡單的方法,首先先打開Eclipse,在上面的bar中選擇window->Preferences,會跳出一個視窗長這樣:
     
    其中那個Default debug keystore的路徑記起來。
  2. 然後要找到jre的資料夾,裡面有個bin的資料夾,路徑也要記起來(像是我的路徑就是:C:\Program Files\Java\jre7\bin),沒意外好像都會一樣?
  3. 接著就要動真格的了,請打開命令提示字元視窗(cmd),進到bin的資料夾中:
  4. 要在這裡面才有辦法使用keytool指令。然後我們把之前 Default debug keystore的路徑配合指令輸入:
    keytool -list -keystore "路徑" -v
    
    
    像我的就是這樣:
    keytool -list -keystore "C:\Users\Mr.Lin\.android\debug.keystore" -v
    
  5. 這時候你會看到一堆資訊,你可以用視窗右邊的scroll bar找到其中的MD5碼,把它記起來。

    這邊說明一下, 其實很多網路上的文件說明都沒有加上 -v的指令,參考這裡,因為我也遇到只有出現SHA1碼的問題,所以必需要加上-v 指令才會跑出MD5碼。
  6. 進入Google的這個網頁,你會發現它會有一堆英文,莫急莫驚莫害怕,拉到最下面它會有個勾勾把它打勾,然後把MD5檔貼進去,會看到一個「感謝您申請Android Maps API金鑰!」的網頁,那就代表你成功啦!

然後使用方法大致上跟使用view一樣,至於相關調用的方法,之後再說吧!啾咪!



追蹤者