我试图计算地图上两个位置之间的距离.我存储了我的数据:经度,纬度,X POS,Y POS.
我以前使用过下面的代码片段.
DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
3956 * 2 * ASIN(
SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2)
+ COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)
* POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) ))
AS distance
--INTO #includeDistances
FROM #orig dest
Run Code Online (Sandbox Code Playgroud)
不过我不相信这个数据,它似乎给出了稍微不准确的结果.
一些示例数据,以备您需要时使用
Latitude Longitude Distance
53.429108 -2.500953 85.2981833133896
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决我的代码,我不介意你是否想要修复我已经拥有的东西,如果你有一种新方法可以实现这一点,那就太棒了.
请说明您的结果所在的计量单位.
我需要找到一个select语句,它将返回一个与我的输入完全匹配的记录,或者如果找不到完全匹配则返回最接近的匹配.
到目前为止,这是我的选择声明.
SELECT * FROM [myTable]
WHERE Name = 'Test' AND Size = 2 AND PType = 'p'
ORDER BY Area DESC
Run Code Online (Sandbox Code Playgroud)
我需要做的是找到与'Area'字段最接近的匹配,所以如果我的输入是1.125并且数据库包含2,1.5,1和.5,则查询将返回包含1的记录.
我的SQL技能非常有限,所以任何帮助都会受到赞赏.
理想情况下,我正在寻找一个Laravel 5相关答案.我正在尝试制作商店定位器应用程序.我正在尝试将一对纬度/经度坐标(根据用户进入搜索框的地址计算)与我的数据库中最近的(在半径100km范围内)坐标/现有商店相匹配.
用户输入一个地址(使用地理编码)转换为lat和lng坐标.这些内容会发送到我的"文章"页面,其中包含商店列表和谷歌地图.我使用了一个关于范围搜索的简单教程,根据文本"地址"显示我的文章/商店.但这显然不适用于两个坐标.我有一个名为文章的表,其中包括:id,地址,lat,lng,网站,标题等.
当前文章模型:
public function scopeSearch($query, $search){
return $query->where('address', 'LIKE', "%$search%" );
}
Run Code Online (Sandbox Code Playgroud)
文章控制器
public function index(Request $request)
{
$query = $request->get('q');
$articles = $query
? Article::search($query)->get()
: Article::all();
return view('articles.index', compact('categories'))->withArticles($articles);
}
Run Code Online (Sandbox Code Playgroud)
当前表单/地理编码:
{!! Form::open(['method' => 'GET', 'id' => 'searchForm', 'name' => 'searchForm', 'route' => 'articles_path']) !!}
{!! Form::input('search', 'q', null, ['placeholder' => 'LOCATION', 'class' => 'locationSearch', 'id' => 'searchInput'])!!}
{!! Form::hidden('lat', null, ['id' => 'lat'])!!}
{!! Form::hidden('lng', null, ['id' => 'lng'])!!}
{!! …Run Code Online (Sandbox Code Playgroud) 所以我有一个表中有一堆不同的地址.我需要一个proc,它将选择该表中与传入的lat/long值相距指定距离的地址.
我的表的例子如下:
- messageId
- lat (float)
- long (float)
Run Code Online (Sandbox Code Playgroud)
Proc正在传入另一个纬度/长度对(同时float也是一对)以及一个int(英里)
我发现这个http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=81360来计算实际公式,但我无法弄清楚在proc表单中修改它以便能够通过整个列表地址,只给我一个Id<=里程(我传入的)的地址,来自我传入的纬度/经度.
我可以在这里得到任何帮助吗?
谢谢!