mapx学习笔记资料手册.docx
《mapx学习笔记资料手册.docx》由会员分享,可在线阅读,更多相关《mapx学习笔记资料手册.docx(63页珍藏版)》请在冰豆网上搜索。
mapx学习笔记资料手册
MAPX学习使用笔记资料
Mapxtreme下面应该有三种图层
一种是固定图层当你新建一个固定图层的时候会生成*.tab等文件
一种是临时图层不生成*.tab文件
一种是用户绘制图层用户自己使用CDC(Graphics)进行绘图
如果你想对多边形进行编辑至少你要响应Mapxtreme的鼠标事件通过鼠标事件来确定当前用户在进行何种操作。
一般的过程是这样的:
1.新建一个图层(建议临时图层或者用户绘制图层)
2.根据多边形的点的位置绘制图元或者用CDC绘制过变形同时确定各个点在Mapxtreme地图窗口的位置建立各个点的鼠标响应区域
3.通过鼠标落下的时候通过各个点的响应区域判断那个点被选中鼠标移动和抬起时要做响应的处理来改变多边形选中点的位置重重新给多边形的点赋值
如果使用临时图层需要对临时图层里面的多边形图元的点参数进行更改如果是CDC绘图的话只要更改CDC绘图即可
整个过程中需要考虑到地图坐标与Mapxtreme窗口坐标之间的转化。
{通过对象编辑工具,用户可以在地图图层中创建和修改图元。
有四种标准的对象创建工具:
“添加
点”、“添加线条”、“添加折线”和“添加区域”。
注:
若要设置所使用的工具,请设置Map.CurrentTool属性。
对象编辑工具将新图元添加到在Layers.InsertionLayer属性中指定的任何图层中。
只能有一个插入图
层,并且默认情况下是没有插入图层。
在没有任何插入图层时将当前工具设置为对象创建工具将导致
错误。
MapX还支持对现有地图图元的修改。
若要编辑图元,则对于您要更改的任何图层,必须将
Layer.Editable属性设置为真。
然后,可以使用内置的“箭头”工具,在当前选择中移动图元或调整图
元的大小。
若要移动选定图元,只需单击并在选}
代码名称:
向已存在的图层中添加数据
作者/收集者:
xyz2004
开发环境:
MapX+Delphi
代码:
procedure TForm1.Button2Click(Sender:
TObject);
var
lyrnew:
CMapxLayer;
ds:
CMapxDataset;
rvs:
CMapxRowvalues;
rv:
CMapxRowvalue;
ptNew:
CMapXpoint;
ftrNew:
CmapXFeature;
begin
lyrNew :
= Map1.Layers.item
(1);
ds :
= Map1.Datasets.Add(miDataSetLayer, lyrNew,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);
//rvs :
= ds.Rowvalues[1].Clone ;
rv:
= CoRowvalue.Create;
rvs:
=CoRowvalues.Create;
rv.Dataset:
=ds;
rv.Field:
=ds.Fields.Item
(1); //假设mi表有两个字段,填充之
rv.value :
='item1';
rvs.Add(rv);
rv.Field:
=ds.Fields.Item
(2);
rv.value :
='item2';
rvs.Add(rv);
ptNew:
=CoPoint.Create;
ptNew.Set_(map1.centerx, map1.centery);
ftrNew :
= map1.FeatureFactory .CreateSymbol(ptNew,emptyparam);
ftrNew :
= lyrNew.AddFeature(ftrNew, rvs); // 图元+属性,即feature+Rowvalues
//ftrNew = lyrNew.AddFeature(ftrNew);
//ftrNew.Update (True, rvs);
end.
代码名称:
在MapX中实现图元闪烁原码
作者/收集者:
zlx
开发环境:
Delphi+MapX
代码:
MapX图元分三种类型:
1、线(Line),即miFeatureTypeLine
2、区域(Region),即miFeatureTypeRegion
3、点符号(Symbol),即miFeatureTypeSymbol
加入一个时钟控件,并在时钟控件中实现以下代码:
procedure TMapFrm.tmFlashSelectTimer(Sender:
TObject);
var
ft:
CMapXFindFeature;
lyr:
CMapXLayer;
bExist:
Boolean;
i:
Integer;
str:
String;
ds:
CMapXDataset;
begin
bExist :
= False;
for i :
= 1 to mapCity.Layers.Count do
begin
if mapCity.Layers.Item[i].Name = m_strSelLyr then
begin
bExist :
= True;
break;
end;
end;
if not bExist then
begin
tmFlashSelect.Enabled :
= False;
MsgFrm :
= TMsgFrm.Create(Self);
MsgFrm.m_strMsg :
= Format('图层[%s]信息不存在!
',[m_strSelLyr]);
MsgFrm.ShowModal;
MsgFrm.Free;
Exit;
end;
lyr :
= mapCity.Layers._Item(m_strSelLyr);
ds :
= mapCity.Datasets.Add(miDataSetLayer, lyr ,EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
lyr.Find.FindDataset :
= ds;
lyr.Find.FindField :
= ds.Fields.Item[1];
str :
= Format('%d',[m_nSelID]);
ft :
= lyr.Find.Search(str,EmptyParam);
if ft.FindRC mod 10 <> 1 then
begin
tmFlashSelect.Enabled :
= False;
MsgFrm :
= TMsgFrm.Create(Self);
MsgFrm.m_strMsg :
= Format('单位点[%s]信息不存在!
',[m_strCorpName]);
MsgFrm.ShowModal;
MsgFrm.Free;
Exit;
end;
case ft.type_ of
miFeatureTypeLine:
begin
if ft.Style.LineColor = miColorWhite then
ft.Style.LineColor :
= miColorRed
else
ft.Style.LineColor :
= miColorWhite;
end;
miFeatureTypeRegion:
begin
if ft.Style.RegionColor = miColorGreen then
ft.Style.RegionColor :
= miColorRed
else
ft.Style.RegionColor :
= miColorGreen;
end;
miFeatureTypeSymbol:
begin
if not m_bFlashSel then
lyr.Selection.Replace(ft)
else
lyr.Selection.ClearSelection;
m_bFlashSel :
= not m_bFlashSel;
end;
end;
ft.Update(EmptyParam, EmptyParam);
if not m_bCenter then
begin
m_bCenter :
= True;
mapCity.CenterX :
= ft.CenterX;
mapCity.CenterY :
= ft.CenterY;
mapCity.Refresh;
end;
end;
我这里是把选中的图元实现闪烁,并把图元居中
实现图元闪烁的另一个方法:
假设图元原大小是20,改变后大小是15
if ft.Style.SymbolBitmapSize=20 then
ft.Style.SymbolBitmapSize:
=15
else
ft.Style.SymbolBitmapSize:
=20;
ft.Update(EmptyParam, EmptyParam);
ft是symbol类型的
代码名称:
画多边形、直线
1,画多边形,画线
procedureTForm1.Map1PolyToolUsed(Sender:
TObject;ToolNum:
Smallint;Flags:
Integer;constPoints:
IDispatch;
bShift,bCtrl:
WordBool;varEnableDefault:
WordBool);
var
Style:
CMapXStyle;
f:
CMapXFeature;
begin
caseFlagsof
miPolyToolBegin:
;{某些用户开始使用PolyTool..}
miPolyToolEnd:
{用户通过双击完成PolyTool的使用}
ifToolNum=MY_POLYGON_TOOLthen
begin
{它们使用MY_POLYGON_TOOL!
制作新的区域图元并将其添加到第一个图层}
Style:
=Map1.DefaultStyle.Clone;
Style.RegionPattern:
=miPatternSolid;
Style.RegionColor:
=255;
Style.RegionBorderColor:
=0;
Style.RegionBorderWidth:
=2;
Style.RegionBorderStyle:
=1;
{使用由事件为我提供的点。
MapX自动关闭打开的多边形,因此我无需担心!
}
f:
=Map1.FeatureFactory.CreateRegion(Points,Style);
Map1.Layers.Item('TempLayer').AddFeature(f,EmptyParam);
end
elseifToolNum=MY_POLYLINE_TOOLthen
begin
{它们使用MY_POLYLINE_TOOL!
制作新的线图元并将其添加到第一个图层}
Style:
=Map1.DefaultStyle.Clone;
Style.LineStyle:
=1;
Style.LineColor:
=255;
Style.LineWidth:
=2;
{使用由事件为我提供的点}
f:
=Map1.FeatureFactory.CreateLine(Points,Style);
Map1.Layers.Item('TempLayer').AddFeature(f,EmptyParam);
end;
miPolyToolEndEscaped:
;{用户按下了Esc或退格键删除所有节点...不要再添加任何东西。
}
end;
end;
//////////////////////////////
2.画折线和多边形(并没有考虑属性数据的录入)
procedureTForm1.Map1PolyToolUsed(Sender:
TObject;ToolNum:
Smallint;Flags:
Integer;constPoints:
IDispatch;
bShift,bCtrl:
WordBool;varEnableDefault:
WordBool);
var
Style:
CMapXStyle;
f:
CMapXFeature;
begin
caseFlagsof
miPolyToolBegin:
;{某些用户开始使用PolyTool..}
miPolyToolEnd:
{用户通过双击完成PolyTool的使用}
ifToolNum=MY_POLYGON_TOOLthen
begin
{它们使用MY_POLYGON_TOOL!
制作新的区域图元并将其添加到第一个图层}
Style:
=Map1.DefaultStyle.Clone;
Style.RegionPattern:
=miPatternSolid;
Style.RegionColor:
=255;
Style.RegionBorderColor:
=0;
Style.RegionBorderWidth:
=2;
Style.RegionBorderStyle:
=1;
{使用由事件为我提供的点。
MapX自动关闭打开的多边形,因此我无需担心!
}
f:
=Map1.FeatureFactory.CreateRegion(Points,Style);
Map1.Layers.Item('TempLayer').AddFeature(f,EmptyParam);
end
elseifToolNum=MY_POLYLINE_TOOLthen
begin
{它们使用MY_POLYLINE_TOOL!
制作新的线图元并将其添加到第一个图层}
Style:
=Map1.DefaultStyle.Clone;
Style.LineStyle:
=1;
Style.LineColor:
=255;
Style.LineWidth:
=2;
{使用由事件为我提供的点}
f:
=Map1.FeatureFactory.CreateLine(Points,Style);
Map1.Layers.Item('TempLayer').AddFeature(f,EmptyParam);
end;
miPolyToolEndEscaped:
;{用户按下了Esc或退格键删除所有节点...不要再添加任何东西。
}
end;
end;
用DELPHI开发”MapInfoMapX“
分类:
学习笔记
2007.11.1315:
41作者:
xboshi82|评论:
0|阅读:
2618
MapInfoMapX是一个用来做地图化工作的OCX控件,
首先是简介
是mapinfo4.0以后才有的
MapX是一个OCX组件,可以被快速集成到使用VisualBasic、PowerBuilder、Delphi、VisualC++或其他面向对象的语言的客户端应用程序以及使用LotusScript的LotusNotes(v4.5)中。
开发人员可以在他们熟悉的环境中工作,最终用户可以通过他们熟悉的应用程序来访问地图数据。
MapX的功能
MapX不仅仅是一个“地图浏览器”。
通过MapX,可以分析并直观地显示业务数据,创建或编辑地图图元,并按地理位置显示数据结果。
1、专题制图-使用专题制图显现数据。
联合数据和地图中的每个图元,并在地图中用颜色编码(或其他样式)来表示数据。
可使用六种不同的样式来观察数据(色彩范围、点密度、独立值、等级符号、饼图、直方图)。
2、逐层细化制图-可以通过简单的定点和单击来浏览数据,在OLAPS环境下,可以允许用户通过定点和单击逐层细化地图的某个区域。
3、数据绑定-地图可合并来自嵌套OCX的容器、ODBC或DAO数据源(例如MSAccess)的数据。
MapX提供多种不同类型数据的绑定,包括邮政编码级别的地理编码。
4、注释-可以提供定位、高亮显示特定数据的功能,通过添加文本、符号和标注来使您的地图信息变得更加丰富。
5、图层化-显示和控制地图图层的显示,让它只在地图的缩放比例符合事先调整的距离时才显示。
还可以使用或创建无缝地图图层,它可以把一组基表看作一个整体。
特殊图层类型可以支持特殊类型的应用,如动态图层(用于实时跟踪)和用户描绘图层(用于描绘特殊的地图元素,如地图上方的标志)。
6、栅格图像-用一幅放在底层的栅格图像作为地图背景,使您的地图更生动、更详细。
目前,主要是配合卫星行片,使地图更加逼真
7、自动标注-自动向地图添加标注,同时控制其属性及显示。
8、选择-通过分组和组织数据,发挥MapX的分析特性。
即在一个指定的半径、矩形区域或指定点的范围内选择地图图元。
图元工厂-FeatureFactory对象使您得以创建、合并和缓冲区或擦除点、线和区域图元。
工具-用户可以通过单击和拖动直接与地图交互。
通过MapX内置的导航、选择和标注工具或自定义工具来对地图进行操作。
地图编辑-可以让用户在地图上添加、修改或删除图元。
投影和坐标系-MapX对地图坐标系和投影的完全支持使您可以更精确地调整地图的显示并在自己的坐标系中处理X-Y数据。
9、远程空间服务器连接-可以连接运行在Oracle8.0.5、Informix或其他所支持的数据库上的Oracle8iSpatial和MapInfoSpatialWare上存储的真实数据。
为集中管理和安全起见,空间服务器允许公司在企业数据库中主持他们的地图数据。
象SpatialWare和Oracle8iSpatial之类的空间服务器还提供高级查询处理功能,并增加了用于处理组织机构的空间数据的服务器性能。
在一个RDBMS中存储空间数据对于需要进行大量地图编辑和处理大型数据集的应用程序也是必要的。
但需要说明的是,mapinfo公司有专门用于web的maoxtrem
安装MapX
因为MapX是32位OCX,所以它需要一个32位版本的Windows(Windows95/98或WindowsNT4.0)。
MapX应用程序不能在Windows3.1中运行。
下面讲组织数据和地图
要使用MapX,需要有您的记录和MapInfo地图文件。
MapX以MapInfo表的形式组织所有潜在信息。
每个表都是一组用来在地图中创建图层的MapInfo文件。
文件如何组成表?
所有的MapInfo表都会拥有下列文件:
<文件名>.tab:
描述MapInfo表的结构。
它是描述包含数据的文件的格式的小文本文件。
<文件名>.dat:
(.mdb、.aid或.dbf):
这些文件含有表格格式数据。
<文件名>.map:
描述图形对象(如果表没有地图对象则不存在该文件)。
<文件名>.id:
是链接对象和数据的交叉引用文件(如果表没有地图对象则不存在该文件)。
<文件名>.ind:
索引文件。
索引文件允许使用Find对象来查找地图对象。
不熟悉,就讲一下MapInfo表和MapX图层
每个可用地图表示的MapInfo表都能在地图上作为图层显示。
例如,您可以显示客户表、街道表以及县边界表。
图层是透明的,而每一层都包含了地图的不同部分。
这些图层是一层层叠加,这样您就可以看到整个地图信息。
什么是GeoSets?
Geoset保存了地图图层的集合以及一些对您来说简单易用的设置。
其名称的由来是因为Geosets是由一些表示同一地理区域的以标准MapInfo格式出现的地图文件(.tab)组成的数据集。
当您希望将多个图层作为示例地图使用时,会发现单独打开和显示多个图层是件多么费时的工作,Geoset使您避免这样的情况。
Geoset的扩展名是.gst。
.gst文件是文本文件,它包含若干用来告诉MapX显示什么表以及如何显示的元数据键值。
当打开Geoset时,它自动打开所有包括在Geoset中的文件并默认显示。
开发者可以更改“默认显示”来迎合自己的需要。
Geoset设置包括投影、默认缩放值,对象的自动标注,缩放范围以及打开的表是否可见。
MapX也可以打开开发者指定的任意单个(.tab)地图文件。
使用Geoset非常方便,无需MapX就能运行。
MapX将不会打开MapInfo工作空间(.wor文件类型)。
但在地图的组织上相当于MapInfo工作空间
第三个概念:
地图图元
以上是入门
下面讲的也是基础性的
Map对象
下列图表是MapX对象体系的局部,您可以看到Map对象存在于最顶端。
每个MapX的对象、属性和方法都衍生于Map对象。
每个在Map对象之下的属性和方法都会对生成整个Map对象有所影响。
主要是由DataSets、Layers和Annotations对象定义每一个Map对象。
下表显示了一些由数值表示的Map对象属性。
可以在“设计时”改变这些属性,也可以在“运行时”使用以下代码示例来更改。
属性 描述 代码示例
Zoom 设置在地图中显示的英里(默认的距离单位)数。
Map1.Zoom=500
Rotation 对地图旋转指定的度数 Map1.Rotation=179
CenterX 设置x和y坐标,它们可能代表经纬度。
这是由地图的投影来决定的。
Map1.CenterX=-79.4458
CenterY 设置x和y坐标,它们可能代表经纬度。
这是由地图的投影来决定的。
Map1.CenterY=44.9932
显示不正常
Zoom 设置在地图中显示的英里(默认的距离单位)数。
Map1.Zoom=500
Rotation 对地图旋转指定的度数 Map1.Rotation=179
CenterX 设置x和y坐标,它们可能代表经纬度。
这是由地图的投影来决定的。
Map1.CenterX=-79.4458
CenterY 设置x和y坐标,它们可能代表经纬度。
这是由地图的投影来决定的。
Map1.CenterY=44.9932
用Map对象,可以通过操纵地图的几个方法和属性来控制地图如何来显示。
有一些属性是由其他对象来表示的。
例如,当您看到MapX地图时,也就是看到单独图层的集合,它是由Layers集合来表示的。
Layers集合是Map对象的属性。
现在让我们来看一看如何改变地图的属性。
属性页允许我们操作Map对象的多个属性。
上面是属性页,