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

📄 unitshellapis.~pas

📁 此代码是关于mapgis的在
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
      if TLayerTreeNodeRecord(ANode.Data).FtClassType=FtClassType then
      begin
        Result:=MyGIS.GMapTools.MapX.Layers.Item[i];
        LayerNode:=ANode;
        Exit;
      end;
  end;
end;

procedure MoveLayer(MapX:TMapXObject; const FromIndex, ToIndex: Integer);
var
  SNode, DNode:TTreeNode;
  iState_SNode, iState_DNode:Integer;
begin
  MapX.Layers.Move(FromIndex, ToIndex);
  SNode:=FindLayerNode(FromIndex);
  DNode:=FindLayerNode(ToIndex);
  iState_SNode:=SNode.StateIndex;
  iState_DNode:=DNode.StateIndex;
  SNode.MoveTo(DNode, naInsert);
  DNode.StateIndex:=-1;
  SNode.StateIndex:=-1;
  DNode.StateIndex:=iState_DNode;
  SNode.StateIndex:=iState_SNode;
end;

procedure SetLayerVisible(MapX:TMapXObject; 
  const Index: Integer; const Visible:Boolean);
var
  ANode:TTreeNode;
  iState:Integer;
  aLyr:Layer;
begin
  ANode:=FindLayerNode(Index);
  aLyr:=MyGIS.GMapTools.m_Layers.FindByName(TLayerTreeNodeRecord(ANode.Data).Name);
  aLyr.Visible:=Visible;
  if Visible then
    iState:=TREENODESTATE_SUBCHECKEDALL
  else
    iState:=TREENODESTATE_NOTCHECKED;
  SetNodeState(ANode, iState, True, nil);
end;

procedure SetLayerEditable(MapX:TMapXObject;
  const Index: Integer; const Editable: Boolean);
var
  i:Integer;
  ANode:TTreeNode;
  aLyr:Layer;
begin
  ANode:=FindLayerNode(Index);
  MapX.Layers.InsertionLayer:=nil;
  EditLayer:=nil;
  for i:=1 to MapX.Layers.Count do
  begin
    if IsCustomLayer(MapX.Layers.Item[i]) then
      MapX.Layers.Item[i].Editable:=False;
  end;
  aLyr:=MyGIS.GMapTools.m_Layers.FindByName(TLayerTreeNodeRecord(ANode.Data).Name);
  if aLyr<>nil then
  begin
    aLyr.Editable:=Editable;
    if Editable then
    begin
      EditLayer:=aLyr;
      MapX.Layers.InsertionLayer:=aLyr;
    end;
  end;
end;

procedure SetLayerSelectable(MapX:TMapXObject; 
  const Index: Integer; const Selectable: Boolean);
var
  ANode:TTreeNode;
  aLyr:Layer;
begin
  ANode:=FindLayerNode(Index);
  aLyr:=MyGIS.GMapTools.m_Layers.FindByName(TLayerTreeNodeRecord(ANode.Data).Name);
  aLyr.Selectable:=Selectable;
end;

procedure SetLayerAutoLabel(MapX:TMapXObject; SysTreeRoot:TTreeNode;
  const Index: Integer; const AutoLabel: Boolean);
var
  ANode:TTreeNode;
  aLyr:Layer;
begin
  ANode:=FindLayerNode(Index);
  aLyr:=MyGIS.GMapTools.m_Layers.FindByName(TLayerTreeNodeRecord(ANode.Data).Name);
  aLyr.AutoLabel:=AutoLabel;
end;

procedure RemoveuserLayer(MapX:TMapXObject; const Index: Integer);
var
  ANode:TTreeNode;
  aLayerInfo:TLayerTreeNodeRecord;
  aLyr:Layer;
begin
  ANode:=FindLayerNode(Index);
  aLayerInfo:=ANode.Data;
  if (aLayerInfo.NodeType<>LTN_LAYER)or(aLayerInfo.IsSystem) then
    WarningAbort('提示', '只有用户图层可以被移出!');
  aLyr:=MyGIS.GMapTools.m_Layers.FindByName(aLayerInfo.Name);
  if aLyr=EditLayer then EditLayer:=nil;
  MyGIS.GMapTools.m_Layers.Remove(Index);
  DeleteNode(ANode);
end;

procedure RemoveAllNodes;

  procedure RemoveAllSubNodes(ANode:TTreeNode);
  var
    ASubNode:TTreeNode;
    aLayerInfo:TLayerTreeNodeRecord;
    aLyr:Layer;
  begin
    while ANode.Count>0 do
    begin
      ASubNode:=ANode.Item[0];
      aLayerInfo:=ASubNode.Data;
      if aLayerInfo.NodeType<>LTN_LAYER then
        RemoveAllSubNodes(ASubNode)
      else begin
        aLyr:=MyGIS.GMapTools.m_Layers.FindByName(aLayerInfo.Name);
        if aLyr=EditLayer then EditLayer:=nil;
        MyGIS.GMapTools.m_Layers.Remove(GetLayerIndex(MyGIS.GMapTools.MapX, aLayerInfo.Name));
      end;
      DeleteNode(ASubNode);
    end;
  end;
  
begin
  RemoveAllSubNodes(SysTreeRoot);
end;

function SetCurrentMapTool(const ToolClassName:string;
  TurnEvent:TNotifyEvent):TBaseMapTool;
var
  Index:Integer;
  AToolObj:TBaseMapTool;
begin
  MyGIS.GMapTools.m_Layer.Layer:=EditLayer;
  Index:=MyGIS.GMapTools.m_Map.UserTools.IndexByClassName(ToolClassName);
  if Index=-1 then
    WarningAbort('错误', '没有找到名称为 "'+ToolClassName+'" 的地图工具!!');
  Result:=MyGIS.GMapTools.m_Map.UserTools.Items[Index];
  Result.MsgHandle:=AppMsgHandle;
  if Result is TLayerMapTool then
    with TLayerMapTool(Result) do
    begin
      LayerManager:=MyGIS.GMapTools.m_Layer;
      TrackLayer:=UserLayer;
    end;
  MyGIS.GMapTools.m_Map.UserTools.SetCurrentTool(Result);
  Result.OnTurnTool:=TurnEvent;
end;

procedure CheckEditLayer;
begin
  if EditLayer=nil then
    WarningAbort('提示', '请设置编辑图层!');
  if not editlayer.Editable then
    WarningAbort('提示', '图层没有处于编辑状态!');
end;

function MapFieldTypeToLogicalFieldName(AFieldType:TMapFieldType):string;
begin
  case AFieldType of
    mftString    : Result:='字符串';
    mftInteger   : Result:='整型';
    mftSmallint  : Result:='整型';
    mftBoolean   : Result:='布尔型';
    mftFloat     : Result:='浮点型';
    mftBCD       : Result:='浮点型';
    mftDateTime  : Result:='日期\时间';
    mftBinary    : Result:='二进制';
    else           Result:='';
  end;
end;

function LogicalFieldNameToMapFieldType(const FieldName:string):TMapFieldType;
begin
  Result:=mftUnknown;
  if AnsiCompareText(FieldName, '字符串')=0 then
    Result:=mftString
  else if AnsiCompareText(FieldName, '整型')=0 then
    Result:=mftInteger
  else if AnsiCompareText(FieldName, '布尔型')=0 then
    Result:=mftBoolean
  else if AnsiCompareText(FieldName, '浮点型')=0 then
    Result:=mftFloat
  else if AnsiCompareText(FieldName, '日期\时间')=0 then
    Result:=mftDateTime
  else if AnsiCompareText(FieldName, '二进制')=0 then
    Result:=mftBinary;
end;

const
  ShapeTypeNames:array [TShapeType] of string=
    (
    '未知',
    '标记',
    '线段',
    '折线',
    '矩形',
    '圆形',
    '多边形',
    '正多边形',
    '椭圆',
    '圆弧',
    '文字'
    );

function GetShapeTypeName(AShapeType:TShapeType):string;
begin
  Result:=ShapeTypeNames[AShapeType];
end;

function GetShapeTypeByName(const TypeName:string):TShapeType;
var
  i:Integer;
begin
  Result:=stUnknown;
  for i:=0 to 10 do
    if AnsiCompareText(ShapeTypeNames[TShapeType(i)], TypeName)=0 then
    begin
      Result:=TShapeType(i);
      Exit;
    end;
end;

function GetLayerFromTreeNode(ANode:TTreeNode):Layer;
begin
  Result:=nil;
  if (ANode<>nil)and(ANode.Level>0) then
    if TLayerTreeNodeRecord(ANode.Data).NodeType=LTN_LAYER then
      Result:=MyGIS.GMapTools.m_Layers.FindByName(TLayerTreeNodeRecord(ANode.Data).Name);
end;

function IsCustomLayer(Lyr:Layer):Boolean;
begin
  Result:=(Lyr.type_=miLayerTypeNormal)and(Lyr.Name<>'_YHB_SYS_TRACKLAYER');
end;

function GetCustomLayerIndex(MapX:TMapXObject; const ComboIndex:Integer):Integer;
var
  i, j:Integer;
begin
  Result:=-1;
  j:=-1;
  for i:=1 to MapX.Layers.Count do
    if IsCustomLayer(MapX.Layers.Item[i]) then
    begin
      Inc(j);
      if j=ComboIndex then
      begin
        Result:=i;
        Break;
      end;
    end;
end;

function GetCustomLayerComboIndex(MapX:TMapXObject; const LayerIndex:Integer):Integer;
var
  i, j:Integer;
begin
  Result:=-1;
  j:=-1;
  for i:=1 to MapX.Layers.Count do
  begin
    if IsCustomLayer(MapX.Layers.Item[i]) then
      Inc(j);
    if i=LayerIndex then
    begin
      Result:=j;
      Break;
    end;
  end;
end;

function GetBoundsString(Bounds:CMapXRectangle):string;
begin
  Result:=FloatToStr(Bounds.XMin)+','+FloatToStr(Bounds.YMin)+','+
          FloatToStr(Bounds.XMax)+','+FloatToStr(Bounds.YMax);
end;

function CreateBoundsUseBoundsString(const BoundsStr:string):CMapXRectangle;
var
  List:TStringList;
begin
  List:=TStringList.Create;
  try
    Trans2(BoundsStr, ',', List);
    Result:=CoRectangle.Create;
    Result.Set_(StrToFloat(List.Strings[0]), StrToFloat(List.Strings[1]),
                StrToFloat(List.Strings[2]), StrToFloat(List.Strings[3]));
  finally
    List.Free;
  end;
end;

end.

⌨️ 快捷键说明

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