例如,如果我们有这些坐标集
"latitude": 48.858844300000001,
"longitude": 2.2943506,
Run Code Online (Sandbox Code Playgroud)
我们怎样才能找到这个城市/国家?
给定一组纬度和经度点,如何计算该集合中心点的纬度和经度(也就是将所有点的视图居中的点)?
编辑:我用过的Python解决方案:
Convert lat/lon (must be in radians) to Cartesian coordinates for each location.
X = cos(lat) * cos(lon)
Y = cos(lat) * sin(lon)
Z = sin(lat)
Compute average x, y and z coordinates.
x = (x1 + x2 + ... + xn) / n
y = (y1 + y2 + ... + yn) / n
z = (z1 + z2 + ... + zn) / n
Convert average x, y, z coordinate to latitude and longitude.
Lon = atan2(y, …Run Code Online (Sandbox Code Playgroud) 我尝试实现这个公式: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.为什么?
如果我有标准NMEA格式的纬度或经度读数有一个简单的方法/公式将该读数转换为米,然后我可以用Java(J9)实现?
编辑:好吧似乎我想做的事情不容易,但我真正想做的是:
假设我有一个lat和一个长途的点和一个lat和很长的用户有一个简单的方法来比较它们来决定何时告诉用户他们在一个合理的距离点的方式点?我觉得合理是主题,但是这很容易做到还是仍然过于数学?
我目前在为下面的文档创建架构时遇到问题.来自服务器的响应始终将"trk"字段值返回为[Object].不知怎的,我不知道这应该如何运作,因为我至少尝试过对我有意义的所有方法;-)
如果这有帮助,我的Mongoose版本是3.6.20和MongoDB 2.4.7在我忘记之前,将它设置为Index(2d)会很不错
原始数据:
{
"_id": ObjectId("51ec4ac3eb7f7c701b000000"),
"gpx": {
"metadata": {
"desc": "Nürburgring VLN-Variante",
"country": "de",
"isActive": true
},
"trk": [
{
"lat": 50.3299594,
"lng": 6.9393006
},
{
"lat": 50.3295046,
"lng": 6.9390688
},
{
"lat": 50.3293714,
"lng": 6.9389939
},
{
"lat": 50.3293284,
"lng": 6.9389634
}]
}
}
Run Code Online (Sandbox Code Playgroud)
猫鼬模式:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
Run Code Online (Sandbox Code Playgroud)
Chrome中"网络"标签的响应总是如此(这只是错误的trk部分):
{ trk:
[ [Object],
[Object], …Run Code Online (Sandbox Code Playgroud) 我需要在我的应用程序中实现地理邻近搜索,但我对使用正确的公式感到困惑.在Web和StackOverflow中进行一些搜索之后,我发现解决方案是:
选项#3真的不适合我ATM.现在我有点困惑,因为我总是认为大圆距离公式和Haversine公式是同义词,但显然我错了?
Haversine Formula http://i46.tinypic.com/30shbn6.png
以上屏幕截图取自使用MySQL论文的精彩Geo(邻近)搜索,并使用以下功能:
ASIN, SQRT, POWER, SIN, PI, COS
Run Code Online (Sandbox Code Playgroud)
我也看到了相同公式(余弦球面定律)的变化,如下所示:
(3956 * ACOS(COS(RADIANS(o_lat)) * COS(RADIANS(d_lat)) * COS(RADIANS(d_lon) - RADIANS(o_lon)) + SIN(RADIANS(o_lat)) * SIN(RADIANS(d_lat))))
Run Code Online (Sandbox Code Playgroud)
它使用以下功能:
ACOS, COS, RADIANS, SIN
Run Code Online (Sandbox Code Playgroud)
我不是数学专家,但这些公式是一样的吗?我遇到了一些更多的变化,以及公式(例如Cosines的球面定律和Vincenty的 公式 - 这似乎是最准确的),这让我更加困惑......
我需要选择一个好的通用公式来实现PHP/MySQL.谁能解释我上面提到的公式之间的差异?
感谢您对这些问题的见解.
基于理论上的答案,我测试了以下大圆距离公式:
该Vincenty公式是死的慢,但是它是相当准确的(下降到0.5mm) . …
我希望能够在调用a后将填充添加到地图视图中map.fitBounds(),因此无论地图控件还是打开时覆盖标记的滑动面板之类的东西都可以看到所有标记.Leaftlet可以选择为fitBounds添加填充,但Google Maps没有.
有时,最北端的标记部分隐藏在视口上方.最西侧的标记通常位于缩放滑块下方.使用API 2,可以通过减少地图视口中的给定填充来形成虚拟视口,然后调用该方法showBounds()来计算并基于该虚拟视口执行缩放和居中:
map.showBounds(bounds, {top:30,right:10,left:50});
Run Code Online (Sandbox Code Playgroud)
本作API 2所述的工作实施例中,可以发现这里的showBounds()的例子链接下.
我在API V3中找不到类似的功能,但希望还有另一种方法可以实现.也许我可以抓住东北和西南点,然后添加假坐标以在包括它们之后进一步扩展边界?
(Codepen以防下面的代码不起作用)
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
draggable: true,
streetViewControl: false,
zoomControl: false
});
var marker1 = new google.maps.Marker({
position: {lat: 37, lng: -121},
map: map,
});
var marker2 = new google.maps.Marker({
position: {lat: 39.3, lng: -122},
map: map,
});
var bounds = new google.maps.LatLngBounds();
bounds.extend(marker1.position);
bounds.extend(marker2.position);
map.fitBounds(bounds);
}Run Code Online (Sandbox Code Playgroud)
#map {
height: 640px;
width: 360px;
} …Run Code Online (Sandbox Code Playgroud)所以我正在尝试一下D3's geo stream API,事情感觉有点模糊.我一直在阅读这里的文档:
https://github.com/mbostock/d3/wiki/Geo-Streams
我遇到的一个困惑是流转换的正确实现.假设我创建了一个:
//a stream transform that applies a simple translate [20,5]:
var transform = d3.geo.transform({
point:function(){this.stream.point(x+20,y+5)}
})
Run Code Online (Sandbox Code Playgroud)
根据文档,this.stream引用"包装流".但是什么是流,真的吗?从我可以收集到的,它更多的是一个过程而不是显式数据结构 - 一系列数据和函数调用来转换数据.上面的语法似乎表明包装流只是包含" 流监听器 " 的对象
继续,我可以使用投影方法应用流变换:
//a path generator with the transform applied using the projection() method
var path = d3.geo.path().projection(transform);
Run Code Online (Sandbox Code Playgroud)
虽然我不太了解底层的机制,但效果似乎相对简单:路径生成器的底层转换函数使用转换后的x,y参数调用.
对于我的用例,我发现这没有用,特别是因为我的输入数据尚未投影.我想首先使用投影来转换数据,然后转换那些输出的坐标.为此,是否存在分层变换的一般模式?
我看到它D3确实提供了projection.stream(listener)模式,它在应用监听器之前首先应用了投影变换,但我不确定如何实现它.听众的论点应该是什么?这是一个例子:http://jsfiddle.net/kv7yn8rw/2/.
任何指导将不胜感激!
我有一些作者与他们所在的城市或国家.我想知道是否可以在地图上绘制具有国家坐标的共同作者网络(图1).请考虑来自同一国家的多位作者.[编辑:可以在示例中生成多个网络,并且不应显示可避免的重叠].这适用于数十位作者.需要缩放选项.Bounty承诺+50为未来的工作答案.
refs5 <- read.table(text="
row bibtype year volume number pages title journal author
Bennett_1995 article 1995 76 <NA> 113--176 angiosperms. \"Annals of Botany\" \"Bennett Md, Leitch Ij\"
Bennett_1997 article 1997 80 2 169--196 estimates. \"Annals of Botany\" \"Bennett MD, Leitch IJ\"
Bennett_1998 article 1998 82 SUPPL.A 121--134 weeds. \"Annals of Botany\" \"Bennett MD, Leitch IJ, Hanson L\"
Bennett_2000 article 2000 82 SUPPL.A 121--134 weeds. \"Annals of Botany\" \"Bennett MD, Someone IJ\"
Leitch_2001 article 2001 83 SUPPL.A 121--134 weeds. \"Annals of …Run Code Online (Sandbox Code Playgroud) 在询问特定的代码示例之前,我只想询问是否可以进行类似这样的伪代码的查询:
从表格中选择项目,其中lat/lon = - 在某个纬度/经度点的x英里 -
那可行吗?或者我是否必须跳过一些箍?任何可以推荐的好方法都会很棒!
geo ×10
geolocation ×3
geospatial ×3
math ×3
geocoding ×2
mysql ×2
coordinates ×1
d3.geo ×1
d3.js ×1
geography ×1
ggplot2 ×1
google-maps ×1
mongodb ×1
mongoose ×1
node.js ×1
padding ×1
php ×1
python ×1
r ×1
schema ×1