SuperMap iObject常见问题解答集锦(十一)

作者:皇皇

问:java组件开发支持postgresql数据库吗,怎么使用啊?
答:支持postgresql数据库,请下载与java组件位数一致的版本(推荐9.5),安装完成将postgresql的bin路径添加到path变量里,并将其bin目录下的libeay32.dll、libiconv-2.dll、libintl-8.dll、libpq.dll、ssleay32.dll依赖库拷贝java组件的bin目录下即可正常使用pg数据源了。

问:Gps设备会实时传回定位点坐标过来,怎么判断定位位置离道路数据里的哪条道路最近啊?
答:Gps设备传回的实质是点对象,而道路数据是线数据集,我们组件的邻近分析模块的最近距离计算,可以计算二维点到参考记录集合的对象的最小距离值,即可实现该需求。其接口为ProximityAnalyst.computeMinDistance()。

问:SuperMap iObjects JAVA 8C中在布局中对文本设置高、宽设置较大时就不起作用,什么原因?
答:布局中设置文本的高、宽时,如果设置了固定大小,文本的高宽就有上限,最大只能设置为25.5mm,超过这个值当做25.5处理,如果设置为不固定大小,但是是0.1mm,且没有上限;注文本固定大小用方法TextStyle.setSizeFixed(boolean),如果不写默认是为true的。

问:在SuperMap iObjects C++中使用workspace.save方法保存地图时一直返回false,保存失败?
答:在用save方法之前先设置pWorkspack->m_WorkspaceConnection.bFailIfExists = false;该属性意义在于如果文件已经存在是否返回失败,默认是true,仅仅针对文件型工作空间有效,

问:如何构建一个线对象?如何往线对象中添加子对象?如何往线对象中添加节点?
答:构建一个线对象:
UGPoint2D point1 = UGPoint2D(112,34);
UGPoint2D point2 = UGPoint2D(112,36);
UGGeoLine* geoline = new UGGeoLine ();
geoline -> Make(point1,point2);
往上面构建的线对象添加一个子对象:
UGPoint2D *points=new UGPoint2D();
points[0].x=112;
points[0].y=36;
points[1].x=114;
points[1].y=40;
UGbool aa = geoline ->AddSub(points ,2);
往第一步构建的线对象中添加节点:
UGPoint2D *points=new UGPoint2D();
points[0].x=114;
points[0].y=40;
UGbool bb = geoline ->InsertPoint (0,2,*points);

问:刷新地图是如何只刷新跟踪图层refreshTrackingLayer?
答:UGMap.SetRefreshFlag(false);然后刷新就不会刷底图,只会刷新TrackingLayer和DynamicLayer

问:在使用SuperMap iObjects C++ 8C时,如何对点对象进行投影转换?
答:两种方进行投影转换:1、使用UGGeoPoint的PJForward方法进行投影转换;2、使用UGPrjCoordSys类的Forward方法进行投影转换。

问:SuperMap Objects .NET如何查看当前购买的正式所里面有哪些模块儿?
答:使用 SuperMap.Data.License.Connect(enum ProductType)查找相对应模块儿的许可信息,如果返回0则查询成功,有该模块儿,返回其他数值则代表没有该模块儿。

问:获取到了trackinglayer中的某一个对象,对对象进行了修改后,刷新跟踪图层,对象并没有什么变化,这是问什么呢
答:因为修改对象后,还需要对跟踪图层通过set方法对跟踪图层中该索引处的几何对象替换为修改后的几何对象,然后再刷新跟踪图层

问:打开工作空间的地图,对地图就行修改了,然后分别查询map和workspace的IsModified属性。但是结果map的IsModified属性为true,workspace的IsModified属性却为false,这是为什么呢?
答:当地图做了相应的修改后,map的IsModified为ture,但是由于没有保存地图,所以工作空间也是没有改变的,只有当保存了修改后的地图后,工作空间IsModified才会变为true.

问:场景生成场景缓存的时候在哪里设置缓存类型为OSGB?
答:针对场景中的每一个图层来设置:Layer3DDataset.IsBuildOSGBCache = true即可生成OSGB缓存

问:SuperMap iObject .NET 8C添加对象的同时如何添加对象属性?
答:在数据集有这个属性字段的前提下使用Dictionary添加属性:
Dictionary<String, Object> dictionary = new Dictionary<string, object>();
dictionary.Add(“NAME”, “小明”);
recordset.AddNew(geopoint, dictionary);

问:SuperMap iObject .NET 如何设置点符号的颜色?
答:点符号颜色用GeoStyle.LineColor 设置,打算栅格符号(用图片做的符号)不能设置符号颜色。

问:SuperMap iObject .NET 点对象随着地图的缩放有时能看见有时不能看见,怎么才能让它一直显示?
答:设置地图的压盖显示条件:
map.MapOverlapDisplayedOptions
AllowPointOverlap=true;
AllowTextAndPointOverlap=true;

问:SuperMap iObject .NET 如果获取线对象的中点?
答:先获取线的长度,在求先的中点,即GeoLine.FindPointOnLineByDistance(GeoLine.Length/2);

问:在使用SuperMap iObjects .NET 8C时,开启地表透明后,如何修改地下颜色?
答:获取Scene.GlobalImage属性,直接修改GlobalImage.UndergroundBackColor属性即可

问:SuperMap iObject .NET 如何判断点是否在线上?
答:用Geometrist.Distance获取点到线的距离,距离在容限(误差)范围内就可以说明点在线上。

问:SuperMap iObject .NET 如何获取线和面的节点信息?
答:获取到线或者面对象,用PartCount获取子对象个数,循环每个子对象获取所有节点信息,如下代码就是或者线对象的所有节点信息。

                    Geometry geometry = recordset.GetGeometry();
                    GeoLine geoLine = geometry as GeoLine;
                    for(int a=0;a<geoLine.PartCount;a++)
                    {
                        Point2Ds point = geoLine[a];
                        foreach (Point2D point2D in point)
                        {
                            double zx=point2D.X;
                            double zy = point2D.Y;  
                        }
                    }

问:SuperMap iObject .NET 相交空间查询模式得到的结果集和查询的对象求交点,为什么有些对象是没有交点的?
答:空间查询Query(QueryParameter)的时候是考虑了数据容限的,Geometrist.IntersectPolyLine求交点是没考虑数据容限的,解决的办法就是修改数据集的节点容限datasetVector.Tolerance.NodeSnap=0.000000001,再做空间查询。

问:SuperMap iObject .NET怎么修改记录集里面的对象一直失败?
答:获取记录集的时候必须是动态游标CursorType.Dynamic ,修改对象前要锁定记录集Recordset.Edit ,修改完成后替换原有对象Recordset.SetGeometry 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值