EF保存平面数据到SqlServer
前言 公司开展一个项目,需要根据客户手机定位获取周围内的精准广告,具体是管理员在地图上绘制多边形的广告范围,落在范围内的客户就看到此广告。下面将我的实现方法简单叙述一下,以供有相同需求的朋友参考。 EF平面对象DbGeometry DbGeometry可以表示点、
前言
公司开展一个项目,需要根据客户手机定位获取周围内的精准广告,具体是管理员在地图上绘制多边形的广告范围,落在范围内的客户就看到此广告。下面将我的实现方法简单叙述一下,以供有相同需求的朋友参考。
EF平面对象DbGeometry
DbGeometry可以表示点、线、多边形等平面对象,输入对象可以是WKT(Well-known text),我们可以把百度地图上的polygon对象的点转换为多边形的wkt描述,再转为DbGeometry进行保存。
<span>///</span> <span><summary></summary></span> <span>///</span><span> 从多点数据生成多边形 </span><span>///</span> <span></span> <span>///</span> <span><param name="pointsJson"></span><span>百度地图多边形的点集</span><span></span> <span>public</span> <span>static</span> DbGeometry PolygonFromPointsJson(<span>string</span><span> pointsJson) { </span><span>var</span> points = JsonSerializer.ToEntity<list>><span>(pointsJson); </span><span>if</span> (points.First().GetHashCode() !=<span> points.Last().GetHashCode()) { points.Add(points.First()); } </span><span>var</span> closePoints = ((IEnumerable<lnglat>)points).Select(item => <span>string</span>.Format(<span>"</span><span>{0} {1}</span><span>"</span><span>, item.Lng, item.Lat)); </span><span>var</span> wkt = <span>"</span><span>POLYGON((</span><span>"</span> + <span>string</span>.Join(<span>"</span><span>,</span><span>"</span>, closePoints) + <span>"</span><span>))</span><span>"</span><span>; </span><span>return</span><span> DbGeometry.PolygonFromText(wkt, SYSTEM_ID); }</span></lnglat></list>
广告实体里用DbGeometry类型记录多边形范围
<span>///</span> <span><summary></summary></span> <span>///</span><span> 广告范围表 </span><span>///</span> <span></span> <span> [Serializable] </span><span>public</span> <span>class</span><span> AdvRange : Entity { </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 广告范围名 </span><span>///</span> <span></span> <span> [Required] [Length(</span><span>20</span><span>)] </span><span>public</span> <span>string</span> Name { <span>get</span>; <span>set</span><span>; } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 所属城市标识ID </span><span>///</span> <span></span> <span>public</span> Guid CityId { <span>get</span>; <span>set</span><span>; } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 多边形 </span><span>///</span> <span></span> <span>public</span> DbGeometry Polygon { <span>get</span>; <span>set</span><span>; } }</span>
从DbGeometry对象获取多边形的点
DbGeometry对象的WellKnownValue属性的可以获取WKT文本,目前我没有找到相关工具转WKT转为Json,所以用正则表达式获取也能满足需要,然后将结果转换为json就可以放到地图上进行展示了。
<span>///</span> <span><summary></summary></span> <span>///</span><span> 获取多边形的点 </span><span>///</span> <span></span> <span>///</span> <span><returns></returns></span> <span>public</span> <span>static</span> List<lnglat> GetPolygonPoints(<span>this</span><span> DbGeometry geometry) { </span><span>var</span> list = <span>new</span> List<lnglat><span>(); </span><span>var</span> points = geometry.WellKnownValue.WellKnownText.Matches(<span>@"</span><span>-?[1-9]\d*\.\d*|-?0\.\d*[1-9]\d*</span><span>"</span>).Select(item => <span>decimal</span><span>.Parse(item)).ToArray(); </span><span>for</span> (<span>var</span> i = <span>0</span>; i 2<span>) { list.Add(</span><span>new</span> LngLat { Lng = points[i], Lat = points[i + <span>1</span><span>] }); } </span><span>if</span> (list.First().GetHashCode() ==<span> list.Last().GetHashCode()) { list.RemoveAt(list.Count </span>- <span>1</span><span>); } </span><span>return</span><span> list; }</span></lnglat></lnglat>
广告范围是否包含客户位置的点
DbGeometry有很多方法和属性,EF可以将其翻译到对应的sql语句,其中Polygon.Intersects(point)可以判断点是否在多边形内。
效果图(中心的红标注为多边形的重心)

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Langkah import adalah seperti berikut: Salin fail MDF ke direktori data SQL Server (biasanya C:\Program Files\Microsoft SQL Server\MSSQL\DATA). Dalam SQL Server Management Studio (SSMS), buka pangkalan data dan pilih Lampirkan. Klik butang Tambah dan pilih fail MDF. Sahkan nama pangkalan data dan klik butang OK.

Untuk objek dengan nama yang sama yang telah wujud dalam pangkalan data SQL Server, langkah berikut perlu diambil: Sahkan jenis objek (jadual, paparan, prosedur tersimpan). IF NOT EXISTS boleh digunakan untuk melangkau penciptaan jika objek kosong. Jika objek mempunyai data, gunakan nama lain atau ubah suai struktur. Gunakan DROP untuk memadam objek sedia ada (berhati-hati, sandaran disyorkan). Semak perubahan skema untuk memastikan tiada rujukan kepada objek yang dipadam atau dinamakan semula.

Apabila perkhidmatan SQL Server gagal dimulakan, berikut ialah beberapa langkah untuk diselesaikan: Semak log ralat untuk menentukan punca. Pastikan akaun perkhidmatan mempunyai kebenaran untuk memulakan perkhidmatan. Semak sama ada perkhidmatan pergantungan sedang berjalan. Lumpuhkan perisian antivirus. Membaiki pemasangan SQL Server. Jika pembaikan tidak berjaya, pasang semula SQL Server.

Untuk melihat nombor port SQL Server: Buka SSMS dan sambung ke pelayan. Cari nama pelayan dalam Object Explorer, klik kanan padanya dan pilih Properties. Dalam tab Sambungan, lihat medan Port TCP.

Jika anda secara tidak sengaja memadamkan pangkalan data SQL Server, anda boleh mengambil langkah-langkah berikut untuk memulihkan: hentikan aktiviti pangkalan data periksa log pangkalan data: pulihkan daripada sandaran menggunakan DBCC; alatan parti. Sila sandarkan pangkalan data anda dengan kerap dan dayakan pengelogan transaksi untuk mengelakkan kehilangan data.

Fail pangkalan data SQL Server biasanya disimpan di lokasi lalai berikut: Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data Lokasi fail pangkalan data boleh disesuaikan dengan mengubah suai laluan fail pangkalan data tetapan.

Menghadapi ketinggalan, sambungan data mudah alih perlahan pada iPhone? Biasanya, kekuatan internet selular pada telefon anda bergantung pada beberapa faktor seperti rantau, jenis rangkaian selular, jenis perayauan, dsb. Terdapat beberapa perkara yang boleh anda lakukan untuk mendapatkan sambungan Internet selular yang lebih pantas dan boleh dipercayai. Betulkan 1 – Paksa Mulakan Semula iPhone Kadangkala, paksa memulakan semula peranti anda hanya menetapkan semula banyak perkara, termasuk sambungan selular. Langkah 1 – Hanya tekan kekunci naikkan kelantangan sekali dan lepaskan. Seterusnya, tekan kekunci Turun Kelantangan dan lepaskannya semula. Langkah 2 - Bahagian seterusnya proses adalah untuk menahan butang di sebelah kanan. Biarkan iPhone selesai dimulakan semula. Dayakan data selular dan semak kelajuan rangkaian. Semak semula Betulkan 2 – Tukar mod data Walaupun 5G menawarkan kelajuan rangkaian yang lebih baik, ia berfungsi lebih baik apabila isyarat lemah

Jika pemasangan SQL Server gagal, anda boleh membersihkannya dengan mengikuti langkah berikut: Nyahpasang SQL Server Padam kekunci pendaftaran Padam fail dan folder Mulakan semula komputer
