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

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

elasticsearch_ionic_mapelasticsearch_ionic_info_page

構架設計

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

Django ElasticSearch Ionic 架構

GIS架構說明 —— 服務端

簡單說明:github

  • 用戶在前臺或者後臺建立數據。
  • 在model保存數據的時候,會調用Google的API解析GPS
  • 在haystack的配置中設置實時更新,當數據建立的時候自動更新索引
  • 數據被ElasticSearch索引

下面是框架的一些簡單的介紹數據庫

Django

Django 是一個開放源代碼的Web應用框架,由Python寫成。採用了MVC的軟件設計模式,即模型M,視圖V和控制器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容爲主的網站的。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。django

Django 的主要目標是使得開發複雜的、數據庫驅動的網站變得簡單。Django注重組件的重用性和「可插拔性」,敏捷開發和DRY法則(Don't Repeat Yourself)。在Django中Python被廣泛使用,甚至包括配置文件和數據模型。設計模式

首先考慮Django,而不是其餘Node或者Ruby框架的緣由是:api

  • 內置認證系統
  • 內置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.elasticsearch

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

相關文章
相關標籤/搜索