本文转载自hi.baidu.com/redpanda/blog/category/Mapx/index/1
mapX - 基本操作(1)
1、使用自定义图标
在绘制地图的过程中,必然会用到我们自定义的图标作为标注信息。操作步骤如下:
(1)把图片拷贝到mapX的安装目录下的CUSTSYMB目录下面。mapx对象在加载的时候,会从这个目录里面载入图片,但是如果只是使用mapinfo来绘制地图的话,就不需要拷贝到这个目录里。
(2)把图片拷贝到C:/Documents and Settings/Administrator/Application Data/MapInfo/MapInfo/Professional/950/CustSymb 。只要安装了mapinfo950,就有这个目录。
注:对图片格式有严格的要求: (1)必须是bmp格式的。 (2)如果要mapX加载的话,图片位深度为 4或者8(3)如果想要图片背景是透明的,就需要保证图片的背景色是纯白的。
至于怎么制作这样的图片,在下一篇文章中会补充。
(3)如果是在mapinfo中直接绘制地图,操作如下:
打开mapinfo9.5,打开要编辑的图层,并置成可编辑状态。在右边的 drawing 工具条中选择工具 “”,在弹出的“Symbol style”选择框中,Font 选择“Custom Symbols”,在Symbol 中选择你要使用的图片。如果你在symbol中没有发现你要找的图片,可能图片还没有加进去,就点击“reload”按钮,重载一下。 其他选项默认就可以啦。选定之后点击“OK”。在drawing 工具条中选择工具“”,再点击地图,就可以进行标注了。
(4)如果要在程序中编程实现,代码如下
编码情景是,有一个gst文件:myGst.gst,在程序里面有一个TMap对象:mMap,加载myGst.gst.这个gst文件有两层,一层是底图层:myMap.tab,一层是水源层water.tab。我要在水源层上添加水滴图标,即鼠标点在地图上,在鼠标点击的位置就标注一个水滴,水滴的图片已经拷贝到指定的位置,图片名字为water.bmp。
添加水滴部分的代码如下,写成了一个函数,这个函数就是在mX,mY的位置标注图元。
///@desc: 添加图元到指定的层
///@param: mMap:地图对象
/// mLayerName: 要插入图元的层名字
/// mPicName: 图片的名字
/// mX,mY:图元显示的位置(经纬度坐标)
///time: 2010-01-26
/// @ author:csdancyz@163.com
procedure addBitMap(mMap:TMap; mLayerName:string;mPicName:String; mX,mY:Double);
var
pnt : mapxlib_tlb.point;
lyr : mapxlib_tlb.layer;
bitmapStyle : mapxlib_tlb.style;
feafrc : mapxlib_tlb.featurefactory;
ftr : mapxlib_tlb.feature;
begin
assert((mMap <> nil) or (mLayerName <> '') or (mPicName <> ''));
//位图图元的样式
bitmapStyle := CoStyle.Create ;
bitmapStyle.SymbolType := miSymbolTypeBitmap;
bitmapStyle.SymbolBitmapName := mPicName;
bitmapStyle.SymbolBitmapTransparent := true;
bitmapStyle.SymbolBitmapSize := 14
//选中图层,置为可编辑
lyr := mMap.Layers.Item[mLayerName];
lyr.Editable := true;
//创建点对象
pnt :=copoint.Create;
pnt.Set_(mX,mY);
//创建Feature对象并添加到图层
feafrc := mMap.FeatureFactory ;
ftr :=feafrc.CreateSymbol(pnt,bitmapstyle);
lyr.AddFeature(ftr,emptyparam);
lyr.refresh;
end;
在这个情景中,调用的语句为:
//其中mapX,mapY是鼠标的地图位置,由屏幕坐标转换成了地图坐标
addBitMap(mMap,mMap.Layers.Item[‘water’] ,’water.bmp’, mapX,mapY);