EF儲存平面資料到SqlServer

2022-01-11 00:22:51 字數 1595 閱讀 8904

前言

公司開展乙個專案,需要根據客戶手機定位獲取周圍內的精準廣告,具體是管理員在地圖上繪製多邊形的廣告範圍,落在範圍內的客戶就看到此廣告。下面將我的實現方法簡單敘述一下,以供有相同需求的朋友參考。

ef平面物件dbgeometry

///

///從多點資料生成多邊形

/// ///

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);

}

view code

廣告實體裡用dbgeometry型別記錄多邊形範圍

///

///廣告範圍表

///[serializable]

public

class

advrange : entity

//////

所屬城市標識id

/// public guid cityid

//////

多邊形

///

public dbgeometry polygon

}

view code

從dbgeometry物件獲取多邊形的點

dbgeometry物件的wellknownvalue屬性的可以獲取wkt文字,目前我沒有找到相關工具轉wkt轉為json,所以用正規表示式獲取也能滿足需要,然後將結果轉換為json就可以放到地圖上進行展示了。

///

///獲取多邊形的點

/// ///

public

static listgetpolygonpoints(this

dbgeometry geometry));}

if (list.first().gethashcode() ==list.last().gethashcode())

return

list;

}

view code

廣告範圍是否包含客戶位置的點

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 資料處...