首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#查找一英里内的所有纬度和经度

C#查找一英里内的所有纬度和经度
EN

Stack Overflow用户
提问于 2011-03-15 22:10:28
回答 4查看 7.9K关注 0票数 5

给定一个经度和长度值,有没有办法找到在指定距离内的所有经度和经度?我有一个数据库表,里面有最长和最长的值,比如说路灯的位置,如果有一对最长的路灯,我怎么才能找到特定距离内的所有路灯呢?

我想从起点画一个圆并找到包含的所有经度和经度将是最好的方法,但是,我没有这样做的技能。我是一个贸易的c#开发人员,但需要在整个地理编码世界的一些指针。

EN

回答 4

Stack Overflow用户

发布于 2011-03-15 22:38:43

您可以使用Haversine公式(请参阅@tdammers )计算表中每个点(经度、经度)与给定点之间的距离。您将不得不遍历整个集合,以便单独计算每个点。

或者,如果您使用的是SQL Server 2008,则会内置地理空间支持。每条记录都会将位置存储为地理类型(如果更容易拆分这些值,可能还会有两个离散的列来保存纬度和经度),然后您可以构造一个简单的SQL查询:

代码语言:javascript
复制
DECLARE @Point geography = 'POINT(-83.12345 45.12345)' -- Note: Long Lat ordering required when using WKT

SELECT * 
FROM tblStreetLamps
WHERE location.STDistance(@point) < 1 * 1609.344  -- Note: 1 mile converted to meters

另一种类似的可能性是将SQL Spatial类型引入.NET应用程序。可在此处找到可再发行的文件:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=CEB4346F-657F-4D28-83F5-AAE0C5C83D52 (位于Microsoft®System CLR Types for SQL Server®2008 R2下)。

然后,可以通过LINQ进行查询。注意:这使您不必自己实现Haversine,否则查询过程将相同。

代码语言:javascript
复制
var yourLocation = SqlGeography.Point(Latitude, Longitude, 4326);

var query = from fac in FacilityList
            let distance = SqlGeography
                          .Point(fac.Lat, fac.Lon, 4326)
                          .STDistance(yourLocation)
                          .Value
            where distance < 1 * 1609.344
            orderby distance
            select fac;

return query.Distinct().ToList();
票数 3
EN

Stack Overflow用户

发布于 2011-03-15 22:15:02

haversine formula为您提供两个经纬点之间的距离(以米为单位;转换为英里非常简单)。从那里,你也许可以找到相反的.

票数 1
EN

Stack Overflow用户

发布于 2011-12-03 15:18:55

我回答这个问题有点晚了,但几年前我想出了一个技巧,基本上对卫星视场也做了同样的事情。

地球上有两个点,你可以准确地知道离你所在位置给定距离的每个点的纬度和经度。这些点就是北极和南极。所以让我们把你想要的点放在北极。一海里之外是北纬90度减1分钟的经度圆,或90 - 1/60度=北纬89.9833度,因为1分钟的弧度=1海里。

现在您已经有了距离纬度为89.9833的极点一英里的经度轨迹,您基本上可以旋转地球,直到您想要的经度/经度成为极点曾经所在的位置。这个过程被称为“地图经纬度的旋转”。一旦你想了一段时间的方程式,这个问题的数学就很简单。我把它们埋在某个地方,所以我不能很容易地找到代码,然而,这个方程的过程在John Snyder的书“Map Projections: A Working Manual”中有介绍。你可以在http://pubs.usgs.gov/pp/1395/report.pdf上免费获得pdf。解释在第29 - 32页。

查克·甘茨

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5312987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档