标签: geo

查询地理位置附近的事物?

我有一个试图在某个地理定位中查找内容的查询,但它带来的结果有点......奇怪.

我以前发过这个帖子,社区帮我找到了我需要的公式:在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)

mysql geolocation geo

7
推荐指数
1
解决办法
9883
查看次数

最好的Javascript地理图表/地图库

什么是最好的JavaScript Geo地图/图表(高质量的解决方案)?

它应该适用于ipad/android平板电脑/ ie8 ++/firefox ......理想情况下还有专业的支持.

谷歌可视化可能是一个低端解决方案(没有缩放/移动,地图上的低细节...)但他们的许可和缺乏支持是一个问题; 请注意,您甚至无法修复错误或复制其库.

Protovis令人印象深刻,但它不再受支持,缺乏IE兼容性(再次缩放/移动).

javascript charts geo ipad

7
推荐指数
1
解决办法
6685
查看次数

用于查找地理点的聚类(在聚类中心的y距离内的最小x个点)的算法

给定一个地理位置数据库(长/纬度),确定/检测集群中心x英里内的位置集群和至少y个位置的最佳方法是什么?

例如,在北卡罗来纳州的1000个McWidgets中,有30个集群,每个集群在其各自集群中心的7英里内包含20个或更多个商店.

自从我在大学应用数学课程以来已经有很长一段时间了......对于一个古老的糊状大脑的任何帮助都将非常感激.

algorithm math statistics geo latitude-longitude

7
推荐指数
2
解决办法
4374
查看次数

由于地理邻近公式(商店定位器)而导致缺少结果

好的 - 我已经和我一起打了大约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)

php mysql wordpress proximity geo

7
推荐指数
1
解决办法
854
查看次数

用于定义地理围栏并查看点是否在其内部/外部的算法

我正在寻找一种算法,我可以创建地理围栏并检查设备是否正在进入/离开围栏.我已经看过多边形算法(光线投射和绕组数),但是有没有算法可以应用于圆形和任何不规则形状?重要的制约因素是时间效率.

谢谢.

algorithm math geo point-in-polygon geofencing

7
推荐指数
1
解决办法
7980
查看次数

java的地理图表

任何人都可以推荐一个Java组件,它可以让您创建一个漂亮的世界地图图像,突出显示某些国家/地区(基于一些统计数据).与此图像类似的东西:

突出显示国家的世界地图

类似于谷歌地理图表(但对于Java):https://developers.google.com/chart/interactive/docs/gallery/geochart 但在服务器端运行,没有互联网连接.理想情况下,我想重视一些国家,这些国家会按比例突出它们.

无论是开源还是商业(只要不是价格荒谬的东西).

java maps graph geo

7
推荐指数
1
解决办法
2418
查看次数

d3美国国家地图与标记,缩放转换问题

我按照这个例子创建了一个美国各州的d3地图:

http://bl.ocks.org/mbostock/4699541

并在此SO问题后添加标记:

将标记放到使用topoJSON和d3.js生成的地图上

问题是在缩放时,地图标记保持不变.我相信我需要将它们转化为新的位置,但不确定如何实现这一目标.

在此输入图像描述

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)

javascript mapping geospatial geo d3.js

7
推荐指数
1
解决办法
3952
查看次数

如何从ElasticSearch中的形状中获取交叉点

我已经将路线存储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)

java geo elasticsearch

7
推荐指数
1
解决办法
753
查看次数

使用空间分析函数和数据类型在MySQL中按距离排序

我正在使用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_SphereST_Distance这似乎是完全用于这一目的.
是否有任何理由(例如,性能,精度)使用这些函数而不是在查询中编写公式?(我不知道这些函数内部使用了哪种算法)

我也不知道应该如何存储每个地方的坐标.大多数的我看到假定坐标的实例将被存储在单独的lat,lon列作为双打或FLOAT(10,6)(如在该示例中由谷歌),但也MySQL的POINT数据类型似乎是适当用于存储地理坐标.
这两种方法的优点和缺点是什么?

如何使用索引来加速这些查询?例如,我读过"空间索引",但我认为它们只能用于限制结果MBRContains(),而不是按距离实际排序结果.

那么,我应该如何存储地点的坐标以及如何查询它们按距离排序?

php mysql geospatial geo laravel-eloquent

7
推荐指数
1
解决办法
797
查看次数

d3.js geo worldmap - 合并俄罗斯(从美国右边的左边小部分向左移位)

我在这里创建了一个简单的d3世界地图:http://bl.ocks.org/wiesson/ef18dba71256d526eb42

将小部分移到右边

是否有一种简单的方法可以将俄罗斯的一小部分(如图所示)向右移动,而无需创建新的topojson?如果没有,还有其他想法吗?

geo d3.js topojson d3.geo

6
推荐指数
1
解决办法
451
查看次数