標籤:django elasticsearch ionic gis android
搜尋引擎是個好東西,GIS也是個好東西。當前還有Django和Ionic。最後
構架設計
對我們的需求進行簡要的思考後,設計出了下面的一些簡單的架構。
GIS架構說明 —— 服務端
簡單說明:
- 使用者在前台或者後台建立資料。
- 在model儲存資料的時候,會調用Google的API解析GPS
- 在haystack的配置中設定即時更新,當資料建立的時候自動更新索引
- 資料被Elasticsearch索引
下面是架構的一些簡單的介紹
Django
Django 是一個開放原始碼的Web應用程式框架,由Python寫成。採用了MVC的軟體設計模式,即模型M,視圖V和控制器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的。並於2005年7月在BSD許可證下發布。這套架構是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。
Django 的主要目標是使得開發複雜的、資料庫驅動的網站變得簡單。Django注重組件的重用性和“可插拔性”,敏捷開發和DRY法則(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括設定檔和資料模型。
首先考慮Django,而不是其他Node或者Ruby架構的原因是:
當然這是其他架構也所擁有的,主要特性還有:
- 一個表單序列化及驗證系統,用於HTML表單和適於資料庫儲存的資料之間的轉換。
- 一套協助建立地理資訊系統(GIS)的基礎架構
最後一個才是亮點,內建GIS,雖然沒怎麼用到,但是至少在部署上還是比較方便的。
Haystack
Haystack provides modular search for Django. It features a unified, familiar API that allows you to plug in different search backends (such as Solr, Elasticsearch, Whoosh, Xapian, etc.) without having to modify your code.
Haystack是為Django提供一個搜尋模組blabla..,他的主要特性是可以
write your search code once and choose the search engine you want it to run on
也就是說你只需要寫你的代碼選擇你的搜尋引擎就可以工作了。
Elasticsearch
在上面的Haystack提供了這些一堆的搜尋引擎,當然支援地點搜尋的只有Solr和Elasticsearch,他們支援的空間搜尋有:
- within
- dwithin
- distance
- order_by(‘distance’)
- polygon
在文檔上沒有寫Solr的polygon搜尋,但是實際上也是支援的(詳細見這篇文章: google map solr polygon 搜尋。
至於為什麼用的是Elasticsearch,是因為之前用Solr做過。。。
GIS架構說明 —— 用戶端簡單說明 —— GET
- 當我們訪問Map View的時候,會調用HTML5擷取使用者的位置
- 根據使用者的位置定位,設定縮放
- 根據使用者的位置發出Elasticsearch請求,返回結果中帶上距離
- 顯示
簡單說明 —— POST
- 使用者填寫資料會發給Django API,並驗證
- 成功時,存入資料庫,更新索引。
Ionic
Ionic提供了一個免費且開源的移動最佳化HTML,CSS和JS組件庫,來構建高互動性應用。基於Sass構建和AngularJS 最佳化。
用到的主要是AngularJS,之前用他寫過三個APP。
Django REST Framework
與Django Tastypie相比,DRF的主要優勢在於Web介面的調試。
其他
因為選的是比較熟悉的技術棧,所以也只花了不到兩天的業餘時間完成的。或許,這也是全棧程式員的優勢所在。
服務端代碼: https://github.com/phodal/django-elasticsearch
用戶端代碼: https://github.com/phodal/ionic-elasticsearch
Django Elasticsearch Ionic 打造 GIS 行動裝置 App —— 架構設計