天天看點

利用Sql Server實作電子地圖圍欄一、多邊形二、圓形三、行政區域邊界坐标本人遇到的案例是行政區域的多邊形圍欄,中國行政區域邊界坐标擷取---http://download.csdn.net/detail/dyc107/8428165四、參考

一、多邊形

1、Sql Server 2008及以上版本有 geography類型,用來存儲geography的各個坐标點。(注意各個坐标點必須以逆時針的順序存儲)

2、插入geography類型資料----- insert into TableName(A,B,C,D,Polygon) values(A,B,C,D,geography::STGeomFromText('POLYGON((經度 緯度;經度 緯度;.......   ))', 4326))

3、判斷點是否在多邊形内部

DECLARE @Point geography;

DECLARE @isIn INT;

SET @Point = geography::Point(@Latitude, @Longitude, 4326);

SELECT @isIn =  @PolygonFencePolygon.STIntersects(@Point);

結果: @isIn=1 多邊形内 ;@isIn=0 多邊形外

二、圓形

1、通過Function判斷所在坐标點與圓心的距離,并與半徑對比

2、方法:CREATE FUNCTION [dbo].[GetDistance]

@LatA FLOAT,

@LatB FLOAT,

@LonA FLOAT,

@LonB FLOAT

RETURNS FLOAT

AS

BEGIN

DECLARE @R FLOAT,

@C FLOAT

SET @R = 6371004 --地球半徑(米)

SET @C = Sin(DBO.Rad(@LatA)) * Sin(DBO.Rad(@LatB)) + Cos(DBO.Rad(@LatA)) * Cos(DBO.Rad(@LatB)) * Cos(DBO.Rad(@LonA - @LonB))

RETURN (@R * Acos(@C));  

3、結果判斷:DBO.GetDistance(@FenceLatitude,@Latitude,@FenceLongitude,@Longitude) < @Radius--入圍欄

三、行政區域邊界坐标

本人遇到的案例是行政區域的多邊形圍欄,中國行政區域邊界坐标擷取---http://download.csdn.net/detail/dyc107/8428165

四、參考

https://msdn.microsoft.com/zh-cn/library/bb933968.aspx

http://tech.it168.com/a2008/0923/206/000000206157_2.shtml

繼續閱讀