我有一个试图在某个地理定位中查找内容的查询,但它带来的结果有点......奇怪.
我以前发过这个帖子,社区帮我找到了我需要的公式:在MySQL中查询经度和纬度,但查询现在给出了非常古怪的结果.
我的数据是围绕旧金山市的lat/lng 37.780182 , -122.517349
查询:
SELECT
id,
hike_title,
lat,
lng,
( 3959 * acos( cos( radians(37) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(37.780182) )
+ sin( radians(-122.517349) ) * sin( radians( lat ) )
)
) AS distance
FROM
my_awesome_table
HAVING
distance < 10000
ORDER BY
distance
LIMIT
0 , 50
Run Code Online (Sandbox Code Playgroud)
所以如你所见 - 即使我使半径10000仍然没有找到太多,所以我想知道我的查询是否关闭.它带来的一些结果甚至对于lat/lng都有0,0这是我的方式来表示该记录没有lat/lng.
这是公式应该是这样的:
SELECT
id,
( 3959 * acos( cos( radians(37) )
* cos( radians( lat ) …Run Code Online (Sandbox Code Playgroud) 什么是最好的JavaScript Geo地图/图表(高质量的解决方案)?
它应该适用于ipad/android平板电脑/ ie8 ++/firefox ......理想情况下还有专业的支持.
谷歌可视化可能是一个低端解决方案(没有缩放/移动,地图上的低细节...)但他们的许可和缺乏支持是一个问题; 请注意,您甚至无法修复错误或复制其库.
Protovis令人印象深刻,但它不再受支持,缺乏IE兼容性(再次缩放/移动).
给定一个地理位置数据库(长/纬度),确定/检测集群中心x英里内的位置集群和至少y个位置的最佳方法是什么?
例如,在北卡罗来纳州的1000个McWidgets中,有30个集群,每个集群在其各自集群中心的7英里内包含20个或更多个商店.
自从我在大学应用数学课程以来已经有很长一段时间了......对于一个古老的糊状大脑的任何帮助都将非常感激.
好的 - 我已经和我一起打了大约3个月的摔跤,因为我已经筋疲力尽了我所遇到的每一个地理接近公式,而且我没有接近得到正确的结果我认为是时候了请求一些帮助.
目的
我正在建立一个商店定位器的相当基本的实现.用户输入他们的邮政编码并从预定义的搜索半径列表中进行选择.gmaps API为此地址生成纬度/经度坐标,并将它们传递给php脚本.在此脚本中,将针对mysql数据库表查询用户坐标(下面的结构)
post_id int(11)
post_type varchar(20)
lat float(10,6)
lng float(10,6)
Run Code Online (Sandbox Code Playgroud)
将此查询的结果(post id)输入到wordpress查询中,该查询生成包含地图标记数据的XML.(wordpress查询使用post__in和posts_per_page -1来显示查询生成的所有ID的信息
问题
简而言之,我遇到的Haversine公式的每一个实现似乎都会导致缺少标记 - 特别是任何非常靠近用户输入坐标的标记(不知道确切但我认为它在500米左右).这是一个很大的问题,好像用户输入他们的邮政编码,并且有一个非常接近他们位置的商店,它将不会出现.
我已经尝试了大约8种不同的论坛的排列,我从各种教程中挖出了相同的结果.以下是我目前在网站上使用的公式,该公式提供除了非常接近用户输入位置的标记之外的所有标记:
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];
// Calculate square radius search
$lat1 = (float) $center_lat - ( (int) $radius / 69 );
$lat2 = (float) $center_lat + ( (int) $radius / 69 );
$lng1 = (float) $center_lng - (int) $radius / abs( cos( deg2rad( (float) $center_lat ) ) * 69 );
$lng2 = (float) $center_lng …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种算法,我可以创建地理围栏并检查设备是否正在进入/离开围栏.我已经看过多边形算法(光线投射和绕组数),但是有没有算法可以应用于圆形和任何不规则形状?重要的制约因素是时间效率.
谢谢.
任何人都可以推荐一个Java组件,它可以让您创建一个漂亮的世界地图图像,突出显示某些国家/地区(基于一些统计数据).与此图像类似的东西:

类似于谷歌地理图表(但对于Java):https://developers.google.com/chart/interactive/docs/gallery/geochart 但在服务器端运行,没有互联网连接.理想情况下,我想重视一些国家,这些国家会按比例突出它们.
无论是开源还是商业(只要不是价格荒谬的东西).
我按照这个例子创建了一个美国各州的d3地图:
http://bl.ocks.org/mbostock/4699541
并在此SO问题后添加标记:
问题是在缩放时,地图标记保持不变.我相信我需要将它们转化为新的位置,但不确定如何实现这一目标.
var width = 900,
height = 500,
active = d3.select(null);
var projection = d3.geo.albersUsa()
.scale(1000)
.translate([width / 2, height / 2]);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select(".rebates").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("rect")
.attr("class", "background")
.attr("width", width)
.attr("height", height)
.on("click", reset);
var g = svg.append("g")
.style("stroke-width", "1.5px");
d3.json("/files/d3-geo/us.json", function(error, us) {
if (error) { throw error; }
g.selectAll("path")
.data(topojson.feature(us, us.objects.states).features)
.enter().append("path")
.attr("d", path)
.attr("class", function(item) {
return window.US_STATES[item.id].water_authorities > 0 ? 'avail' : …Run Code Online (Sandbox Code Playgroud) 我已经将路线存储ElasticSearch为多边形.现在我有一个圆(一个点和一个半径),我能够检查圆点与多边形是否相交(下面是我使用的代码).
问题:如何获得与圆相交的路线中的点?
public Boolean isMatchingDoc(Long elasticDocId, Double latitude, Double longitude, Long radius) {
Coordinate origin = new Coordinate(latitude, longitude);
ShapeBuilder circleShapeBuilder = ShapeBuilder.newCircleBuilder().center(origin).radius(radius,
DistanceUnit.METERS);
GeoShapeQueryBuilder geoShapeQueryBuilder = QueryBuilders.geoShapeQuery("route", circleShapeBuilder);
SearchRequestBuilder finalQuery = client.prepareSearch(INDEX).setTypes(TYPE)
.setQuery(QueryBuilders.termQuery("_id", elasticDocId)).setPostFilter(geoShapeQueryBuilder);
SearchResponse searchResponse = finalQuery.execute().actionGet();
SearchHits searchHits = searchResponse.getHits();
if (searchHits.getTotalHits() > 0) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel 5.5构建一个php web应用程序,我需要显示按用户指定位置的距离排序的地点列表(例如商店).这些地方将存储在MySQL数据库中,并应作为Eloquent ORM模型实例进行检索.
做了一些研究我发现了很多关于这个主题的帖子和问题(提出了不同的解决方案),但是,由于对数据库和地理定位/地理空间分析的经验很少,他们大多困惑我,我想知道要采用什么方法和什么是这种情况下的最佳做法.
我读过的大多数答案都建议在SQL查询中使用半字形公式或余弦的球面定律,这看起来像(从这个答案中取得的例子):
$sf = 3.14159 / 180; // scaling factor
$sql = "SELECT * FROM table
WHERE lon BETWEEN '$minLon' AND '$maxLon'
AND lat BETWEEN '$minLat' AND '$maxLat'
ORDER BY ACOS(SIN(lat*$sf)*SIN($lat*$sf) + COS(lat*$sf)*COS($lat*$sf)*COS((lon-$lon)*$sf))";
Run Code Online (Sandbox Code Playgroud)
这篇文章指出,在短距离内,假设地球平坦并计算一个简单的欧氏距离是一个很好的近似,并且比使用半正式公式更快.
由于我一次只需要对一个城市内的地点进行排序,这似乎是一个很好的解决方案.
但是,大多数这些帖子和SO答案都有几年的历史了,我想知道现在(MySQL 5.7)是否有更好的解决方案.
例如,这些都不岗位使用任何的MySQL的"空间分析功能",喜欢ST_Distance_Sphere和ST_Distance这似乎是完全用于这一目的.
是否有任何理由(例如,性能,精度)不使用这些函数而不是在查询中编写公式?(我不知道这些函数内部使用了哪种算法)
我也不知道应该如何存储每个地方的坐标.大多数的我看到假定坐标的实例将被存储在单独的lat,lon列作为双打或FLOAT(10,6)(如在该示例中由谷歌),但也MySQL的POINT数据类型似乎是适当用于存储地理坐标.
这两种方法的优点和缺点是什么?
如何使用索引来加速这些查询?例如,我读过"空间索引",但我认为它们只能用于限制结果MBRContains(),而不是按距离实际排序结果.
那么,我应该如何存储地点的坐标以及如何查询它们按距离排序?
我在这里创建了一个简单的d3世界地图:http://bl.ocks.org/wiesson/ef18dba71256d526eb42
是否有一种简单的方法可以将俄罗斯的一小部分(如图所示)向右移动,而无需创建新的topojson?如果没有,还有其他想法吗?
geo ×10
mysql ×3
algorithm ×2
d3.js ×2
geospatial ×2
java ×2
javascript ×2
math ×2
php ×2
charts ×1
d3.geo ×1
geofencing ×1
geolocation ×1
graph ×1
ipad ×1
mapping ×1
maps ×1
proximity ×1
statistics ×1
topojson ×1
wordpress ×1