⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapxcontainer.pas

📁 此代码是关于mapgis的在
💻 PAS
📖 第 1 页 / 共 5 页
字号:
end;

function TMapManager.GetCurrentToolObject: TBaseMapTool;
var
  aTempTool:TBaseMapTool;
begin
  Result:=nil;
  aTempTool:=SysTools.CurrentToolObject;
  if (aTempTool<>nil)and(MapX.CurrentTool=aTempTool.ToolId) then
  begin
    Result:=aTempTool;
    Exit;
  end;
  aTempTool:=UserTools.CurrentToolObject;
  if (aTempTool<>nil)and(MapX.CurrentTool=aTempTool.ToolId) then
    Result:=aTempTool;
end;

function TMapManager.GetSingleSelectedLayer: CMapXLayer;
var
  i:Integer;
  Count:Integer;
  TempLayer:CMapXLayer;
begin
  TempLayer:=nil;
  Count:=0;
  for i:=1 to MapX.Layers.Count do
  begin
    if MapX.Layers.Item[i].Selection.Count>0 then
    begin
      TempLayer:=MapX.Layers.Item[i];
      Inc(Count);
    end;
    if Count>1 then Break;
  end;
  if Count=1 then
    Result:=TempLayer
  else
    Result:=nil;
end;

function TMapManager.Copy:Boolean;
var
  ALyr:Layer;
begin
  Result:=False;
  ALyr:=GetFirstSelectLayer;
  if (ALyr=nil)or(ALyr.Selection.Count=0) then Exit;
  CopyFts:=ALyr.NoFeatures;
  CopyFts.Add(ALyr.Selection.Clone);
  Result:=True;
end;

function TMapManager.GetFirstSelectLayer: CMapXLayer;
var
  i:Integer;
begin
  Result:=nil;
  for i:=1 to MapX.Layers.Count do
    if MapX.Layers.Item[i].Selection.Count>0 then
    begin
      Result:=MapX.Layers.Item[i];
      Exit;
    end;
end;

procedure TMapManager.DoBeforeSelectionDeleted(ASender: TObject;
  EditLayer: CMapXLayer);
var
  i:Integer;
  pProc:TMapXSelectionDeleted;
begin
  for i:=0 to FSelectionDeletedEventProces.Count-1 do
  begin
    pProc:=TMapXSelectionDeleted(FSelectionDeletedEventProces.Items[i].Method);
    pProc(ASender, EditLayer);
  end;
end;

{ TFeatureClass }

constructor TFeatureClass.Create;
begin
  inherited Create;
  FFields:=TMapFieldList.Create;
  FFeatureList:=TBusinessFeatureList.Create;
  FParams:=TStringList.Create;
end;

destructor TFeatureClass.Destroy;
begin
  FFields.Free;
  FFeatureList.Free;
  FParams.Free;
  inherited Destroy;
end;

procedure TFeatureClass.LoadFromStream(Stream: TStream);
begin
  FeatureClassName:=ReadString(Stream);
  TableStructCanChanged:=ReadBoolean(Stream);
  FeatureListCanChanged:=ReadBoolean(Stream);
  Script:=ReadString(Stream);
  FFields.LoadFromStream(Stream);
  FFeatureList.LoadFromStream(Stream);
  ReadMemo(Stream, FParams);
end;

procedure TFeatureClass.SaveToStream(Stream: TStream);
begin
  WriteString(Stream, FeatureClassName);
  WriteBoolean(Stream, TableStructCanChanged);
  WriteBoolean(Stream, FeatureListCanChanged);
  WriteString(Stream, Script);  
  FFields.SaveToStream(Stream);
  FFeatureList.SaveToStream(Stream);
  WriteMemo(Stream, FParams);
end;

constructor TFeatureClassList.Create;
begin
  FList:=TList.Create;
end;

destructor TFeatureClassList.Destroy;
begin
  Clear;
  FList.Free;
  inherited Destroy;
end;

function TFeatureClassList.GetItemCount:Integer;
begin
  Result:=FList.Count;
end;

function TFeatureClassList.GetItem(Index:Integer):TFeatureClass;
begin
  Result:=FList.Items[Index];
end;

procedure TFeatureClassList.Add(Value:TFeatureClass);
begin
 FList.Add(Value);
end;

function TFeatureClassList.Add:TFeatureClass;
begin
 Result:=TFeatureClass.Create;
 Add(Result);
end;

procedure TFeatureClassList.Insert(const Index:Integer;Value:TFeatureClass);
begin
  FList.Insert(Index,Value);
end;

function TFeatureClassList.Insert(const Index:Integer):TFeatureClass;
begin
  Result:=TFeatureClass.Create;
  FList.Insert(Index,Result);
end;

procedure TFeatureClassList.Delete(const Index:Integer);
begin
  TFeatureClass(FList.Items[Index]).Free;
  FList.Delete(Index);
end;

procedure TFeatureClassList.Clear;
var
  i:Integer;
begin
  for i:=0 to FList.Count-1 do
    TFeatureClass(FList.Items[i]).Free;
  FList.Clear;
end;

procedure TFeatureClassList.LoadFromStream(Stream:TStream);
var
  i:Integer;
  myCount:Integer;
  AObj:TFeatureClass;
begin
  Clear;
  myCount:=ReadInteger(Stream);
  for i:=0 to myCount-1 do
  begin
    AObj:=Add;
    AObj.LoadFromStream(Stream);
  end;
end;

procedure TFeatureClassList.SaveToStream(Stream:TStream);
var
  i:Integer;
  AObj:TFeatureClass;
begin
  WriteInteger(Stream, FList.Count);
  for i:=0 to FList.Count-1 do
  begin
    AObj:=Items[i];
    AObj.SaveToStream(Stream);
  end;
end;

{ TLayersManager }

function TLayersManager.CreateUserDrawLayer(
  const LayerName: string): CMapXLayer;
begin
  Result:=MapX.Layers.AddUserDrawLayer(LayerName, 1);  
end;

function TLayersManager.CreateDefaultTempLayer(
  const LayerName: string; const Index:Integer): CMapXLayer;
var
  Position:OleVariant;
begin
  if Index=-1 then
    Position:=MapX.Layers.Count+1
  else
    Position:=Index;
  Result:=MapX.Layers.CreateLayer(LayerName, EmptyParam,Position,EmptyParam, EmptyParam);
  Result.Editable:=True;
end;

function TLayersManager.FindByName(const LayerName: string): CMapXLayer;
var
  Index:Integer;
begin
  Result:=nil;
  Index:=IndexByName(LayerName);
  if Index>-1 then
    Result:=MapX.Layers.Item[Index];
end;

function TLayersManager.GetActiveLayer: CMapXLayer;
begin
  Result:=MapX.Layers.AnimationLayer;
end;

procedure TLayersManager.GetLayerNames(List: TStrings);
var
  i:Integer;
begin
  List.Clear;
  for i:=1 to MapX.Layers.Count do
    List.Add(MapX.Layers.Item[i].Name);
end;

function TLayersManager.IndexByName(const LayerName: string): Integer;
var
  i:Integer;
begin
  Result:=-1;
  for i:=1 to MapX.Layers.Count do
    if CompareText(MapX.Layers.Item[i].Name, LayerName)=0 then
    begin
      Result:=i;
      Exit;
    end;
end;

function TLayersManager.CreateLayerFromFile(const LayerName, FileName: string;
  const Index:Integer; const bAddData:Boolean):CMapXLayer;
var
  Position:OleVariant;
begin
  if Index=-1 then
    Position:=MapX.Layers.Count+1
  else
    Position:=Index;
  Result:=MapX.Layers.Add(FileName,Position);
  Result.Name:=LayerName;
  if bAddData then
    MapX.Datasets.Add(miDataSetLayer, Result, Result.Name,
                      EmptyParam, EmptyParam, EmptyParam,
                      EmptyParam, EmptyParam);
end;

procedure TLayersManager.CreateLayersFromFiles(List: TStrings;
  const FromIndex:Integer; const bAddData:Boolean);
var
  i:Integer;
  Position:OleVariant;
  ALyr:Layer;
begin
  if FromIndex=-1 then
    Position:=MapX.Layers.Count+1
  else
    Position:=FromIndex;
  for i:=0 to List.Count-1 do
  begin
    ALyr:=MapX.Layers.Add(List.Strings[i],Position+i);
    if bAddData then
      MapX.Datasets.Add(miDataSetLayer, ALyr, ALyr.Name,
                        EmptyParam, EmptyParam, EmptyParam,
                        EmptyParam, EmptyParam);
  end;
end;

procedure TLayersManager.Merge(const LayerIndexes: string);
begin

end;

procedure TLayersManager.Move(const FromIndex, ToIndex: Integer);
begin
  MapX.Layers.Move(FromIndex, ToIndex);
end;

procedure TLayersManager.MoveToBottom(const Index: Integer);
begin
  MapX.Layers.Move(Index, MapX.Layers.Count);
end;

procedure TLayersManager.MoveToTop(const Index: Integer);
begin
  MapX.Layers.Move(Index, 1);
end;

procedure TLayersManager.Pack(const PackType:Integer);
var
  i: Integer;
begin
  for i := 1 to MapX.Layers.Count do
    MapX.Layers[i].Pack(PackType);
end;

procedure TLayersManager.Remove(const Index: Integer);
begin
  MapX.Layers.Remove(Index);
end;

procedure TLayersManager.RemoveAll;
begin
  MapX.Layers.RemoveAll;
end;

procedure TLayersManager.RemoveByName(const LayerName: string);
var
  i:Integer;
begin
  for i:=MapX.Layers.Count downto 1 do
  begin
    if CompareText(MapX.Layers.Item[i].Name, LayerName)=0 then
      MapX.Layers.Remove(i);
  end;
end;

procedure TLayersManager.SetActiveLayer(const Value: CMapXLayer);
begin
  MapX.Layers.AnimationLayer:=Value;
end;

function TLayersManager.CreateSymbolLayerFromDataSet(const LayerName,
  DataSetName, XFieldName, YFieldName, KeyFieldName, TabFileName: string;
  DS:TCustomADODataSet): CMapXLayer;
var
  oBLayer : BindLayer;
  MapDS:DataSet;
begin
  if FileExists(TabFileName) then
    DeleteFile(TabFileName);
  if not DS.Active then
    raise Exception.Create('系统基础表没有打开!');
  if DS.FindField(XFieldName)=nil then
    raise Exception.Create('横坐标字段不存在!');
  if DS.FindField(YFieldName)=nil then
    raise Exception.Create('纵坐标字段不存在!');
  if DS.FindField(KeyFieldName)=nil then
    raise Exception.Create('编号字段不存在!');
  //创建BindLayer//
  oBLayer := coBindLayer.Create;
  oBLayer.LayerName := LayerName;
  oBLayer.FileSpec := TabFileName; 
  oBLayer.LayerType := miBindLayerTypeXY;//必须使用这个参数才能绑定XY坐标
  oBLayer.RefColumn1 := XFieldName;//横坐标
  oBLayer.RefColumn2 := YFieldName;//纵坐标
  //添加数据集//
  MapDS:=MapX.Datasets.Add(miDataSetADO,//数据集类型,这是miDataSetADO,即ADO专用的
                           DS.Recordset,//使用这个方法获得ADO中的_Recordset类型
                           DataSetName,//数据集名称
                           KeyFieldName,//传入的是Xunit表中的字段ID的名称
                           EmptyParam,
                           oBLayer,//BindLayer
                           EmptyParam,
                           EmptyParam);
end;

function TLayersManager.CreateCustomTableLayer(const LayerName,
  FilePath: string; MapFields: TMapFieldList; const Index:Integer;
  const bAddData:Boolean): CMapXLayer;
var
  LyrInfo:LayerInfo;
  Flds:Fields;
  FileName:string;
  Position:OleVariant;
begin
  FileName:=FilePath+'\'+LayerName+'.TAB';
  if FileExists(FileName) then DeleteFile(FileName);
  if Index=-1 then
    Position:=MapX.Layers.Count+1
  else
    Position:=Index;
  LyrInfo:=CoLayerInfo.Create;
  Flds:=CoFields.Create;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -