标签: geospatial

给定纬度/经度坐标,我们如何找出城市/国家?

例如,如果我们有这些坐标集

"latitude": 48.858844300000001,
"longitude": 2.2943506,
Run Code Online (Sandbox Code Playgroud)

我们怎样才能找到这个城市/国家?

geocoding geolocation geospatial geo

134
推荐指数
8
解决办法
19万
查看次数

从经度\纬度转换为笛卡尔坐标

我有一些以地球为中心的坐标点,以纬度和经度(WGS-84)给出.

如何将它们转换为笛卡尔坐标(x,y,z),原点位于地球的中心?

mapping geometry geospatial

95
推荐指数
6
解决办法
24万
查看次数

Criteria SpatialRestrictions.IsWithinDistance NHibernate.Spatial

有没有人实现过这个,或者知道是否难以实现这个/有任何指针?

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
{
    // TODO: Implement
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

来自NHibernate.Spatial.Criterion.SpatialRestrictions

我可以在hql中使用"NHSP.Distance(PROPERTY,:point)".但是想要将此查询与我现有的Criteria查询相结合.

目前我正在创建一个粗糙的多边形,并使用

criteria.Add(SpatialRestrictions.Intersects("PROPERTY", myPolygon));
Run Code Online (Sandbox Code Playgroud)

编辑 通过在SpatialRelationCriterion上重载构造函数来获得原型,添加新的SpatialRelation.Distance

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
        {
            return new SpatialRelationCriterion(propertyName, SpatialRelation.Distance, anotherGeometry, distance);
        }
Run Code Online (Sandbox Code Playgroud)

为SpatialRelationCriterion添加了一个新字段

private readonly double? distance;

public SpatialRelationCriterion(string propertyName, SpatialRelation relation, object anotherGeometry, double distance)
            : this(propertyName, relation, anotherGeometry)
        {
            this.distance = distance;
        }
Run Code Online (Sandbox Code Playgroud)

编辑ToSqlString

object secondGeometry = Parameter.Placeholder;
                if (!(this.anotherGeometry is IGeometry))
                {
                    secondGeometry = columns2[i];
                }

                if …
Run Code Online (Sandbox Code Playgroud)

.net nhibernate spatial geospatial criteria-api

95
推荐指数
0
解决办法
2903
查看次数

用于计算地理邻近度的公式

我需要在我的应用程序中实现地理邻近搜索,但我对使用正确的公式感到困惑.在Web和StackOverflow中进行一些搜索之后,我发现解决方案是:

  1. 使用Haversine公式
  2. 使用大圆距离公式
  3. 在数据库中使用空间搜索引擎

选项#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.谁能解释我上面提到的公式之间的差异?

  • 哪一个是最快的计算?
  • 哪一个提供最准确的结果?
  • 在结果的速度/准确性方面哪一个最好?

感谢您对这些问题的见解.


基于理论上的答案,我测试了以下大圆距离公式:

  • 文森特公式
  • Haversine Formula
  • 余弦球面定律

Vincenty公式是死的慢,但是它是相当准确的(下降到0.5mm) . …

php mysql math geospatial geo

67
推荐指数
2
解决办法
2万
查看次数

用R开发地理专题地图

R中有很多包用于各种空间分析.这可以在CRAN任务视图中看到:空间数据分析.这些软件包数量众多且各种各样,但我想做的只是一些简单的专题图.我有县和州FIPS代码的数据,我有县和州边界的ESRI形状文件和随附的FIPS代码,允许加入数据.如果需要,形状文件可以很容易地转换为其他格式.

那么用R创建专题地图最直接的方法是什么?

这张地图看起来像是用ESRI Arc产品创建的,但这是我想用R做的事情:

alt text http://www.infousagov.com/images/choro.jpg 从这里复制的地图.

r map geolocation geospatial

59
推荐指数
3
解决办法
3万
查看次数

对于纬度/经度,Java double vs BigDecimal

当存储通常格式为44.087585(即在点之前最多2个数字和6dp)的纬度/经度时,我是否需要打扰bigdecimals?

java double geospatial bigdecimal latitude-longitude

57
推荐指数
5
解决办法
3万
查看次数

使用R计算两点(纬度,长度)之间的地理空间距离的函数

我有long,lat格式的地理编码点,我想用R计算它们之间的距离.这看起来非常简单,但我找不到一个能够轻松完成的功能.我一直试图用gdistance包来做,但它似乎非常复杂并且面向图形,我只需要一个数字.这样的东西distanceBetween(pointA,pointB)会返回一个数字.

更新:这个问题特定于R,可能的dup更一般.虽然有一个R特定的答案,但它被埋没在其他28个答案中.

packages r distance geospatial latitude-longitude

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

如何将数据框转换为空间坐标

我一直在研究具有lat long值的地震数据,我想将这些lat long值转换为空间坐标.

假设我有以下数据集df:

longitude          latitude
        128.6979    -7.4197
        153.0046    -4.7089
        104.3261    -6.7541
        124.9019    4.7817
        126.7328    2.1643
        153.2439    -5.6500
        142.8673    23.3882
        152.6890    -5.5710
Run Code Online (Sandbox Code Playgroud)

我想将它转换为空间点.像这样的东西:

 lon        lat  
[1,] 2579408.24 1079721.15
[2,] 2579333.69 1079729.18
[3,] 2579263.65 1079770.55
[4,] 2579928.04 1080028.46
[5,] 2579763.65 1079868.92
[6,] 2579698.00 1079767.97
Run Code Online (Sandbox Code Playgroud)

我使用了以下代码:

library(sp)
df.sp<-df
coordinates(df.sp)<-~x+y
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Error in `[.data.frame`(object, , -coord.numbers, drop = FALSE) : 
  undefined columns selected
Run Code Online (Sandbox Code Playgroud)

gis r geospatial

40
推荐指数
3
解决办法
5万
查看次数

是否有openstreetmap的API?

我想知道是否有任何API我可以通过查询OSM数据,例如; 是(lon_1,lat_1)在陆地还是在海上?或者是否可以将岛屿定义为定义明确的多边形?到目前为止,我见过的唯一用法就是渲染OSM数据(生成切片)的工具.

api geospatial openstreetmap

39
推荐指数
4
解决办法
6万
查看次数

MongoDB'无法找到$ geoNear查询的索引'

我只是想让一个简单的near查询工作.这是我的文档样本.

{"point": 
  {"type": "Point", 
     "coordinates": [30.443902444762696, -84.27326978424058]}, 
   "created_on": {"$date": 1398016710168}, 
   "radius": 180, 
   "user": {"$oid": "53543188eebc5c0cc416b77c"}, 
   "_id": {"$oid": "53544306eebc5c0ecac6cfba"}, 
   "expires_on": {"$date": 1399831110168}
}
Run Code Online (Sandbox Code Playgroud)

和mongod我尝试了命令:

db.bar.find({point: {$near: [-84.26060492426588, 30.45023887165371]}});
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

错误:{"$ err":"无法执行查询:错误处理查询:ns = foo.bar skip = 0 \nTree:GEONEAR field = point maxdist = 1.79769e + 308 isNearSphere = 0 || First:notFirst:full path :point \nSort:{} \nProj:{} \n planner返回错误:无法找到$ geoNear查询的索引","代码":17007}

也许我的谷歌今天不是那么尖锐,但我找不到任何东西.另外,我运行了ensure index命令.我的意图是这些是地图位置.

db.bar.ensureIndex({a:1});
db.bar.ensureIndex({geo:"2d"});
Run Code Online (Sandbox Code Playgroud)

geospatial mongodb mongodb-query

38
推荐指数
3
解决办法
4万
查看次数