如何计算两个GPS坐标之间的距离(使用纬度和经度)?
我尝试实现这个公式:http ://andrew.hedges.name/experiments/haversine/ aplet对我测试的两个点有好处:
但我的代码不起作用.
from math import sin, cos, sqrt, atan2
R = 6373.0
lat1 = 52.2296756
lon1 = 21.0122287
lat2 = 52.406374
lon2 = 16.9251681
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))**2 + cos(lat1) * cos(lat2) * (sin(dlon/2))**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
distance = R * c
print "Result", distance
print "Should be", 278.546
Run Code Online (Sandbox Code Playgroud)
它返回的距离是5447.05546147.为什么?
如果您需要根据用户的IP地址找到用户,可以使用哪些服务(免费而非免费服务)?
PS我明白一些用户使用代理等,这意味着结果不是100%准确.没关系.
我正在使用geography.STDistance()来返回两个单点位置之间的距离.我很好奇哪个测量用于返回值?是KM,里程还是其他?
我得到的结果高达250k,但我不知道我的TSQL是否做错了,因为这些是历史位置(即它们不再存在)所以我不能只是快速查找.
declare @p1 geography
declare @p2 geography
SELECT @p1 = Location from tblLocations where Id = 1
SELECT @p2 = Location from tblLocations where Id = 2
select @p1.STDistance(@p2)
Run Code Online (Sandbox Code Playgroud) 我正在构建一个Web应用程序,它将根据按钮和单击事件在Google Map上动态突出显示某些美国州和加拿大省份.
计划A)多边形
我的主要想法是绘制多边形.为此我需要所有州和省轮廓的坐标列表(纬度+经度)(顺时针或逆时针).在政府网站上,我发现了各种不同的格式(即E00),但我无法将这些格式转换为简单的坐标列表,我可以用它来在地图上创建标记或多边形.你有什么提示可以获得这些坐标吗?
计划B)叠加
AFAIK,如果你在谷歌地图上使用叠加,当你进一步放大时它们会变得像素化(或者你可以叠加SVG吗?)在我的情况下,在最坏的情况下(所有州和所有省份)我需要50 + 11叠加.谷歌地图仍然可以实现这一点,还是会变得非常缓慢?
我有点吃惊的是,没有一种直接的方式来突出显示州或省,因为我认为这对于使用地图API的人来说是一项非常常见的任务.
提前致谢
有没有人知道在Java中将地球表面位置从lat,lon转换为UTM(比如WGS84)?我目前正在研究Geotools,但遗憾的是解决方案并不明显.
假设我有一组任意的纬度和经度对代表一些简单的闭合曲线上的点.在笛卡尔空间中,我可以使用格林定理轻松计算出这条曲线所包围的区域.计算球体表面区域的类似方法是什么?我想我所追求的是Matlab areaint
函数背后的算法(甚至是一些近似).
我试图使用Nhibernate与Sql 2008地理类型,并有困难.我正在使用Fluent Nhibernate配置我相当新的,所以这也可能是问题.
首先,我试图坚持的类看起来像:
public class LocationLog : FluentNHibernate.Data.Entity
{
public virtual new int Id {get;set;}
public virtual DateTime TimeStamp {get;set;}
public virtual GisSharpBlog.NetTopologySuite.Geometries.Point Location {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
映射类如下所示:
public class LocationLogMap : ClassMap<LocationLog>
{
ImportType<GisSharpBlog.NetTopologySuite.Geometries.Point>();
Id(x => x.Id);
Map(x => x.TimeStamp).Generated.Insert();
Map(x => x.Location);
}
Run Code Online (Sandbox Code Playgroud)
为了将MsSql2008GeographyDialect与Fluent Nhibernate一起使用,我创建了自己的配置类:
public class Sql2008Configuration
: PersistenceConfiguration<Sql2008Configuration, MsSqlConnectionStringBuilder>
{
public Sql2008Configuration()
{
Driver<SqlClientDriver>();
}
public static Sql2008Configuration MsSql2008
{
get { return new Sql2008Configuration().Dialect<MsSql2008GeographyDialect>(); }
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有配置代码,如:
var configuration = Fluently.Configure()
.Database(Sql2008Configuration.MsSql2008.ConnectionString(c => c.Is(connectionString))) …
Run Code Online (Sandbox Code Playgroud) 我有一套纬度和经度的位置.
有没有办法用Basemap绘制大陆的边界(或者没有底图,如果有其他方式),没有那些令人讨厌的河流出现?尤其是那条甚至没有到达海洋的孔戈河,令人不安.
编辑:我打算在地图上进一步绘制数据,比如在地图库中(并且仍然将大陆的边界线绘制为数据上的黑线,以提供世界地图的结构),所以虽然下面的Hooked解决方案很好,甚至是熟练的,它不适用于此目的.
图片制作者:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8, 4.5))
plt.subplots_adjust(left=0.02, right=0.98, top=0.98, bottom=0.00)
m = Basemap(projection='robin',lon_0=0,resolution='c')
m.fillcontinents(color='gray',lake_color='white')
m.drawcoastlines()
plt.savefig('world.png',dpi=75)
Run Code Online (Sandbox Code Playgroud) geography ×10
math ×3
geolocation ×2
geometry ×2
gis ×2
python ×2
algorithm ×1
c# ×1
coordinates ×1
geo ×1
geocoding ×1
geotools ×1
google-maps ×1
ip-address ×1
java ×1
location ×1
maps ×1
matplotlib ×1
nhibernate ×1
sql ×1