Django ElasticSearch Ionic 打造 GIS 移動應用 —— 架構設計

Phodal發表於2015-04-26

搜尋引擎是個好東西,GIS也是個好東西。當前還有Django和Ionic。最後效果圖

elasticsearch_ionic_map elasticsearch_ionic_info_page

構架設計

對我們的需求進行簡要的思考後,設計出了下面的一些簡單的架構。

Django ElasticSearch 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框架的原因是:

  • 內建認證系統
  • 內建CSRF

當然這是其他框架也所擁有的,主要特性還有:

  • 一個表單序列化及驗證系統,用於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提供了這些一堆的搜尋引擎,當然支援地點搜尋的只有SolrElasticSearch,他們支援的空間搜尋有:

  • within
  • dwithin
  • distance
  • order_by(‘distance’)
  • polygon

在文件上沒有寫Solr的polygon搜尋,但是實際上也是支援的(詳細見這篇文章: google map solr polygon 搜尋

至於為什麼用的是ElasticSearch,是因為之前用Solr做過。。。

GIS架構說明 —— 客戶端

簡單說明 —— GET

  1. 當我們訪問Map View的時候,會呼叫HTML5獲取使用者的位置
  2. 根據使用者的位置定位,設定縮放
  3. 根據使用者的位置發出ElasticSearch請求,返回結果中帶上距離
  4. 顯示

簡單說明 —— POST

  1. 使用者填寫資料會發給Django API,並驗證
  2. 成功時,存入資料庫,更新索引。

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

相關文章