Mapx 具体使用方法


2008年11月13日 星期四 22:13

利用多边形工具:wMap.CurrentTool = ( MapXLib.ToolConstants )10;

计算代码写在:wMap_PolyToolUsed(…)中。

if (e.toolNum == 10)

{

//获取屏幕上的点

MapXLib.Points pts = (MapXLib.Points)e.points;

MapXLib.Point pt1, pt2;

double d = 0.0;

//计算顺序两个点距离,累计得到总距离

for (int i = 1; i < pts.Count; i++)

{

pt1 = pts._Item(i);

pt2 = pts._Item(i + 1);

d += axMap1.Distance(pt1.X, pt1.Y, pt2.X, pt2.Y);

}

MessageBox.Show(string.Format("距离为:{0:f2} 公里", d));

}

 
2008年11月13日 星期四 22:06

写在地图控件的SelectionChanged()事件中,确保图层可选layer.Selectable = true;

//第一层,注:MapX的索引号从“1开始

MapXLib.Layer lyr = wMap.Layers._Item(1);

//显示第一个图元的信息

MessageBox.Show ( lyr.Selection._Item(1).KeyValue );

 
2008年11月13日 星期四 22:00

设置MapControl属性:

        MouseWheelSupport = miFullMouseWheelSupport;

 
2008年11月13日 星期四 21:55

思路:将实时数据查询放到一个datatable中,循环地查询每一个feature,将对应的feature坐标修改掉,最后刷新地图。

//获取【灯】数据

System.Data.DataTable dt = ds.Tables[0];

//更新【灯】图层

MapXLib.Layer lyr = wMap.Layers._Item("灯");

lyr.KeyField = "Name";

foreach (MapXLib.Feature fe in lyr.AllFeatures)

{

System.Data.DataRow[] drs = dt.Select("名称 = '" + fe.KeyValue.ToString() + "'");

double dx = Convert.ToDouble(drs[0]["经度"].ToString());

double dy = Convert.ToDouble(drs[0]["纬度"].ToString());

//重设point坐标

fe.Point.Set(dx, dy);

//更新feature

fe.Update(fe, new MapXLib.RowValuesClass());

}

//刷新地图

lyr.Refresh();

通常会用一个Timer通过Tick事件来刷新地图,这样的刷新会使得地图有明显的闪烁。解决方法如下,设置地图控件属性“RedrawInterval = 3000”即可。

 
2008年11月13日 星期四 21:40

接上篇

4)         Layer.Style 图层样式

//重写图层样式

lyr.OverrideStyle = true;

//使用位图作为图元样式

lyr.Style.SymbolType = MapXLib.SymbolTypeConstants.miSymbolTypeBitmap;

//指定位图名称

lyr.Style.SymbolBitmapName = "LITE2-32.bmp";

//指定位图大小

lyr.Style.SymbolBitmapSize = 20;

//位图白色部分为透明

lyr.Style.SymbolBitmapTransparent = true;

5)         Layer.LabelProperties.Style 标注样式

//字体

lyr.LabelProperties.Style.TextFont.Name = "华文中宋";

//大小

lyr.LabelProperties.Style.TextFont.Size = 16;

//粗体

lyr.LabelProperties.Style.TextFont.Bold = true;

//颜色

lyr.LabelProperties.Style.TextFontColor = (uint)MapXLib.ColorConstants.miColorNavy;

//位置

lyr.LabelProperties.Position = MapXLib.PositionConstants.miPositionCC;

//偏移

lyr.LabelProperties.Offset = 15;

6)         MapXLib.Feature 图元要素

A.        AttachmapControl.GetOcx())将独立的图元连接到地图上,使地图坐标应用于相应要素

B.         KeyValue = “xx” 对应Layer.KeyField的值

C.         Point = pt 指定地图要素(某个点)

//将数据库中的点坐标依次读出到一个dataset中,构成point的feature,计入lyr中

lyr.KeyField = "Name";

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

//新建一个feature

MapXLib.Feature fe = new MapXLib.FeatureClass();

//将独立的图元连接到地图,以便地图坐标系应用于相应图元。

fe.Attach(wMap.GetOcx());

//新建一个点

MapXLib.Point pt = new MapXLib.PointClass();

//定义点的坐标

double dx = Convert.ToDouble(ds.Tables[0].Rows[i]["经度"].ToString());

double dy = Convert.ToDouble(ds.Tables[0].Rows[i]["纬度"].ToString());

pt.Set(dx, dy);

//设置字段的值

fe.KeyValue = ds.Tables[0].Rows[i]["名称"].ToString();

fe.Point = pt;

//加入图层中

lyr.AddFeature(fe, new MapXLib.RowValuesClass());

}

7)         MapXLib.Point

A.        Set(double x, double y) 设置点的坐标

8)         如果图层中图元的样式根据数据库中数据分级显示,则所有layer样式都不能用,因为layer样式将会覆盖feature的样式。对每一个feature进行样式的赋值:

//定义样式

MapXLib.Style sNormal = new MapXLib.Style();

//设置样式

sNormal.SymbolType = MapXLib.SymbolTypeConstants.miSymbolTypeBitmap;

sNormal.SymbolBitmapName = "PIN4-32.BMP";

sNormal.SymbolBitmapTransparent = true;

sNormal.SymbolBitmapSize = 20;

//feature应用样式

fe.Style = sNormal;

 
2008年11月13日 星期四 21:37

1.        首先在路径中查找相关文件,如果有就先删除。

using System.IO;

//查看【灯.*】文件是否存在,如果存在就删掉

if (File.Exists(Application.StartupPath + "\\MapData\\灯.DAT"))

File.Delete(Application.StartupPath + "\\MapData\\灯.DAT");

2.        几个重要的对象

1)         MapXLib.Fields 字段集

A.        AddStringField(字段名,长度,是否索引)

B.         AddFloatField(字段名,是否索引)

//新建一个Fields集合:Fields 集合用于描述或定义数据表的列结构

MapXLib.Fields flds = new MapXLib.FieldsClass();

//增加文本型字段

flds.AddStringField("Name", 50, false);

2)         MapXLib.LayerInfo 用于定义要添加的图层

A.        属性Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeNewTable;

B.         方法AddParameter(属性名,属性值)

a)          “FileSpec”xxx.tab 文件名称

b)         “Visible”true / false 图层是否可见

c)          “AutoCreateDataset”true / false 是否自动创建dataset

d)         “Fields” MapXLib.Fields 与图层相关的字段集

//新建一个layerInfo

MapXLib.LayerInfo mLayerInfo;

mLayerInfo = new MapXLib.LayerInfoClass();

//指定layerInfo的Type,选定建立NewTable

mLayerInfo.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeNewTable;

//LayerInfo.AddParameter方法用于设置这些参数。

//确定文件路径:一个字符串属性,应该设置为要创建的图层的文件路径。

mLayerInfo.AddParameter("FileSpec", @Application.StartupPath + "\\MapData\\灯.tab");

//确定图层可视:控制图层是否可见。该属性是一个布尔值,默认值为 True。

mLayerInfo.AddParameter("Visible", true);

//确定自动创建dataset

mLayerInfo.AddParameter("AutoCreateDataset", true);

//把字段加入图层

mLayerInfo.AddParameter("Fields", flds);

3)         MapXLib.Layer 图层

A.        _Name = “xxx” 图层名称

B.         AutoLabel = true / false 自动标注

C.         Selectable = true / false 是否可选

D.        KeyField = “xx” 关键字段

E.         AddFeatureMapXLib.FeatureMapXLib.RowValuesClass)向图层中加入新要素

//把新生成的图层加入到mapControl中

MapXLib.Layer lyr = wMap.Layers.Add(mLayerInfo, 0);

lyr._Name = "灯";

// 控制图层是否自动标记。

lyr.AutoLabel = true;

//将 MapX 设置为识别用户何时单击此图层。

lyr.Selectable = true;

未完待续,接下篇

 
2008年10月28日 星期二 11:39

题记:介绍.NET环境下的MapX5.0如何进行空间查询,首先选中一个点,查询在一段距离内的信息。其中,地图控件为wMap,请确保当前工具为“选择”。

wMap.GeoSet = Application.StartupPath + "\\Data\\地图.gst";

wMap.CurrentTool = MapXLib.ToolConstants.miSelectTool;

源代码如下:

private void wMap_SelectionChanged(object sender, EventArgs e)

{

//设置查询的图层

MapXLib.Layer lyr = wMap.Layers._Item("图层名称");

//如果选择集中选中一个

if (lyr.Selection.Count == 1)

{

//确定图层表中的列(字段)名

lyr.KeyField = "字段名称";

//提取第一个点的X,Y坐标

double dblX = lyr.Selection._Item(1).CenterX;

double dblY = lyr.Selection._Item(1).CenterY;

//生成用于查询的中心点

MapXLib.Point p = new MapXLib.Point();

//将该点设为选中的点

p.Set(dblX, dblY);

//Features 集合对象表示在图层中查询结果对应的 Feature 对象集合

MapXLib.Features Feas = lyr.SearchWithinDistance(p, 10,MapXLib.MapUnitConstants.miUnitKilometer,MapXLib.SearchTypeConstants.miSearchTypeEntirelyWithin);

               

//对于查询结果的处理,循环装入datatable中

DataTable dt = new DataTable();

dt.Columns.Add("字段名称");

for (int i = 1; i <= Feas.Count; i++)

dt.Rows.Add(Feas._Item(i).KeyValue);

//将查询结果在datagrid中显示

dg.DataSource = dt;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值