1. 程式人生 > >SQL SERVER 實現計算距離方法

SQL SERVER 實現計算距離方法

SQL2008以上的版本支援:

注意,在計算過程中要處理好資料,如:經緯度不能有NULL會報錯,有0會計算不正確,這類最好過濾,在現實應用中可借用計算列簡化語句

e.g.
use Tempdb
go
--> --> 中國風(Roy)生成測試資料
 
if not object_id(N'Tempdb..#Destn') is null
	drop table #Destn
Go
Create table #Destn([Name] nvarchar(50),[Latitude] FLOAT,[Longitude] FLOAT)
Insert #Destn
select N'廣州',23.1292,113.264 union all
select N'深圳',22.5431,114.058 union all
select N'東莞',23.0205,113.752 union all
select N'佛山',23.0215,113.121 union all
select N'河源',23.7435,114.7 union all
select N'惠州',23.1118,114.416 UNION ALL
select N'珠海',22.2707,113.577
GO
--計算距離珠海的距離
--取珠海座標可用以下兩種方法,使用Point和STGeomFromText時注意(Longitude、Latitude)位置是相反的
DECLARE @geog1 GEOGRAPHY,@geog2 GEOGRAPHY
Select @geog1=geography::Point([Latitude], [Longitude], 4326)
,@geog2=geography::STGeomFromText('POINT('+RTRIM(CAST([Longitude] AS DECIMAL(18,10)))+' '+RTRIM(CAST([Latitude] AS DECIMAL(18,10)))+')', 4326)
 from #Destn WHERE [Name]=N'珠海'
--米換算公里,需除以1000
SELECT *,
       geography::Point([Latitude], [Longitude], 4326).STDistance(@geog1) / 1000 AS [Distance(km)-Point],
	   geography::Point([Latitude], [Longitude], 4326).STDistance(@geog2) / 1000 AS [Distance(km)-STGeomFromText]
FROM #Destn
ORDER BY 4;

/*
Name	Latitude	Longitude	Distance(km)-Point	Distance(km)-STGeomFromText
珠海	22.2707	113.577	0	0
深圳	22.5431	114.058	57.9889965363554	57.9889965363554
東莞	23.0205	113.752	84.9582310757556	84.9582310757556
佛山	23.0215	113.121	95.444281324033	95.444281324033
廣州	23.1292	113.264	100.362215426049	100.362215426049
惠州	23.1118	114.416	126.916238881864	126.916238881864
河源	23.7435	114.7	199.639422259809	199.639422259809  
*/


相關推薦

SQL SERVER 實現計算距離方法

SQL2008以上的版本支援:注意,在計算過程中要處理好資料,如:經緯度不能有NULL會報錯,有0會計算不正確,這類最好過濾,在現實應用中可借用計算列簡化語句e.g.use Tempdb go --&g

SQL Server 實現跨服務器查詢的方式

lol linked server nbsp drop false err dlink pre 幹貨如下: exec sp_addlinkedserver ‘ITSV‘, ‘‘, ‘SQLOLEDB‘, ‘crs.***.com,6598‘ exec sp_addl

SQL Server 實現類似C#中 PadLeft功能

left ret cnblogs alt div use sql eat pan 1 USE [Test] 2 GO 3 SET ANSI_NULLS ON 4 GO 5 SET QUOTED_IDENTIFIER ON 6 GO 7 --@column 表

通過ASP.NET MVC框架 + 原生JavaScript + Ajax + SQL SERVER 實現一個簡單的有論壇功能的網站(有通過iis發布的例子)

簡單的 接下來 發送 思維 學會 control javascrip 數據庫 今天   ASP.NET MVC. M 為Model模型層, V 為View視圖層, C 為Controller控制層。要想使用MVC框架來寫網站就需要了解M V C 的作用分別為哪些。給大家簡單

通過ASP.NET MVC框架 + 原生JavaScript + Ajax + SQL SERVER 實現一個簡單的有論壇功能的網站(有通過iis釋出的例子)

  ASP.NET MVC. M 為Model模型層, V 為View檢視層, C 為Controller控制層。要想使用MVC框架來寫網站就需要了解M V C 的作用分別為哪些。給大家簡單的介紹一下:     1.當你的這個網站要與資料庫互動的時候,你可以使用EF建立一個數據庫模型,也可以用類存放你所需互動

win10中開啟SQL Server配置管理器方法

使用 Windows10 訪問 SQL Server 配置管理器   因為 SQL Server 配置管理器是 Microsoft 管理控制檯程式的一個管理單元而不是單獨的程式,所以,當執行 Windows 10 時,SQL Server 配置管理器不顯示為一個應用程式。 

[原始碼和文件分享]基於C#和SQL SERVER實現的零食銷售管理系統

第一章 零食銷售管理系統調查與規劃 1.1 系統調查 1.1.1 調查方法與步驟 開調查會:分配調查工作,計劃出任務流程 發調查問卷:以調查問卷的形式,在網路上釋出調查問卷,邀請一些商家對零食管理系統的需求進行調查,瞭解對功能的需求都有哪些 訪問:對使用者進行

C#將圖片存放到SQL SERVER資料庫中的方法

本文例項講述了C#將圖片存放到SQL SERVER資料庫中的方法。分享給大家供大家參考。具體如下: 第一步:  //獲取當前選擇的圖片 this.pictureBox1.Image = Image.FromStream(this.openFileDialog1.OpenFil

[原始碼和文件分享]基於ASP.NET和SQL SERVER實現的電信報表系統

1 需求分析 專案總體目標是搭建中國網通的報表系統管理平臺,不僅滿足目前的業務需要,還要滿足公司未來的發展,而且要具備良好的可擴充套件性,在網通與聯通合併之後依然能夠正常工作。 1.3 資料字典 手工錄入資料 = 出賬表 + 卡銷售表 + 網間結算表 + 預存轉入表 + 通知單表

SQL Server遊標語句使用方法

SQL Server遊標語句使用方法 –宣告一個遊標 DECLARE MyCursor CURSOR FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo//定義一個叫MyCursor的遊標,存放for select 後的資料 –開啟

[原始碼和文件分享]基於JSP和SQL SERVER實現的B/S架構的超市管理系統

1.2 技術方案 開發和管理一個基於B/S模式的管理資訊系統需要開發和利用高效率的網路資源,並且應該充分利用高技術含量的技術。本系統開發中使用了Java Server Pages和Java Bean。為了能將Java Server Pages、Java Bean以及Java Servlets三種

C# VS2010結合SQL server 2008資料庫程式設計方法

SQL Server 資料庫在C#程式設計中經常用到,如何實現在具體專案中資料庫和具體應用的結合是我們經常遇到的問題,我們這次主要針對如何使用SQL Server 資料庫展開,下面是具體的操作以及簡單的程式碼實現,希望對大家有幫助 。 環境: Windows 7 旗艦版 x

SQL Server 2000遊標使用方法[轉]

<1>、宣告遊標:declare 遊標名 [SCROLL] cursorfor sql語句[for {read only/update[of 列名1,列名2,...]}] 說明:1、[SCROLL]可以包括以下所有的取數功能first:取第一行記錄last:取最後

Sql Server字串拆分(Split)方法彙總

–方法0:動態SQL法 declare @s varchar(100),@sql varchar(1000) set @s=‘1,2,3,4,5,6,7,8,9,10’ set @sql=‘select col=’’’+ replace(@s,’,’,’’’ u

SQL Server匯出匯入資料方法

   一、匯出匯入SQL Server裡某個資料庫   1.在SQL Server企業管理器裡選中要轉移的資料庫,按滑鼠右鍵,選所有任務->備份資料庫。   2.備份 選資料庫-完全,

SQL Server修改標識列方法(轉)

----允許對系統表進行更新exec sp_configure 'allow updates',1reconfigure with overrideGO ----取消標識列標記update syscolumns set colstat = 0 where id = objec

C# 操作本地SQL Server實現增刪改查

VS2015 連線本地SQL Server  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks

SQL Server 常用函式使用方法

1、SubString():用於擷取指定字串的方法。該方法有三個引數:引數1:用於指定要操作的字串。引數2:用於指定要擷取的字串的起始位置,起始值為 1 。引數3:用於指定要擷取的長度。select substring('abcdef',1,3) -- 返回 abc

android遠端呼叫sql server實現增刪查改,sql server配置+android端程式碼+常見問題

1.sql server環境的搭建: 注意:本例項用的是sql server2008 r2,jtds 1.2.7 2. sql server遠端呼叫的配置 3. android端如何對sql server的呼叫 http://blog.csdn.net/conowen/

完美解除安裝SQL Server 2008 R2 的方法,適合所有問題

 最近遇到了一件煩心事,在安裝SQL Server 2008 R2總是在Analysis Services選項那裡出現錯誤,安裝了一整天也沒好,真的是按了又解除安裝,之後在按,為此我很苦惱,經過百度查詢,終於找到本文,也自己寫了也教程,在這裡提前說明一下,小編電