前言
公司開展乙個專案,需要根據客戶手機定位獲取周圍內的精準廣告,具體是管理員在地圖上繪製多邊形的廣告範圍,落在範圍內的客戶就看到此廣告。下面將我的實現方法簡單敘述一下,以供有相同需求的朋友參考。
ef平面物件dbgeometry
///view code///從多點資料生成多邊形
/// ///
public
static dbgeometry polygonfrompointsjson(string
pointsjson)
var closepoints = ((ienumerable)points).select(item => string.format(" "
, item.lng, item.lat));
var wkt = "
polygon((
" + string.join("
,", closepoints) + "))"
;
return
dbgeometry.polygonfromtext(wkt, system_id);
}
廣告實體裡用dbgeometry型別記錄多邊形範圍
///view code///廣告範圍表
///[serializable]
public
class
advrange : entity
//////
所屬城市標識id
/// public guid cityid
//////
多邊形
///
public dbgeometry polygon
}
從dbgeometry物件獲取多邊形的點
dbgeometry物件的wellknownvalue屬性的可以獲取wkt文字,目前我沒有找到相關工具轉wkt轉為json,所以用正規表示式獲取也能滿足需要,然後將結果轉換為json就可以放到地圖上進行展示了。
///view code///獲取多邊形的點
/// ///
public
static listgetpolygonpoints(this
dbgeometry geometry));}
if (list.first().gethashcode() ==list.last().gethashcode())
return
list;
}
廣告範圍是否包含客戶位置的點
dbgeometry有很多方法和屬性,ef可以將其翻譯到對應的sql語句,其中polygon.intersects(point)可以判斷點是否在多邊形內。
效果圖(中心的紅標註為多邊形的重心)
EF儲存經緯度資料的問題
當採用ef coder first生成的dbcontext儲存decimal型別資料到資料庫,預設只會儲存小數點後的前2位小數,其餘均置0 例如儲存101.182352152322,實際存到資料庫裡的資料為101.180000000000。解決方法 在建立專案dbcontext時,重寫dbconte...
儲存DataGridView資料到excel
這個是匯出資料的類。特別說明 匯出時需要有乙個只有一行標題列名行的excel檔案。public class cexcelwrite destfilename string commstr string commstr1 m oleconn new oledbconnection connstr m ...
scrapy儲存資料到文字
import json class myspiderpipeline object 在例項化的時候與處理一些事情 defopen spider self,spider self.file open fenghua.json w defprocess item self,item,spider 資料處...