超图SuperMap Is.Net开发心得及一些问题

  • 客户端地图操作的地理坐标传递

         可以通过自定义Action事件获得,自定义Action事件封装好的参数ActionEventArgs中有MapCoods地理坐标数组,这个数组代表客户端在地图上的起始点、中间点和结束点的地理坐标。

  • 查询结果的地理坐标获得

          在通过MapControl.QueryBySQL等其它查询之后,将返回一个ResultSet结果集,通过这个结果集可以获得每一个地理空间实体的中心坐标和指定的返回属性值。Record具有Center字段和FieldValues字段,分别是地理中心坐标和指定返回值数组。

  • 临近查询

          所谓的临近查询就是指以某一点为中心查找周围感兴趣的空间实体。一般情况是输入中心地物名称,通过QueryBySQL()查询到这个物体的地理坐标,然后再通过QueryByDistance()查找周边地物。

  • 某一范围中的专题显示

          某一范围的专题显示就是说有时候要对用户指定的区域进行专题渲染,这种情况下首先是要确定用户指定的区域,然后确定专题图的相关字段和渲染方式,再通过Layer.DisplayFilter进行部分渲染。根据用户指定的区域获取到需要渲染的空间实体的某一属性值如“SmID”,以方便DisplayFilter设置条件;确定专题图的相关字段是需要注意到不同的图层类型(点、线、面)最好使用不同的专题渲染方式。

关于Distance
distance在SuperMap Is中表示的是以度为单位的地理距离,如果是平面坐标,可以根据比例尺进行直接转换,如1:5000的平面坐标地图(单位meter),5000米就相当于地图上面的1米。但是如果是经纬度坐标系,则需要进行转换。如WGS1984的经纬度坐标,1秒相当于33米,那么根据用户输入的以米为单位的平面距离转换成为distance的时候,应该是X/3600*33,因为1度等于3600秒。

关于专题图
根据我自己的开发经验,SuperMap IS.NET 5.0如果存在几个AppServer的话,很可能除了第一个AppServer能够出现专题图外,其余的都不行,这个应该是AppServer的问题,所以在制作专题图的时候,建议采用第一个AppServer。下面说明范围分段专题图的C#代码。

Layer objLayer=new Layer();
int layerCount=this.MapControl1Layers.Length;
for(int i=0;i<layerCount;i++)
{
if(this.MapControl1.Layers[i].Name.Equals(layername)
{
objLayer=this.MapControl1.Layers[i];
}
}

if(objLayer==null)
{
return;
}
if(objLayer.ThemeRange!=null)
{
objLayer.ThemeRange=null;
}
//最好同时去掉该图层已经存在的不相关的专题图
RangeTheme theme = objLayer.ThemeRange;
   theme.Valid = true;
   theme.Caption = "aaa";
   theme.Expression = "SmID";
   theme.BreakCount = 3;//表示分开的段数
   theme.BreakValues = new double[2];//断点数
   theme.BreakValues[0] = 50;
   theme.BreakValues[1] = 100;
   theme.Displays = new SuperMap.IS.Utility.Style[3];
   theme.Displays[0] = new SuperMap.IS.Utility.Style();
   theme.Displays[1] = new SuperMap.IS.Utility.Style();
   theme.Displays[2] = new SuperMap.IS.Utility.Style();
   theme.Displays[0].BrushColor = 65535;//BrushColor表示填充,所以最好面图层使用这种渲染方式
   theme.Displays[1].BrushColor = 255;
   theme.Displays[2].BrushColor = 16711680;
//Display还有BrushStyle,PenColor,PenStyle,SymbolSize,SymbolStyle等属性
   this.MapControl1.Update();

关于Pan的问题
如果存在多个AppServer,可能只有第一个AppServer的pan功能正常






转载于:https://www.cnblogs.com/TonyWu/archive/2005/10/22/259691.html

猜你喜欢

转载自blog.csdn.net/weixin_34233856/article/details/92875466
今日推荐