• MapXtreme增加基站、改变颜色、操作数据库


    关于MapXtreme方面的几个问题:

    需求1:

    用户从客户端圈选几个小区,点击相应的按钮进行计算或其它处理,处理结束后,返回相关的框来显示处理结果,并且把选中的小区改变成红色。接着可以再处理其它小区,刚刚改变颜色的小区仍然显示改变后的颜色。

    (我觉得跟你们搜索网元后的显示以及搜索频点的显示的效果类似)

    两个问题:

    1. 选中小区后,如何获得小区的相关信息。

    我是通过获得选择集来从.tab文件获得小区的主键(已实现),然后再通过该主键利用ado.net去查询数据库来得到。不知道方法是否与你们一致。

    2. 处理结束后,把选中小区显示成红色,这个还没解决好,更新失败,可能方法还有问题。

    我想按你们相关类似功能的实现方法来做。改变地图后,如果不保存工作空间,那么对小区颜色的改变在下一次登陆不生效,反之下一次登陆颜色改变。你们用的是临时图层么?或是样式覆盖等其它的方法?

    需求2:

    新增基站。

    问题:

    1. 你们关于基站以及小区图层是在服务器端定时生成的,用户通过下载来进行更新。如果用户需要在地图上新增一个基站。基站及小区的画法应该如何实现。

    我觉得思路应该是:为了保持一致,使用你们画基站和小区时的brush,pen等,往基站和小区天线的.tab图层里加,同时更新数据库。所以,需要知道你们使用的画笔画刷的样式以及画扇形的方法。

    不知道这个思路是否正确。

    答复:

    需求1:

    1、 方式是一致的,非常类似的功能应该是点击一个小区,在属性面板上显示小区的属性。

    2、 类似于多个小区定位,给你代码

    public void LocateMultisCell(ArrayList cellNameList,string layerName, Map map, Color cellColor,string labelString)

    {

    if(cellNameList.Count == 0)

    return;

    MapInfo.Data.Table isTable1 = MapInfo.Engine.Session.Current.Catalog.GetTable(layerName);

    if(isTable1 != null)

    isTable1.Close();

    string tempLayerName = "Cell_"+ layerName;

    //判断图层是否存在

    MapInfo.Data.Table isTable = MapInfo.Engine.Session.Current.Catalog.GetTable(tempLayerName);

    if(isTable != null)

    isTable.Close();

    System.Data.DataTable table = new DataTable();

    DataColumn column1 = new DataColumn();

    column1.DataType = System.Type.GetType("System.Int16");

    column1.ColumnName = "myId";

    table.Columns.Add(column1);

    DataColumn column2 = new DataColumn();

    column2.DataType = System.Type.GetType("System.String");

    column2.ColumnName = "name";

    table.Columns.Add(column2);

    DataColumn column3 = new DataColumn();

    column3.DataType = System.Type.GetType("System.String");

    column3.ColumnName = "bcch";

    table.Columns.Add(column3);

    DataColumn column4 = new DataColumn();

    column4.DataType = System.Type.GetType("System.String");

    column4.ColumnName = "tch";

    table.Columns.Add(column4);

    DataColumn column5 = new DataColumn();

    column5.DataType = System.Type.GetType("System.String");

    column5.ColumnName = "bsic";

    table.Columns.Add(column5);

    DataColumn column6 = new DataColumn();

    column6.DataType = System.Type.GetType("System.String");

    column6.ColumnName = "chgr";

    table.Columns.Add(column6);

    DataRow row;

    for (int i = 0; i< cellNameList.Count; i++)

    {

    Wellcomm.DataService.CellFreqEntity entity = (CellFreqEntity)cellNameList[i];

    row = table.NewRow();

    row["myId"] = 1;

    row["name"] = entity.CellName;

    row["bcch"] = entity.Bcch;

    row["tch"] = entity.Tch;

    row["bsic"] = entity.Bsic;

    row["chgr"] = entity.Chgr;

    table.Rows.Add(row);

    }

    TableInfoAdoNet tabAdo = new TableInfoAdoNet(tempLayerName);

    tabAdo.ReadOnly = false;

    tabAdo.DataTable = table;

    MIConnection connection=new MIConnection();

    connection.Open();

    Table miStateInfo = connection.Catalog.OpenTable(tabAdo);

    if(miStateInfo!=null)

    {

    MapInfo.Data.TableInfo tableInfo = MapInfo.Data.TableInfoFactory.CreateTemp(layerName);

    tableInfo.Columns.Add(ColumnFactory.CreateStringColumn("id",20));

    tableInfo.Columns.Add(ColumnFactory.CreateStringColumn("name", 50));

    tableInfo.Columns.Add(ColumnFactory.CreateStringColumn("bcch", 20));

    tableInfo.Columns.Add(ColumnFactory.CreateStringColumn("tch", 20));

    tableInfo.Columns.Add(ColumnFactory.CreateStringColumn("bsic", 20));

    tableInfo.Columns.Add(ColumnFactory.CreateStringColumn("chgr", 20));

    tableInfo.Columns.Add(ColumnFactory.CreateIntColumn("myId"));

    tableInfo.ReadOnly=false;

    Table testTable = MapInfo.Engine.Session.Current.Catalog.CreateTable(tableInfo);

    Table table1800 = MapInfo.Engine.Session.Current.Catalog.GetTable("DCS1800小区天线");

    Table table900 = MapInfo.Engine.Session.Current.Catalog.GetTable("GSM900小区天线");

    MIConnection miConn = new MIConnection();

    MICommand miCommandA = miConn.CreateCommand();

    MICommand miCommandB = miConn.CreateCommand();

    miCommandA.CommandText="insert into "+layerName+

    " (obj,MI_Style,id,name,myId,bcch,tch,bsic,chgr) "+

    " select b.obj,b.MI_Style,b.id,b.name,a.myId,a.bcch,a.tch,a.bsic,a.chgr from "+ tempLayerName +" a, "+ table1800.Alias +" b where a.name = b.name";

    miCommandB.CommandText="insert into "+layerName+

    " (obj,MI_Style,id,name,myId,bcch,tch,bsic,chgr) "+

    " select b.obj,b.MI_Style,b.id,b.name,a.myId,a.bcch,a.tch,a.bsic,a.chgr from "+ tempLayerName +" a, "+ table900.Alias +" b where a.name = b.name";

    miConn.Open();

    miCommandA.ExecuteNonQuery();

    miCommandB.ExecuteNonQuery();

    if(Wellcomm.Easywell.Gis.Util.ViewControls.NotEmptyTable(testTable))

    {

    MapInfo.Mapping.FeatureLayer featureLayer = new MapInfo.Mapping.FeatureLayer(testTable);

    //插入到标注的后面

    map.Layers.Insert(1,featureLayer);

    //小区样式

    MapInfo.Styles.SimpleInterior simpleInterior = new SimpleInterior(); //区域背景

    simpleInterior.ForeColor = cellColor;

    MapInfo.Styles.AreaStyle area = new MapInfo.Styles.AreaStyle();

    area.Interior = simpleInterior;

    SimpleLineStyle bor = new SimpleLineStyle();

    area.Border = bor;

    MapInfo.Styles.CompositeStyle compositeStyle = new MapInfo.Styles.CompositeStyle(area);

    FeatureOverrideStyleModifier fsm = new FeatureOverrideStyleModifier("Style["+layerName+"]", compositeStyle);

    featureLayer.Modifiers.Append(fsm);

    //同邻频小区,标注显示:BCCH(BSIC) \n [chgr1]{TCH1}[chgr2]{TCH2}...

    if(labelString != null && labelString != "")

    Wellcomm.Easywell.Gis.Util.CustomLabelProperties.AddMultiLabel(map,testTable,labelString,cellColor);

    //控制视野

    //Wellcomm.Easywell.Gis.Util.ViewControls.ViewControl(testTable,map);

    Wellcomm.Easywell.Gis.Util.ViewControls.NotSelect(map,testTable);

    }

    //关闭操作

    miStateInfo.Close();

    miCommandA.Cancel();

    miCommandA.Dispose();

    miCommandB.Cancel();

    miCommandB.Dispose();

    miConn.Close();

    }

    }

    需求2:

    首先,我们这边没有用户在地图上添加网元的应用场景。用户自己在地图上增加一个基站,这会引起数据库中数据的变化,如基站的覆盖、小区的归属、新增基站的归属都会发生变化,而这些变化会引起整个图层的变化,应该重新生成图层。

    我认为不应该提倡这样的做法,如果一定要实现这样的操作,我认为在交互上用户发出请求后,首先更新数据库,然后生成.TAB文件,最后下载到客户机显示。

    另外,基站和小区不是画上去的,是通过数据库生成MAPINFO文件,在程序中只是打开一个MAPINFO的表以增加一个图层。

    以上只是个人意见,仅供参考。

  • 相关阅读:
    ReentrantLock和synchronized区别和联系?
    从上向下打印二叉树
    字符串的全排列
    二叉树中和为某一值得路径 java实现
    三大框架面试题
    SQL语句总结
    [terry笔记]Oracle10g/11g安装-redhat5.5
    [terry笔记]Oracle会话追踪(二):TKPROF
    [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046
    [terry笔记]IMPDP报错ORA-39083 Object type TYPE failed to create ORA-02304
  • 原文地址:https://www.cnblogs.com/googlegis/p/2978831.html
Copyright © 2020-2023  润新知