达梦空间数据类型学习(五)

--圆几何构造函数 ST_CreateCircle(geom ,n)
geom:为闭合的Polygon,里面必须有个重复的点
n:指定生成圆(椭圆)的坐标个数,不能小于4
drop table if exists dmt;
create table dmt(gemo ST_Geometry);
insert into dmt (gemo) select dmgeo2.ST_CreateCircle(dmgeo2.ST_GeomFromText('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))'),6) from dual;
insert into dmt (gemo) select dmgeo2.ST_CreateCircle(dmgeo2.ST_GeomFromText('polygon ((10 0, 0 10, 10 10, 10 0))'),4) from dual;
insert into dmt (gemo) select dmgeo2.ST_CreateCircle(dmgeo2.ST_GeomFromText('polygon ((0 0, 0 10, 10 10,11 11,10 10, 0 0))'),4) from dual;
--弧线几何构造函数 ST_CreateArc(geom ,n ,startang ,angextext)
startang 表示截取圆弧、椭圆弧线的起始角度
angextent:表示弧线的跨度(由此可得到结束角度),它的取值范围为 0~2*Π,不在此范围内的取值一律视为 2*Π。
返回值:LineString 几何对象。
insert into dmt (gemo) select dmgeo2.ST_CreateArc(dmgeo2.ST_GeomFromText('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))'),6,45,90)
-- 扇形几何构造函数 ST_CreateArcPolygon(geom ,n ,startang,angextext )
返回值:Polygon 几何对象。
insert into dmt (gemo) select dmgeo2.ST_CreateArcPolygon(dmgeo2.ST_GeomFromText('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))'),6,45,90)
圆环几何构造函数ST_CreateAnnulus (geom1,geom2,n)
geom1:构建外圆的几何对象。
geom2:构建内圆的几何对象。
n:指定生成圆环的坐标个数
insert into dmt (gemo) select dmgeo2.ST_CreateAnnulus(dmgeo2.ST_GeomFromText('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))'),dmgeo2.ST_GeomFromText('polygon ((10 0, 0 10, 10 10, 10 0))'),6) from dual;
扇环几何构造函数ST_CreateAnnularSector(geom1,geom2,n,startang,angextent)
insert into dmt (gemo) select dmgeo2.ST_CreateAnnularSector(dmgeo2.ST_GeomFromText('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))'),dmgeo2.ST_GeomFromText('polygon ((10 0, 0 10, 10 10, 10 0))'),6,20,80) from dual;
ST_Geography  --地理数据类型,
ST_ELLIPSE_POLYGON构造函数 (center_lon DOUBLE, center_lat DOUBLE, semi_major_axis DOUBLE, semi_minor_axis DOUBLE azimuth DOUBLE arc_tolerance DOUBLE)用于返回在 WGS84 大地坐标系中近似于指定椭圆并由其覆盖的多边形几何图形,返回值为地理数据类型对象

center_lon:用于创建几何对象圆的中心经度,单位为度。
cen_lat:用于创建几何对象圆的中心纬度,单位为度。
semi_major_axis:用于创建几何对象的椭圆的半长轴的长度,单位为米。
semi_minor_axis:用于创建几何对象的椭圆的半短轴的长度,单位为米。
azimuth:用于创建几何对象的椭圆的方位角。
arc_tolerance: 用于创建多边形几何对象的数值,与公差参数值关联

drop table if exists dmt;
create table dmt(gemo ST_Geography);
insert into dmt (gemo) select dmgeo2.ST_Ellipse_Polygon(114,22,6378136.49,6356755.00,90,45);
select dmgeo2.ST_AsText(gemo) from dmt;

计算两地之间的距离

计算深圳到上海之间的距离,经纬度坐标分别是(114 22 ),(121 31)

SELECT dmgeo2.ST_Distance(dmgeo2.ST_GeometryFromText('POINT(114 22)'), dmgeo2.ST_GeometryFromText('POINT(121 21)') );

两点之间的距离不能用geometry,geometry这种数据类型是基于平面来计算的, geography这种数据类型时,是基于实际地球球体来计算的,

SELECT dmgeo2.ST_Distance( dmgeo2.ST_GeographyFromText('POINT(114 22)'), dmgeo2.ST_GeographyFromText('POINT(121 31)') );

 

posted @ 2023-10-30 09:41  fangzpa  阅读(405)  评论(0编辑  收藏  举报