您的位置:首页 > 数据库

利用Sql Server实现电子地图围栏

2015-02-06 10:37 232 查看

一、多边形

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐