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)可以判断点是否在多边形内。
效果图(中心的红标注为多边形的重心)

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Les étapes d'importation sont les suivantes : Copiez le fichier MDF dans le répertoire de données de SQL Server (généralement C:\Program Files\Microsoft SQL Server\MSSQL\DATA). Dans SQL Server Management Studio (SSMS), ouvrez la base de données et sélectionnez Attacher. Cliquez sur le bouton Ajouter et sélectionnez le fichier MDF. Confirmez le nom de la base de données et cliquez sur le bouton OK.

Pour les objets du même nom qui existent déjà dans la base de données SQL Server, les étapes suivantes doivent être suivies : Confirmez le type d'objet (table, vue, procédure stockée). IF NOT EXISTS peut être utilisé pour ignorer la création si l'objet est vide. Si l'objet contient des données, utilisez un nom différent ou modifiez la structure. Utilisez DROP pour supprimer des objets existants (soyez prudent, sauvegarde recommandée). Vérifiez les modifications de schéma pour vous assurer qu'il n'y a aucune référence à des objets supprimés ou renommés.

Pour afficher le numéro de port SQL Server : Ouvrez SSMS et connectez-vous au serveur. Recherchez le nom du serveur dans l'Explorateur d'objets, cliquez dessus avec le bouton droit et sélectionnez Propriétés. Dans l'onglet Connexion, affichez le champ Port TCP.

Lorsque le service SQL Server ne parvient pas à démarrer, voici quelques étapes à résoudre : Consultez le journal des erreurs pour déterminer la cause première. Assurez-vous que le compte de service est autorisé à démarrer le service. Vérifiez si les services de dépendance sont en cours d'exécution. Désactivez le logiciel antivirus. Réparez l'installation de SQL Server. Si la réparation ne fonctionne pas, réinstallez SQL Server.

Si vous supprimez accidentellement une base de données SQL Server, vous pouvez suivre les étapes suivantes pour la récupérer : arrêter l'activité de la base de données ; sauvegarder les fichiers journaux ; vérifier les options de récupération : restaurer à partir d'une sauvegarde ; utiliser DBCC CHECKDB ; outils de fête. Veuillez sauvegarder régulièrement votre base de données et activer la journalisation des transactions pour éviter toute perte de données.

Les fichiers de base de données SQL Server sont généralement stockés à l'emplacement par défaut suivant : Windows : C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux : /var/opt/mssql/data L'emplacement du fichier de base de données peut être personnalisé en modifiant le chemin du fichier de base de données. paramètre.

Vous êtes confronté à un décalage et à une connexion de données mobile lente sur iPhone ? En règle générale, la puissance de l'Internet cellulaire sur votre téléphone dépend de plusieurs facteurs tels que la région, le type de réseau cellulaire, le type d'itinérance, etc. Vous pouvez prendre certaines mesures pour obtenir une connexion Internet cellulaire plus rapide et plus fiable. Correctif 1 – Forcer le redémarrage de l'iPhone Parfois, le redémarrage forcé de votre appareil réinitialise simplement beaucoup de choses, y compris la connexion cellulaire. Étape 1 – Appuyez simplement une fois sur la touche d’augmentation du volume et relâchez-la. Ensuite, appuyez sur la touche de réduction du volume et relâchez-la à nouveau. Étape 2 – La partie suivante du processus consiste à maintenir le bouton sur le côté droit. Laissez l'iPhone finir de redémarrer. Activez les données cellulaires et vérifiez la vitesse du réseau. Vérifiez à nouveau Correctif 2 – Changer le mode de données Bien que la 5G offre de meilleures vitesses de réseau, elle fonctionne mieux lorsque le signal est plus faible

Si l'installation de SQL Server échoue, vous pouvez la nettoyer en suivant ces étapes : Désinstaller SQL Server Supprimer les clés de registre Supprimer les fichiers et dossiers Redémarrer l'ordinateur
