因为刚接触Skyline不到一个星期,也怕把学习到的忘记掉,所以写一点学习到的一些皮毛的东西,赶紧记录一下,怕回头忘记

1.网上关于web端的开发非常多,也有很多牛人分享自己的经验,所以学习起来也相对更便捷

2.关于插件的开发,网上基本上没有,我也只找到一个是用C#做的,显然和Skyline的html插件形式还不一样,但是还有安装文件里有关于插件的html的源码可以学习,帮助文档也有关于如何组织插件,以及发布的资料,不过我没实验成功(尴尬而不失礼貌的微笑)

3.桌面端的开发相对容易一点,网上也有很多资料,并且帮助文档也有很多基础功能的代码可以参考

下面是我刚学习到的一些东西(做的是在上面提到的那个C#插件基础上做的一个小功能,可以根据shapefile的属性批量生成模型)

先说一下结果吧,结果也做出来了,但是之后发现人家软件本身就集成了这个功能。(那个复制对象的.....)

1.在ArcGIS里将shapefile面按属性查询导出

2.基于查询出来的面建立大小适中的渔网(渔网中有每个网格的中心点)

3.按空间位置查询,把面包含的中心点提取出来(这些点就是放模型的位置)

4.在skyline里用Ifeaturelayer,Ifeaturegroup,Ifeatures,Ifeature等一系列接口把点转化为Position,在这个位置上创建模型

但是虽然做成了,还是有缺点(还挺致命的),生成的模型没有在一个层上,,数据没有组织好,中间也走了很多弯路,但是弯路上也学到了很多东西。贴一些代码吧,比较菜....

a.关于如何图层中得到features(用的6.6的版本)

 private IFeatures66 getFeatures()
        {
            try
            {
                ISGWorld66 sgworld = new SGWorld66Class();//很多东西都来自这个ISGWorld的接口
                string GroupID = sgworld.ProjectTree.FindItem("tree");
                if (GroupID == null)
                {
                    MessageBox.Show("不存在");
                }
                else
                    MessageBox.Show("the id is" + GroupID);
                IFeatureLayer66 featurelayer = sgworld.ProjectTree.GetLayer(GroupID);
                IAttribute66 attribute = featurelayer.DataSourceInfo.Attributes.get_Attribute(1);                
                IFeatureGroup66 point = featurelayer.FeatureGroups.Point;//原本featuregroups下面应该有一个item的属性可以获取到具体的某个图层,然而我并没有找到,很郁闷(帮助文档里明明写的有的),不过还好这个Point,Polygon,Polyline也能得到
                IFeatures66 features = point.GetCurrentFeatures();//get the all features
                MessageBox.Show(Convert.ToString(features.Count));//static the number of features;
                return features;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unexpected error:" + ex.Message);
            }
            return null;
        }
 
b.上面的features通过索引就可以得到feature了//我有点繁琐,有把features放进了泛型的列表,这样其实挺慢的
 List<IFeature66> featureList = new List<IFeature66>();
  for (int i = 0; i < features.Count; i++)//put the every feature into list
                {
                    IFeature66 feature = (IFeature66)features[i];//get the specific feature
                    featureList.Add(feature);                                            
                }
                return featureList;
c.将feature的坐标提出来(因为我的feature是point)
 private IPosition66 CreatePosition(IFeature66 feature)
        {
            try
            {
                IPoint point =(IPoint)feature.Geometry;
                IPosition66 position = null;           
                double X = point.X;
                double Y = point.Y;
                position = Creator.CreatePosition(X, Y, 0, AltitudeTypeCode.ATC_ON_TERRAIN, 0, 0, 0, 500);//这个ICreator的接口很厉害,啥都能生成,有点夸张了(除了坐标的位置是提取的,其他的我都是给死了)
                return position;
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
            return null;
        }

d.有了位置就可以建模型了

  private void createModels( List<IPosition66> list)
        {
            string tMsg = String.Empty;
            string fileName = "D:\\BaiduNetdiskDownload\\skyline\\tools\\Data-Library\\3D-Objects\\Helicopters\\500d.xpc";//the path of my model;
            double scale = 5;//set the scale for model;
            string groupID ="";//as the node in the project tree;
            string Description = "myfirst";
            ITerrainModel66 mymodel = null;        
             for (int i = 0; i < list.Count; i++)
             {
                mymodel=Creator.CreateModel(list[i], fileName, scale, ModelTypeCode.MT_NORMAL, groupID, Description);
             }
        }
嗯,就是这样了,虽然最后没用到,但还是学到了点东西
skyline的shape图层的数据组织,和ArcGIS还是挺像的
 

刚接触SkyLine的一点小收获与感触的更多相关文章

  1. 关于openssl几个API的一点小收获

    今天心血来潮突然想搞搞openssl了,趁着端午小假,刚好有空可以鼓捣孤岛自己喜欢的东西,出去东奔西跑的实在太造孽了,还是宅起来给自己充充电吧.下载openssl最新代码1.0.1g,修复了" ...

  2. BUI Webapp用于项目中的一点小心得

    接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...

  3. java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误

    java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误. 问题: 创建了一个工 ...

  4. 刚接触js不久,自己写的banner幻灯片效果。

    对于我这种菜鸟来讲,刚接触项目.叫我用插件,其实我说插件太臃肿不想用,倒不如说我是看不懂那些插件...- -(更愿意自己写点看得懂的代码,顺便也是个学习的过程) 所以自己花了些时间,自己来写了个dem ...

  5. 关于win8开发的一点小总结

    我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...

  6. 关于PHP魔术方法__call的一点小发现

    好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方 ...

  7. net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解

    asp.net core 内置DI容器的一点小理解   DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...

  8. C与C++在形參的一点小差别

    先看一下以下的代码: int fun(a,b) int a; int b; { return 10; } void main(int argc, char ** argv) { fun(10); re ...

  9. 刚接触HTML5应该先学哪里才好?

    好吧,话不多说,直接来点干货吧! 刚接触html的小白都感觉摸不着头脑?应该怎么学习呢,其实HTML5可能对于还没有接触过的小白来说会比较的难,听起来也比较新颖.这是个什么骚东西!其实不然,这个就是构 ...

随机推荐

  1. SpringBoot Thymeleaf 配置多个Template Locations

    @Configuration public class ThymeleafConfigration { @Bean public SpringResourceTemplateResolver firs ...

  2. 获取客户端ip(包含中间反向代理)

    /** * 根据request获取用户的IP地址 * @param request * @return */ public static String getRemoteHost(HttpServle ...

  3. grep命令和tail命令

    写在前面的话: 最近参与了新项目开发,周期短,与自己负责的主要业务对接.业务复杂,时常出现bug,然额对于菜鸟的我,更是无从下手.其实最好的帮助就是 学会查看日志,关键是之前查看日志真是太少了,菜鸟一 ...

  4. Oracle12C SGA PGA UGA

    SGA和PGA简介 1 sga组成: 2b4p1s(记忆) database buffer cache:包括 default pool,keep pool,recycle pool: redo log ...

  5. DP&图论 DAY 4 上午

    DP&图论  DAY 4  上午 概率与期望 概率◦某个事件A发生的可能性的大小,称之为事件A的概率,记作P(A).◦假设某事的所有可能结果有n种,每种结果都是等概率,事件A涵盖其中的m种,那 ...

  6. DP&图论 DAY 3 下午 考试

    Problem AProblem Description有一天 Tarzan 写了一篇文章,我们发现这文章当中一共出现了 n 个汉字,其中第 i 个汉字出现了 ai 次,因为 Tarzan 不希望文章 ...

  7. vue-cli构建的项目结构解析

    参考: https://www.jianshu.com/p/32beaca25c0d

  8. GIS面积计算问题

    好长时间不更新了,今天说点干货,项目用到的. 1.项目中要用到计算面积的,根据火星坐标: 2.百度找了各种面积计算,google了半天,也没发现那个比较准确: 直接说干货吧.咱也高大上一会,用 Arc ...

  9. linux用户和组账户管理

    linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源.系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰. 用户账户 A.普通用户账户:普通 ...

  10. MEF等Ioc框架引起内存泄露-PartCreationPolicy

    对象的创建可以使用new,也可以使用IOC架如:castle.MEF等,IOC创建的对象的生命周期,可能IOC负责管理,使用框架的开发者如果不弄清楚可能会造成内存泄露问题. 这些内存泄露问题并不是IO ...