首页 > 其他分享 >Syline6.5学习心得-web-创建几何对象

Syline6.5学习心得-web-创建几何对象

时间:2023-08-15 20:14:43浏览次数:44  
标签:web Syline6.5 多边形 Creator 创建 labelStyle 学习心得 sgworld var

通过实例说明如何在Skyline中创建圆、文本、多边形等几何要素,设置要素的颜色,要素提示,飞行到几何要素等功能。

1.使用的接口

     ICreator65:可以创建几何要素、颜色、位置、图层等等(具体请查看api)例如本篇所涉及的要素:CreatePosition, CreateColor, CreateCircle, CreateMessage;
    INavigate65:导航接口,可以获取设置相机位置信息,飞行到某个坐标点、放大、缩小、飞行控制等,这里主要使用的方法有:FlyTo(pos) 飞行到某个位置;
     IPosition65:位置接口,提供创建位置信息、相机位置信息,这里使用的方法有:Copy() 复制位置, Pitch 相机俯角设置(具体请参加api Basic Concepts 一项);
     IColor65:颜色接口,采用rgba;
    IGeometryCreator :创建线、面几何地物,这里使用的有: CreateLinearRingGeometry(线地物), CreatePolygonGeometry(面地物);

未列出方法,请参考api。

2.程序设计

(1)新建js文件名为tools;

(2)添加引用到index.html;

(3)添加相应的按钮;

完整代码如下:

(4)html代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>skyline实例</title>
    <script src="tools.js"></script>
</head>
<body οnlοad="Init()">
    <input type="button" value="创建圆"  οnclick="CreateCircle()"/>
    <input type="button" id="btnCreateTextLabel" value="创建文字" οnclick="CreateTextLabel()"/>
    <input type="button" id="btnCreatePolygon" value="创建多边形" οnclick="CreatePolygon()" />
    <input type="button" id="btnComplexPolygon" value="复杂多边形" οnclick="ComplexPolygon()" />
    <div>
    <!-- Define a div element that will hold a TerraExplorer ActiveX object-->
    <object id="TE" classid="clsid:3a4f9192-65a8-11d5-85c1-0001023952c1" style="width: 600px;height: 600px"></object>
    <!--Define an object element that will allow you access to TerraExplorer v6.5 API.-->
    <object id="sgworld" classid="CLSID:3a4f9197-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object>
 </div>
    <script language="javascript" >
        function Init() {
            sgworld.Project.Open("[email protected]");
        }
    </script>
</body>
</html>

 

(5)tools.js代码

//创建圆
function CreateCircle() {
    try {
        var sgworld=document.getElementById('sgworld');
        //创建圆的位置
        var dxCoord = -122.49460;
        var dyCoord = 37.78816;
        //注:以实际地面高度创建圆面的高度,创建后的圆面不一定是平的
        var dAltitude = 100;//当地地面高程
        //轴心点离地面高度
        var eAltitudeTypeCode = 0;//AltitudeTypeCode.ATC_TERRAIN_RELATIVE;
        //相机角度设置
        var dYaw = 0.0;
        var dPitch = 0.0;
        var dRoll = 0.0;
        var dDistance = 5000;
 
        var cPos = sgworld.Creator.CreatePosition(dxCoord, dyCoord, dAltitude,
            eAltitudeTypeCode, dYaw, dPitch, dRoll, dDistance);
 
        //创建填充色
        //argb
        var cFillColor = sgworld.Creator.CreateColor(0, 255, 0, 0x7F);
        //创建圆
        var nLineColor=0xFFFF0000;//蓝色
        var dCircleRagius = 200;//半径 单位 m
        var groupID = "";
        var descrition = "Circle";
        var cCircle = sgworld.Creator.CreateCircle(cPos, dCircleRagius,
            nLineColor, cFillColor, groupID, descrition);
 
        //获取并设置圆的属性
 
        //半径
        var dNewCircleRadius = 300;
        var dCurrentCircleRadius = cCircle.Radius;
        cCircle.Radius = dNewCircleRadius;
        //填充颜色
        var nRGB_Red = 0xFF0000;
        var dAlpha = 0.2;
        var cFillStyle = cCircle.FillStyle;
        cFillStyle.Color.FromRGBColor(nRGB_Red);
        cFillStyle.Color.SetAlpha(dAlpha);
 
        //向圆添加消息
        var eMsgClient = 5;
        var tMessage = "Hello Circle(你好)";
        var eMsgType = 0;
        var bIsBringToFront = true;
        var cMsg = sgworld.Creator.CreateMessage(eMsgClient, tMessage, eMsgType, bIsBringToFront
            );
        cCircle.Message.MessageID = cMsg.ID;
 
        //飞到圆
        var flyPos = cPos.Copy();
        flyPos.Pitch = -89;//俯角 89度
        sgworld.Navigate.FlyTo(flyPos);
    }
    catch (e) {
        alert("创建失败:" + e.message);
    }
}
 
//创建文字
function CreateTextLabel() {
    try {
        //获取skyline globe world 控件
        var sgWorld=document.getElementById('sgworld');
        //位置
        var pos = sgWorld.Creator.CreatePosition(-122.49460, 37.78819, 100.0,//地理坐标信息
            0,
            0, 0, 0, 500);//相机角度位置参数
        
        //文字样式
        var labelStyle = sgWorld.Creator.CreateLabelStyle();
        //设置样式参数
        var backgroundColor = labelStyle.BackgroundColor;
        backgroundColor.FromRGBColor(0xFF0000);//blue
        backgroundColor.SetAlpha(0.5);
        labelStyle.BackgroundColor = backgroundColor;
        labelStyle.FontName = "Arial";
        labelStyle.Italic = true;
        labelStyle.Scale = 3;
 
        var text = "Skyline Samples HZY";
        var textLabel = sgWorld.Creator.CreateTextLabel(pos, text, labelStyle, "", "TextLabel");
 
        //飞到文字标识
        var flyToPos = pos.Copy();
        flyToPos.Pitch = -89.0;
        sgWorld.Navigate.FlyTo(flyToPos);
 
 
    
    }
    catch (e) {
        alert("创建文字失败:" + e.message);
    }
}
 
//创建多边形
function CreatePolygon() {
    try {
        var sgworld=document.getElementById('sgworld');
        //顶点
        var verticesArray = [
        -122.415025, 37.76059, 10,
        -122.415868, 37.760546, 11,
        -122.415922, 37.761244, 12,
        -122.415592, 37.761254, 13,
        -122.415557, 37.760973, 14,
        -122.415081, 37.76099, 15
        ];
        //轮廓线
        var ring = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry(verticesArray);
 
        //创建多边形地物
        //第二个参数为内环顶点轮廓线
        var polygonGeometry = sgworld.Creator.GeometryCreator.CreatePolygonGeometry(ring, null);
 
        //创建多边形
        var lineColor = 0xFF00FF00;
        var fillColor = 0x7FFF0000;
        var altitudeTypeCode = 0;
 
        var newPolygon = sgworld.Creator.CreatePolygon(polygonGeometry, lineColor, fillColor,
            altitudeTypeCode, "", "polygon");
 
        //飞行到地物
        var flypos = newPolygon.Position.Copy();
    
        flypos.Pitch = -89.0;
        //获取的相机的高度为-1,所以此时应该设置相机的高度
        flypos.Distance = 500;
        sgworld.Navigate.FlyTo(flypos);
    
    }
    catch (e) {
        alert("创建多边形失败:" + e.message);
    }
 
   
}
 
//复杂多边形
function ComplexPolygon() {
    try {
        var sgworld = document.getElementById('sgworld');
        //通过WKT(well-known-text)创建带孔的多边形
        //有关WKT的知识,可参考http://www.cnblogs.com/tiandi/archive/2012/07/18/2598093.html
        var complexGeometry = sgworld.Creator.GeometryCreator.CreateGeometryFromWKT(
            "POLYGON((-80.900091 26.739261,-80.906338 26.840896,-80.591731 26.951601,-80.809248 26.716679,-80.900091 26.739261),(-80.873569 26.819371,-80.81616 26.772908,-80.811242 26.846308,-80.873569 26.819371))"
            );
 
        //创建多边形
        var lineColor = sgworld.Creator.CreateColor(255, 0, 0, 0);
        var fillColor = "#00ff00";
        var polygon1 = sgworld.Creator.CreatePolygon(complexGeometry, lineColor, fillColor,
            2,/*AltitudeTypeCode.ATC_ON_TERRAIN (效果:在地面上,贴在地面上)*/
            "", "Polygon with hole");
 
        //通过坐标创建多个多边形
        //外环线
        var exteriorRing = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry([
            -80.593456, 26.692189, 1000,
            -80.569379, 26.654723, 2000,
            -80.482195, 26.724591, 1000,
            -80.55208, 26.771137, 1000]);
        //内环线1
        var interiorRing1 = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry([
            -80.577327, 26.713192, 1000,
            -80.567401, 26.726351, 1000,
            -80.569138, 26.705869, 1000]);
        //内环线2
        var interiorRing2 = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry([
            -80.55315, 26.691784, 2000,
            -80.555867, 26.673088, 2000,
            -80.5252610, 26.688447, 2000]);
 
        var complexGeometry2 = sgworld.Creator.GeometryCreator.CreatePolygonGeometry(exteriorRing, [interiorRing1, interiorRing2]);
 
        var fillColor2 = "#0000ff";
        var lineColor2 = "#00ff00";
 
        var polygon2 = sgworld.Creator.CreatePolygon(complexGeometry2, lineColor2, fillColor2,
            3,//AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE(面的高度与地面的关系为绝对值,效果:面在自定义高度,但面不根据地形高低变化,只与顶点有关)
            "", "Polygon with 2 holes");
        polygon2.Position.Distance = 80000;
        polygon2.Position.Pitch = -80;
        sgworld.Navigate.FlyTo(polygon2.Position);
 
    }
    catch (e) {
        alert("创建多边形失败:" + e.message);
    }
}

 

标签:web,Syline6.5,多边形,Creator,创建,labelStyle,学习心得,sgworld,var
From: https://www.cnblogs.com/Fooo/p/17632311.html

相关文章

  • python的websocketAPP
    一.websocket简介及安装使用pip命令安装websocket库:pip3installwebsocketwebsocket.WebSocketApp 是对 websocket.WebSocket 的封装,支持自动定时发送PING帧,支持事件驱动方式的数据帧接收,可用于长期的WebSocket连接。websocket中就有建立连接connect、发送消息send等函......
  • web端相关
    1什么是认证和授权 2 ......
  • JS逆向实战21——某查查webpack密码加密
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站aHR0cHM6Ly93d3cucWNjLmNvbS8=前言阅读前请先阅读下我的另一篇文章看看别的webpack打包的网站......
  • Asp.net WebAPI中Controller的方法在接受到json时序列化都为null的问题
    原因是,webapi默认不序列化字段,只序列化属性只需要把字段改成属性即可 ------------------改成---------------- ......
  • WebDAV之π-Disk·派盘 + 厚墨
    厚墨是目前网络上非常方便的一款电子阅读软件,采用独家数据采集分析技术,汇合了移动互联网各种资源网站大数据,能同步起点中文网、纵横中文网、逐浪小说网、言情小说吧、晋江文学城、百度阅读、网易云阅读、塔读文学、创世中文网、潇湘书院、飞卢小说和腾讯文学等等小说更新,将玄幻小说......
  • eWebEditor 复制word里面带图文的文章,图片可以直接显示
    ​ 由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来......
  • Web编辑器 复制word里面带图文的文章,图片可以直接显示
    ​ 在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper。通过知乎提供的思路找到粘贴的原理,通过TheViper找到粘贴图片的方法。其原理为一下步骤:监听粘贴事件;【用于插入图片】获取光标位置;【......
  • ttyd工具,实现web 界面登陆服务器
    1、安装方案一-:yum-yinstallopenssl-develwgetcd/rootwgethttps://github.com/tsl0922/ttyd/releases/download/1.6.3/ttyd.x86_64--no-check-certificatemvttyd.x86_64ttydchmod+xttydmvttyd/usr/sbin/安装方案二:官网地址或者直接yum安装https://github......
  • 黑马程序员JavaWeb全套基础教程,
    黑马程序员JavaWeb全套基础教程,1.Junit测试包2.注解的内容3.数据库连接池c3p04.css和javascript以及html中的bom和dom讲解5.Bootstrap的简单介绍6.xml和json7.JQuery和Ajax8.redis和jedis9.linux和ngix10.两个实战项目黑马程序员JavaWeb全套基础教程,day01-......
  • .net6webapi中配置Jwt实现鉴权验证
    JWT(JsonWebToken)jwt是一种用于身份验证的开放标准,他可以在网络之间传递信息,jwt由三部分组成:头部,载荷,签名。头部包含了令牌的类型和加密算法,载荷包含了用户的信息,签名则是对头部和载荷的加密结果。jwt鉴权验证是指在用户登录成功后,服务器生成一个jwt令牌并返回给客户端,客户端在......