请教关于在MapX怎样根据外部数据画图的问题 ( 积分: 200 )

  • 主题发起人 felong11
  • 开始时间
F

felong11

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有一个外部的access表上面有
[名称] [ID] [经度] [纬度] [其他] 等字段
需要在mapx中画点,还需要把这个结果存起来(成为tab)不知道该怎么做
我搜索了一下以前的帖子 好像没有一套的解决方案
1.我看到了一个用bindlayer(数据绑定的方法?)生成 xy
但是我老是不成功
不知道是数据源 没有搞好还是怎么样。
2.还有一个infolayer的

特向各位富翁请教。希望能给出一些方法代码,谢谢!
至于出错代码就不贴了,我比较菜!
 
我现在有一个外部的access表上面有
[名称] [ID] [经度] [纬度] [其他] 等字段
需要在mapx中画点,还需要把这个结果存起来(成为tab)不知道该怎么做
我搜索了一下以前的帖子 好像没有一套的解决方案
1.我看到了一个用bindlayer(数据绑定的方法?)生成 xy
但是我老是不成功
不知道是数据源 没有搞好还是怎么样。
2.还有一个infolayer的

特向各位富翁请教。希望能给出一些方法代码,谢谢!
至于出错代码就不贴了,我比较菜!
 
Mark 一下
 
斑竹在吗?
 
你可以先创建你想用来保存数据的永久性图层,当然包括其中你说的字段,名称,id,其他等等,经纬度可以不必创建字段。然后,就是一般的连接数据库,循环取出你所需要的每条数据,然后把每条记录写入你创建的永久图层即可。加我qq(185597150),给你个我以前写的代码。
 
算了,还是贴两个函数给你吧就可以实现你的功能了。
//*******************************************//
// Description : 创建在客户端用户保存设置区域的文件
// mapControl : the mapx
// return : nil
// Author : HaoGui0
// Date : 2004_02_17
//*******************************************//
procedure CreateUserAreaTable(mapControl : TMap);
var
lyrInfo : LayerInfo;
flds : Fields;
fileName:string;
pTemp :pchar;
begin

try
flds := CoFields.Create;
with fldsdo

begin

AddIntegerField(AREA_INDEX,true);
// 第一个字段 (编号)
AddStringField(AREA_NAME, AREA_NAME_LENGTH,FALSE);
// 第二个字段 (名称)
AddStringField(AREA_TYPE,AREA_TYPE_LENGHT,FALSE);
// 第三个字段 (类型)
AddStringField(AREA_CREATETIME,AREA_CREATETIME_LENGTH,FALSE);
// 第四个字段 (创建时间)
end;


lyrInfo := CoLayerInfo.Create;
lyrInfo.type_:=miLayerInfoTypeNewTable;

fileName := InitData.GetAppPath() + TABLE_PATH + AREA_TABLE_NAME + TABLE_TYPE;

lyrInfo.AddParameter('FileSpec',fileName);
lyrInfo.AddParameter('Name',AREA_TABLE_NAME);
lyrInfo.AddParameter('Fields',flds);
mapControl.Layers.Add(lyrInfo,EmptyParam);
except on e : Exceptiondo

begin

ShowMessage(e.Message);
InitData.WriteErrorToLog(ERRORMSG_MAPX_CREATE_AREAFILE + #9 + 'CreateUserAreaTable()',m_strUID);
end;

end;


end;


//*******************************************//
// Description : 把用户自定义的区域以及字段信息保存在.tab中
// X1,Y1,X2,Y2 : 区域的位置
// return : nil
// Author : HaoGui0
// Date : 2004_02_19
//*******************************************//
procedure UserAddRectToTab(const X1,Y1,X2,Y2 :do
uble);
var
mapx : TMap;
ftrTemp,ftr : Feature;
lyrAreaTab : Layer;
bCreateFlag,bFlay : Boolean;
strInput : String;
ds : CMapXDataset;
rvs : CMapXRowValues;
iRvCount : Integer;
rect : CMapXRectangle;
style : CMapXStyle;
begin

{$IFDEF SLAVECENTER}
try
bCreateFlag := true;
strInput := '';
ftrTemp := DrawRect(gpsClient.Map1,m_TempLyrMain,X1,Y1,X2,Y2,miPatternDiagCross,BODERCOLOR_MAIN_REGION,BODERWIDTH_MAIN_REGION);
mapx := gpsClient.Map1;
lyrAreaTab := mapx.Layers.Item[AREA_TABLE_NAME];
if JudgeInterset(ftrTemp,mapx,lyrAreaTab) then

begin

if (MessageBox(0,pchar('区域相交,选择确定出现车辆同时处于多个区域时以前边的区域优先!!'),
pchar('提示'),MB_OKCANCEL) = IDCANCEL) then

begin

bCreateFlag := false;
end;

end;


if bCreateFlag then

begin

bFlay:=false;
{调用输入区域名称对话框,如确定则写入到fields中,否则取消;}
while (true)do

begin

bFlay:=InputQuery('区域名称', '区域名称', strInput);
if (bFlay) and (strInput<>'') then

begin

if InitData.FindNameFromMapAreaStruct(strInput) then
{如果此名字还不存在}
begin

break;
end else

begin

MessageBox(0,'以前已经存在这个名字,请重新输入','提示!',MB_OKCANCEL);
end;

end;


if not bFlay then

break;
end;

// end While

if bFlay then

begin

ds:= mapx.DataSets.Add( miDataSetLayer,lyrAreaTab,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, {把各个字段信息写到图层中。}
EmptyParam, EmptyParam);
iRvCount := ds.RowCount;
rvs:=ds.RowValues[0];
rvs.Item[AREA_INDEX].Value:= iRvCount + 1;
{工地编号字段 }
rvs.Item[AREA_NAME].Value:= strInput
{ 工地名称字段}

rect := CoRectangle.Create;
rect.Set_(X1,Y1,X2,Y2);
style:= CoStyle.Create;
style.RegionPattern := miPatternDiagCross;
style.RegionBorderColor := BODERCOLOR_MAIN_REGION;
style.RegionColor := BODERCOLOR_MAIN_REGION;
style.RegionBorderWidth := BODERWIDTH_MAIN_REGION;
style.RegionTransparent :=true;

ftr:=mapx.FeatureFactory.CreateRegion(rect,style);
lyrAreaTab.AddFeature(ftr,rvs);
inc(g_iAreaCount);
GetAllAreaInfo(mapx);
gpsClient.InitGroupCarsTree();
gpsClient.InsertCarsIntoTree();
end;

// end if bFlay
end;

// end if bCreateFlag
m_TempLyrMain.DeleteFeature(ftrTemp);
{ 删除在临时图层上的Rect;}
except on e : Exceptiondo

begin

ShowMessage(e.Message);
InitData.WriteErrorToLog(ERRORMSG_MAPX_USERAREA_TOTAB + #9 + 'UserAddRectToTab()',m_strUID);
end;

end;

{$ENDIF}
end;


ok 分来。。呵呵。
 
谢谢haogui0我回去试试看
顺便问1下,在mapinfo里面的连接到dbms怎么不能创建点。
 
谢谢haogui0!
 
顶部