我是一名业余编程爱好者,只会简单的VB。
在网上看到有篇文章讲的是通过经度和纬度计算Google earth卫星地图的URL,
并附了用Delphi写的代码,我怎么运行不了呢?
我新建了一个VCL Forms Application-Delphi for Win32
在按钮的单击事件下写入如下代码:
用到了这些控件:fm1为Frames,lb1-lb4为TLabel,ed1-ed4为TEdit,bu1为TButton。
fm1为主窗口,lb1为放大倍数接收ed1输入的数据,lb2为经度接收ed2输入的数据,lb3为纬度接收ed3输入的数据,lb4为在ed4中显示的URL。
procedure Tfm1.bu1Click(Sender: TObject);
var
   zm:integer;
   Xj,Yw:double;
begin
    zm:=StrToInt(ed1.text);
    Xj:=StrToFloatDef(ed2.text,0);
    Yw:=StrToFloatDef(ed3.text,0);
//zoom 放大倍数,由1-18; X 经度; Y 纬度
function getSatURL(zoom:integer; X,Y:double):string;
var
   wx, wy, cx, cy: double;
   tid: string;
   i:integer;
begin
   cx:= 0;
   cy:= 0;
   wx:= 180;
   wy:= 180;
   tid:= 't';
  for i:= 1 to zoom-1 do
   begin
    if (x >= cx) and (y >= cy) then
     begin
      tid:= tid + 'r';
      cx:= cx + wx / 2;
      cy:= cy + wy / 2;
     end
    else if (x >= cx) and (y < cy) then
     begin
      tid:= tid + 's';
      cx:= cx + wx / 2;
      cy:= cy - wy / 2;
     end
    else if (x < cx) and (y < cy) then
     begin
      tid:= tid + 't';
      cx:= cx - wx / 2;
      cy:= cy - wy / 2;
     end
    else
     begin
      tid:= tid + 'q';
      cx:= cx - wx / 2;
      cy:= cy + wy / 2;
     end;
    wx:= wx / 2;
    wy:= wy / 2;
  end;
  result:= 'http://kh.google.com/kh?v=3&t=' + tid;
end;
ed4.text:=function getSatURL(zm,Xj,Yw);
end.

解决方案 »

  1.   

    改成如下://zoom 放大倍数,由1-18; X 经度; Y 纬度
    function getSatURL(zoom:integer; X,Y:double):string;
    var
       wx, wy, cx, cy: double;
       tid: string;
       i:integer;
    begin
       cx:= 0;
       cy:= 0;
       wx:= 180;
       wy:= 180;
       tid:= 't';
      for i:= 1 to zoom-1 do
       begin
        if (x >= cx) and (y >= cy) then
         begin
          tid:= tid + 'r';
          cx:= cx + wx / 2;
          cy:= cy + wy / 2;
         end
        else if (x >= cx) and (y < cy) then
         begin
          tid:= tid + 's';
          cx:= cx + wx / 2;
          cy:= cy - wy / 2;
         end
        else if (x < cx) and (y < cy) then
         begin
          tid:= tid + 't';
          cx:= cx - wx / 2;
          cy:= cy - wy / 2;
         end
        else
         begin
          tid:= tid + 'q';
          cx:= cx - wx / 2;
          cy:= cy + wy / 2;
         end;
        wx:= wx / 2;
        wy:= wy / 2;
      end;
      result:= 'http://kh.google.com/kh?v=3&t=' + tid;
    end;
    procedure Tfm1.bu1Click(Sender: TObject);
    var
       zm:integer;
       Xj,Yw:double;
    begin
        zm:=StrToInt(ed1.text);
        Xj:=StrToFloatDef(ed2.text,0);
        Yw:=StrToFloatDef(ed3.text,0);    // ed4.text:=function getSatURL(zm,Xj,Yw);
        ed4.text:=getSatURL(zm,Xj,Yw);
    end;
      

  2.   

    要用墨卡托坐标变换才行 不然误差大了!
    而且知道这个基本没有用 
    现在google对下它的地图加了保护 如果感觉被机器下了就停止提供