给定一个经度和长度值,有没有办法找到在指定距离内的所有经度和经度?我有一个数据库表,里面有最长和最长的值,比如说路灯的位置,如果有一对最长的路灯,我怎么才能找到特定距离内的所有路灯呢?
我想从起点画一个圆并找到包含的所有经度和经度将是最好的方法,但是,我没有这样做的技能。我是一个贸易的c#开发人员,但需要在整个地理编码世界的一些指针。
发布于 2011-03-15 22:38:43
您可以使用Haversine公式(请参阅@tdammers )计算表中每个点(经度、经度)与给定点之间的距离。您将不得不遍历整个集合,以便单独计算每个点。
或者,如果您使用的是SQL Server 2008,则会内置地理空间支持。每条记录都会将位置存储为地理类型(如果更容易拆分这些值,可能还会有两个离散的列来保存纬度和经度),然后您可以构造一个简单的SQL查询:
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,否则查询过程将相同。
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();发布于 2011-03-15 22:15:02
haversine formula为您提供两个经纬点之间的距离(以米为单位;转换为英里非常简单)。从那里,你也许可以找到相反的.
发布于 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页。
查克·甘茨
https://stackoverflow.com/questions/5312987
复制相似问题