代码名称:根据经纬度判断位置(Delphi)

作者/收集者:islkeng

开发环境:Delphi + MapX

代码:

procedure TFrmTrack.AddPosition();
var
  i, j: integer;
  st, strMapName: string;
  Radius:double;
begin
if not DM1.qryTrace.eof then //如果还没到末尾
begin
x1:=DM1.qryTrace.Fields[6].value;
y1:=DM1.qryTrace.Fields[7].value;
{假设中国地图上有:“面省界 ”,"面地区界","面县界","乡镇"等几个图层}
begin
  for i:=0 to Map2.Layers.Count-1 do
  begin
    st := Map2.Layers.Item(i+1).Name;
    if st = '面省界' then
    begin
      Map2.Layers.Item(i+1).Selection.SelectByPoint(x1, y1, miSelectionNew);
      for j:=0 to Map2.Layers.Item(i+1).Selection.Count - 1 do
      begin
       // AF := Map1.Layers.Item(i+1).Selection.Item(j+1);
        strMapName := Map2.Layers.Item(i+1).Selection.Item(j+1).Name;
        break;
      end;
    end;
  end;

  for i:=0 to Map2.Layers.Count-1 do
  begin
    st := Map2.Layers.Item(i+1).Name;
    if st = '面地区界' then
    begin

      Map2.Layers.Item(i+1).Selection.SelectByPoint(X1, y1, miSelectionNew);
      for j:=0 to Map2.Layers.Item(i+1).Selection.Count - 1 do
      begin
        strMapName :=  strMapName +Map2.Layers.Item(i+1).Selection.Item(j+1).Name;
        break;
      end;
    end;
  end;

  for i:=0 to Map2.Layers.Count-1 do
  begin
    st := Map2.Layers.Item(i+1).Name;
    if st = '面县界' then
    begin
      Map2.Layers.Item(i+1).Selection.SelectByPoint(X1, Y1, miSelectionNew);
      for j:=0 to Map2.Layers.Item(i+1).Selection.Count - 1 do
      begin
        strMapName :=strMapName+ Map2.Layers.Item(i+1).Selection.Item(j+1).Name;
        break;
      end;
    end;
  end;

    for i:=0 to Map2.Layers.Count-1 do
  begin
    st := Map2.Layers.Item(i+1).Name;
    if st = '乡镇' then
    begin
     Map2.MapUnit := miUnitKilometer;
      Radius:=5;
      Map2.Layers.Item(i+1).Selection.SelectByRadius(X1, Y1,Radius, miSelectionNew);
      for j:=0 to Map2.Layers.Item(i+1).Selection.Count - 1 do
      begin
        strMapName :=strMapName+ Map2.Layers.Item(i+1).Selection.Item(j+1).Name;
        break;
      end;
    end;
  end;

  Label5.Caption  := strMapName;
end;
DM1.qryTrace.next;   //下一条记录
end;
end;