sqlserver空间数据 + c# 实现查询附近的设备
前言 一个小需求的实现,做一个备忘,个人理解,可能存在错误。 客户有很多设备,这些设备分散在不同的地方,现在需要通过小程序获取附近的(比如1000米)之类的设备列表,以距离排序 第一个想到的的是找百度/腾讯等地图,看有没有提供相应的开放api,先将我们的设备id以及对应的经纬度存储到地图中,再调用某个api,传入我当前坐标经纬度,然后返回附近的设备列表。最后没找到这个接口。应该是有,但是我没找到 第二个想能不能通过c#用啥算法实现,太菜搞不定 最后想到sqlserver有个空间数据的概念,最终勉强实现。 参考: 空间数据 (SQL Server) efcore中使用空间数据 概述 空间对象其实就是点、线、面之类的意思,我们希望对其进行一些操作,如:查询得到两个面之间的交集/差集/并集;以一个点为中心,设置半径得到一个面;查询两个点之间的距离;等等。这些操作如果我们自己用算法来实现想想有点怕。 c#提供了相应的库来表示这些空间对象,也提供了相应的方法来执行针对空间对象的操作 -> NetTopologySuite (从java的JTS移植来的)由于这次小需求只是依赖了数据库对空间数据的支持,所以没有详细研究 NetTopologySuite (资料少) sqlserver2008开始支持空间数据,它也提供了相应的类型来表示空间对象,也提供相应的函数来操作这些对象,当然其它数据也支持