2015-08-22 54 views
-1

嗨我開發了一個應用程序,它擁有超過100個可以訪問的設置位置,但此刻我將它們設置在各個類中,這意味着我有超過100個位置圖類是懶惰的,遠非理想。將地圖座標傳遞給Google地圖的最佳和最簡單的方法

我想創建一個數據庫,我可以存儲位置並讓地圖類在需要時檢索位置。

什麼是使用sqlite實現它的最好和最簡單的方法。

到目前爲止,我設置了一個數據庫的經度和緯度爲整數和主鍵,並設置一個名稱字段作爲標識符,但我正在努力如何執行sqlite。

+0

爲什麼不直接使用的條目SQLite數據庫中的每個位置,並將其加載到加載時的地圖? –

+0

你會推薦在Map類中使用什麼方法 – JonniBravo

回答

1

如果你想嚴格保持Java和Android而不使用甚至很小的SQLite片段,只想從項目的資源中加載它們,它不是很靈活,但不是太難。所以如果你只需要float的經度和緯度座標,你可以簡單地將它們加載到PointF數組中,如果你還想要一個對應的名稱,你可以使用HashMap,否則你需要一個自定義的座標類或只是做你所做的任何事情需要與這些座標相呼應。所以對於XML部分

你基本上兩個選項:

  1. 您創建一個string-array和使用分離器字符在 名稱,緯度,經度和whateer否則你需要分割。容易 組織在XML,更難代碼(你可能會得到與parseFloat誤差修改):

    XML(分離器字符是 「;」):

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <string-array name="map_coordinates"> 
         <item>New York;40.7127837;-74.0059413</item> 
         <item>London;51.5073509;-0.1277583</item> 
         <item>Paris;48.856614;2.3522219</item> 
        </string-array> 
    </resources> 
    

    代碼檢索到HashMap<String,PointF>

    HashMap<String, PointF> mapCoordinates = new HashMap<>(); 
    String[] mapStrings = getResources().getStringArray(R.array.map_coordinates); 
    
    for (String mapString: mapStrings) { 
        String[] mapStringParts = mapString.split(";"); 
        String name = mapStringParts[0]; 
        float longitude = Float.parseFloat(mapStringParts[1]); 
        float lattitude = Float.parseFloat(mapStringParts[2]); 
    
        /*If you want to do something with your entries here, 
        you don't have to use HashMap, just an idea*/ 
        mapCoordinates.put(name, new PointF(longitude, lattitude)); 
    } 
    
    //To find the location of a specific name use: 
    PointF location = mapCoordinates.get("NAME"); 
    
  2. 您可以使用多個數組分別存儲名稱,經度,格點和其他東西。有很多項目很難看出哪個經度屬於哪個地理位置,但是不會有anny error possiblel雖然您必須使用integer而不是float,所以只需要 將它們除以特定值以移動浮點:

    XML:

    <string-array name="map_names"> 
        <item>New York</item> 
        <item>London</item> 
        <item>Paris</item> 
    </string-array> 
    <integer-array name="map_longitudes"> 
        <item>407127837</item> 
        <item>515073509</item> 
        <item>48856614</item> 
    </integer-array> 
    <integer-array name="map_lattitudes"> 
        <item>-740059413</item> 
        <item>-1277583</item> 
        <item>2352222</item> 
    </integer-array> 
    

    代碼:

    HashMap中mapCoordinates =新的HashMap <>();

    String[] mapNames = getResources().getStringArray(R.array.map_names); 
    int[] mapLongitudes = getResources().getIntArray(R.array.map_longitudes); 
    int[] mapLatitudes = getResources().getIntArray(R.array.map_lattitudes); 
    for (int i = 0; i < mapNames.length; i++) { 
        String name = mapNames[i]; 
        float longitude = ((float) mapLongitudes[i])/1000000; 
        float latitude = ((float) mapLatitudes[i])/1000000; 
    
        //Again, do whatever you want with those values 
        mapCoordinates.put(name, new PointF(longitude, latitude)); 
    } 
    
    //To find the location of a specific name use: 
    PointF location = mapCoordinates.get("NAME"); 
    

但我會建議尋找到SQLite數據庫作爲這種存儲就像名字座標表的正是他們的建造。

希望這有助於:)

相關問題