询问一个SQL算法。

HZ_ZMD 2003-03-18 07:39:10
表DeptInfo:
Code SubCode (字段)
A C
A E
B D
B F
C G
D H

其中,Code是SubCode的上级部门。

上述表用TREEVIEW显示如下:
___
A--| C--G
| |___ E
|
B--|-- D-H
|
---- F

请问用什么算法让数据更快更好的加载到TREEVIEW来呢?
100分相送,决不食言!!!
(有代码最好!)
...全文
61 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
myy 2003-03-19
  • 打赏
  • 举报
回复
表DeptInfo:
Code parentCode (字段)
001
002 001
003 001
004 002
005 003
006 004
如果用oracle,可以:

Select *,level from DeptInfo start with parentCode is null
connect by code=parentCode order by code;
^^^^^^^^^^^^^^//可选
查出:
Code parentCode level
001 1
002 001 2
004 002 3
006 004 4
003 001 2
005 003 3

这就是TreeView中的顺序!遍历一边记录,就可以创建所有节点的。
(level是虚拟列,自动赋值的,可以不用)
HZ_ZMD 2003-03-19
  • 打赏
  • 举报
回复
谢谢大家的热情参与,我结帐了!
snake_eye 2003-03-19
  • 打赏
  • 举报
回复
procedure CreateSubTree(FNodeName: string; Node: TTreeNode = nil);
var mLocalName: string;
TreeNode: TTreeNode;
Ads_Tmp: TADODataSet;
begin
ADS_Tmp := TADODataSet.Create(Self);
ADS_Tmp.Connection := ADOConn;
with ADS_Tmp do
begin
Close;
CommandText := 'Select * from Type Where ParentID =' + FNodeName;
Open;
First;
while not Eof do
begin
mLocalName := FieldbyName('ID').Asstring;
TreeNode := TreeView.Items.AddChild(Node, FieldByName('Name').AsString);
CreateSubTree(mLocalName, TreeNode);
Next;
end;
end;
end;

简单的底归!
LaoZheng 2003-03-19
  • 打赏
  • 举报
回复
unit DBTrees;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ComCtrls, DB,StdCtrls;

type

TTreeNodeInfo=record
Id:String;
ParentId:String;
end;

TDBTreeView=class(TTreeView)
private
fTable:TDataSet;
fId,fParentId,fName:string;
function AddItem:TTreeNode;
function FindItem(Id:string):TTreeNode;
protected
procedure Change(Node: TTreeNode); override;
public
function GetId:string;
procedure BuildTree;
procedure ClearTree;

constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
published
property FieldId:string Read fId Write fId;
property FieldParentId:string Read fParentId Write fParentId;
property FieldName:string Read fName Write fName;
property DataSource:TDataSet Read fTable Write fTable;
property ActiveId:string Read GetId;
end;


procedure Register;

implementation

function TDBTreeView.FindItem(Id:string):TTreeNode;
var i:integer;
NodeInfo:^TTreeNodeInfo;
begin
Result:=nil;
For i:=0 to Items.Count-1 do
begin
NodeInfo:=Items[i].Data;
If NodeInfo^.Id=Id then
begin
Result:=Items[i];
Exit;
end;
end;
end;

function TDBTreeView.GetId:string;
var NodeInfo:^TTreeNodeInfo;
begin
If Selected=nil then Result:=''
else
begin
NodeInfo:=Selected.Data;
Result:=NodeInfo^.Id;
end;
end;

function TDBTreeView.AddItem:TTreeNode;
var NodeInfo:^TTreeNodeInfo;
BMark:TBookMark;
ObjParent:TTreeNode;
Name,CurId:string;
begin
ObjParent:=FindItem(fTable.FieldByName(fId).AsString);
If ObjParent<>nil then
begin
Result:=ObjParent;
Exit;
end
else
begin
New(NodeInfo);
NodeInfo^.Id:=fTable.FieldByName(fId).AsString;
NodeInfo^.ParentId:=fTable.FieldByName(fParentId).AsString;
Name:=fTable.FieldByName(fName).AsString;
If fTable.FieldByName(fParentId).AsString<>'' then
begin
ObjParent:=FindItem(Name);
If ObjParent<>nil then
Result:=Items.AddChildObject(ObjParent,Name,NodeInfo)
else
begin
CurId:=fTable.FieldByName(fId).AsString;
If fTable.Locate(fId,fTable.FieldByName(fParentId).AsString,[]) then
begin
Result:=Items.AddChildObject(AddItem,Name,NodeInfo);
fTable.Locate(fId,CurId,[]);
end
else
Result:=Items.AddObject(Selected,Name,NodeInfo);
end;
end
else
begin
Result:=Items.AddObject(Selected,Name,NodeInfo);
end;
end;
end;

procedure TDBTreeView.BuildTree;
var ChangeEvent:TTVChangedEvent;
begin
If (fTable=nil) or (not fTable.Active) then Exit;
ChangeEvent:=OnChange;
OnChange:=nil;
Items.BeginUpdate;
ClearTree;
fTable.First;
While not fTable.Eof do
begin
AddItem;
fTable.Next;
end;
AlphaSort;
Items.EndUpdate;
OnChange:=ChangeEvent;
end;

procedure TDBTreeView.ClearTree;
var NodeInfo:^TTreeNodeInfo;
i:integer;
begin
Items.BeginUpdate;
for i:=0 to Items.Count-1 do
begin
NodeInfo:=items[i].Data;
Dispose(NodeInfo);
end;
While Items.Count>0 do Items.Delete(Items[0]);
Items.EndUpdate;
end;

procedure Register;
begin
RegisterComponents('Data Controls',[TDBTreeView]);
end;



constructor TDBTreeView.Create(AOwner: TComponent);
begin
inherited;
end;

destructor TDBTreeView.Destroy;
begin
inherited;
end;


end.
citytramper 2003-03-19
  • 打赏
  • 举报
回复
能不能给我个大一点的数据表让我测试一下
lewischen@eyou.com
snake_eye 2003-03-19
  • 打赏
  • 举报
回复
我写的ADOQuery不是动态的吗?
ADS_Tmp := TADODataSet.Create(Self);
ADS_Tmp.Connection := ADOConn;
zwt00 2003-03-19
  • 打赏
  • 举报
回复
我的代码中的那个ADOQuery必须是动态创建的,不能用固定的
HZ_ZMD 2003-03-18
  • 打赏
  • 举报
回复
citytramper(从开始到现在):
blazingfire(烈焰)(正在思考的流浪汉...)的算法快。
在query的指针移动上消耗时间;肯定要比移动节点上消耗时间少。
如有不妥请斧正!
tgc99 2003-03-18
  • 打赏
  • 举报
回复
好办法。。
HZ_ZMD 2003-03-18
  • 打赏
  • 举报
回复
谢谢 citytramper(从开始到现在)
不过你的方法我也好像陷入死循环。
HZ_ZMD 2003-03-18
  • 打赏
  • 举报
回复
谢谢bluezwt(蓝色天涯)
不过你的方法我好像陷入死循环。
HZ_ZMD 2003-03-18
  • 打赏
  • 举报
回复
blazingfire(烈焰)
你的建议我已经接受了!
citytramper 2003-03-18
  • 打赏
  • 举报
回复
blazingfire(烈焰)(正在思考的流浪汉...)
的方法主要在query的指针移动上消耗时间

我的方法主要在移动node上消耗时间

: bluezwt(蓝色天涯)
的方法主要是增加了数据库的连接数量

楼主 你都试试看哪个方法快?
HZ_ZMD 2003-03-18
  • 打赏
  • 举报
回复
谢谢blazingfire(烈焰)(正在思考的流浪汉...)
不过你的算法出现一个问题,上述数据中,上级代码A出现了两次,B也如此。
还有C和D也在A和B的同一级。
zwt00 2003-03-18
  • 打赏
  • 举报
回复
如果不在deptinfo中增加记录就用下面的代码,个人觉得加两条记录方便些procedure TForm1.Button1Click(Sender: TOBject);
var
m:TTreeNode;
s_ADOQuery:TADOQuery;
begin
s_ADOQuery:=TADOQuery.Create(self);
s_ADOQuery.Connection:=ADOConnection1;
s_ADOQuery.Close;
s_ADOQuery.SQL.Clear;
s_ADOQuery.SQL.Text:='select distinct(code) from deptinfo where code not in (select distinct(subcode) from deptinfo)';
s_ADOQuery.Open;
if not s_ADOQuery.IsEmpty then
begin
while not s_ADOQuery.Eof do
begin
m:=TreeView1.Items.Add(nil,s_ADOQuery.fieldbyname('code').AsString);
InitTreeView(m,s_ADOQuery.fieldbyname('code').AsString);
s_ADOQuery.Next;
end;
end;
end;
citytramper 2003-03-18
  • 打赏
  • 举报
回复
function TForm1.FindNode(TreeView:TTreeView;text:string):TTreeNode;
var i,j:integer;
begin
result:=nil;
j:=treeview.Items.Count;
for i:=0 to j-1 do
begin
if treeview.Items[i].Text=text then
begin
result:=treeview.Items[i];
exit;
end;
end;
end;

procedure TForm1.MoveChildNode(TreeView:TTreeView;DestNode:TTreeNode;SourNode:TTreeNode);
var tn1,tn2:TTreeNode;
begin
tn1:=nil;
tn2:=nil;
tn1:=sournode.getFirstChild;
if tn1<>nil then
begin
tn2:=treeview.Items.AddChild(destnode,tn1.Text);
if tn1.HasChildren then
begin
self.MoveChildNode(treeview,tn2,tn1);
end;
end;
tn1:=sournode.GetNextChild(tn1);
while tn1<>nil do
begin
tn2:=treeview.Items.AddChild(destnode,tn1.Text);
if tn1.HasChildren then
begin
self.MoveChildNode(treeview,tn2,tn1);
end;
tn1:=sournode.GetNextChild(tn1);
end;
tn1:=nil;
tn2:=nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var tn1,tn2,tn3:TTreeNode;i,j:integer;value:string;
begin
table1.Open;
while not table1.Eof do
begin
value:=table1.FieldValues['code'];
tn1:=self.FindNode(self.TreeView1,value);
if tn1=nil then
begin
tn1:=self.TreeView1.Items.Add(nil,value);
end;
value:=table1.FieldValues['subcode'];
tn2:=self.FindNode(self.TreeView1,value);
if tn2=nil then
begin
tn2:=self.TreeView1.Items.AddChild(tn1,value);
end else
begin
tn3:=self.TreeView1.Items.AddChild(tn1,value);
self.MoveChildNode(self.TreeView1,tn3,tn2);
tn2.Delete;
end;
table1.Next;
end;
table1.Close;
end;
zwt00 2003-03-18
  • 打赏
  • 举报
回复
在你的表中加两条记录 0 A 0 B
procedure InitTreeView(TreeNode:TTreeNode;Key:String);
var
TN:TTreeNode;
s_ADOQuery:TADOQuery;
begin
s_ADOQuery:=TADOQuery.Create(self);
s_ADOQuery.Connection:=ADOConnection1;
s_ADOQuery.Close;
s_ADOQuery.SQL.Clear;
s_ADOQuery.SQL.Text:='select code,subcode from deptinfo where code='+Quotedstr(key);
s_ADOQuery.Open;
if not s_ADOQuery.IsEmpty then
begin
while not s_ADOQuery.Eof do
begin
TN:=Treeview1.Items.AddChild(TreeNode,s_ADOQuery.fieldbyname('subcode').AsString);
InitTreeView(TN,s_ADOQuery.fieldbyname('subcode').AsString);
s_ADOQuery.Next;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TOBject);
begin
InitTreeView(nil,'0');
end;
blazingfire 2003-03-18
  • 打赏
  • 举报
回复
以上代码没有经过调试,随手的写的,不过应该没有太大问题,细节方面不要问我
blazingfire 2003-03-18
  • 打赏
  • 举报
回复
用SQL就可以解决这样的问题那还要Delphi干嘛?好老说,你这个数据库的设计也有问题,如果把你的SubCode改为UpCode就要好作多了。当然,象你这样也可以作的,不过要多一个Query
先用一个RootQry:TADOQuery来取第一级部门SQL象这样
select * from DepInfo where not code in (select SubCode from DepInfo)
用一个DetailQry:TADOQuery来Select * from DepInfo然后再用递归生成树---绝对累不死CPU,除非你程序有死循环!也不应该很慢!!大体如下:
var
ANode:TTreeNode;
begin
RootQry.First;
while not RootQry.Eof do
begin
ANode:=TreeView.Items.Add(nil,RootQry.FieldByName('Code').AsString);
CreateChild(ANode);
RootQry.Next;
end;
procedure CreateChild(FNode:TTreeNode);
var
BookMark:String;
ANode:TTreeNode;
begin
DetailQry.First;
While Not DetailQry.Eof do
begin
if DetailQry.FieldByName('Code').AsString=FNode.Text then
begin
ANode:=TreeView.Items.AddChild(FNode,
DetailQry.FieldByName('SubCode').AsString);
Bookmark:=DetailQry.Bookmark;
CreateChild(ANode);//此处递归!!
DetailQry.Bookmark:=Bookmark;
end;
DetailQry.Next;
end;
DetailQry.
end;
yhq2002 2003-03-18
  • 打赏
  • 举报
回复
怎么会呢。我这么做了,没有错啊,tnode:=tnode.getnext,用一循环做,应该没问题吧
加载更多回复(3)
一个牛人提供的GIS源码(很好 下面文字非本人所写,文件提到的下载的东西我全部放包里了。 最后的礼物:校园多媒体系统和校园WEBGIS系统 为什么说是最后的礼物,大概是因为我突然想这个blog不更新了。为什么呢?可能是今天晚上喝多了酒,呵呵,原因等下一篇中也许会阐述,同时我会对这个blog的文章等做个总结。其实,这两个东西至少我暂时是不大想放出来的,只是觉得反正这里也不更新了,仅仅将这些东西作为礼物吧,再说毕竟这些东西太过于菜菜了。还是先来介绍下最后的两个礼物吧: 校园多媒体系统: 这个大概是今年过年后做的东西了,是给师弟做毕业设计用的。应该讲这也仅仅是电子地图查询系统的更新而已,没有太大的特色,只是做了些比较花的功能而已。 特色一:系统采用了双重数据库,对于如果无法连接SQL Server数据库的情况将提供备用的ACCESS数据库支持。 特色二:系统采用了实时在线更新的方法对软件进行升级,升级仅仅需要设置好服务端以及更新文件列表等即可。 特色三:界面上有所创新,吸取Google的WEB地图的界面,对部分控制条进行显示和隐藏。可以看我以前的截图,做了个界面,请大家PP http://www.cnblogs.com/Tangf/archive/2006/03/16/351640.html 特色四:简单的加密方式也可以学习下。这个加密方式可以对移植性进行控制。 特色五:移植性强,许多东西没有写死,只需要改变设置文件、启动画面文件、地图文件和数据库文件即可成为一套全新的系统。 开发环境:Visual Basic 6.0,MAPX5.02中文版,ACCESS,SQL SERVER 2000,AutodeskExpressViewe3.1、Windows Media Player 9.0等。 下载地址:http://www.cnblogs.com/Files/Tangf/Campus_Multimedia_Infomation_System_Source.rar 压缩包中为源代码和生成的程序,同时还赠送了一个基于SF6的MAPX打包文件以及整个校园的地图文件,提供了开放环境中需要的插件支持文件(System目录下),同时由于文件大小原因,删除了许多Img目录下的图片并且在数据库中删除了部分Img记录(不然会出错),仅保留了1号楼的图片供参考。 相关或参考文章: 电子地图查询系统_v1.0_源代码(VB6+MAPX5) http://www.cnblogs.com/Tangf/archive/2006/02/15/331375.htmlGoogle ┕电子地图查询系统源代码:http://www.cnblogs.com/Files/Tangf/MapSearch_Source.rar 用SetupFactory打包MapX(带打好的包和打包文档以及录像) http://www.cnblogs.com/Tangf/archive/2006/02/05/325842.html ┕打包以及文档和录像:http://www.cnblogs.com/Files/Tangf/Mapx_Pack.rar 再谈MAPX打包以及MAPX的安装 http://www.cnblogs.com/Tangf/archive/2006/05/31/414361.html 校园WEBGIS: 这个应该是05年的时候做的毕业设计,用超图的Supermap IS 2003+SQL Server 2000建立的一个比较的简单的系统,只是玄乎了下就变的有点意思了,甚至也有点学习或者创新的意思。 加上上次发布的论文部分,这样整个系统也算是补全了。原来论文部分请见:校园WebGIS开发与实践(论文部分) http://www.cnblogs.com/Tangf/archive/2006/01/13/316918.html 特色一:提出了地图接口的概念(其实当时的想法是将网络上的所谓企业标注移植到了这个系统上,只是这个功能免费提供给了学校的部门使用)。 特色二:部分搜索功能是通过搜索SQL输出XML来实现。 特色三:系统已经详细到每个楼房楼层的办公室以及办公室内的电话和教师名单、教学楼的班级以及课程表、宿舍的成员组成联系方式等。 特色四:空间数据库和属性数据库通过SQL Server的视图功能实现关联。 开发环境:Supermap Desktop 2003(地图编辑工具),Supermap IS 2003(GIS服务端),ASP+SQL Server 2000(开发语言和数据库环境),IIS 5.0(WEB服务端),AutodeskExpressViewe3.1(Autodesk公司发布的浏览DWF文件的的客户端插件)等。 安装方法请见论文的附录部分,请不要再询问如何安装。 由于当时将每个楼层平面图的CAD数据也同时存入了SQL Server,所以导致数据库文件过于庞大,大概90M多,经过压缩大概21.8M左右。由于文件过大没有地方存放,所以这部分也不提供。所以可能会导致系统功能无法实现。数据库不提供,请不要索取。 下载地址:http://www.cnblogs.com/Files/Tangf/Campus_WebGIS_Source.rar 压缩包中为WEB主程序,以及答辩用的演讲稿。 相关或参考文章: 校园WebGIS开发与实践(论文部分) http://www.cnblogs.com/Tangf/archive/2006/01/13/316918.html ┕校园WEBGIS的论文下载:http://www.cnblogs.com/Files/Tangf/Campus_WebGIS.rar 由于各种原因,压缩包中已经删除了无关紧要的楼层平面图的DWF部分。同时由于文件大小原因,AutodeskExpressViewe3.1程序也没有提供,请从网上下载。 特别说明:两个程序中已经提供了比较完整的数据和代码,可以复制、修改、传播,传播情保证文件完整性,并且包含Readme文件同时注明出处,但禁止用于商业用途。谢谢。 但愿我的礼物能够给您带来一些帮助。 ==================================================================== 公告:Rover's Official Blog停止更新 想了几天,终于决定写这么一个公告了。并不是因为写些东西太累或者太占时间而停止了更新,也许就如同前文说是因为今天喝多了酒(呵呵,玩笑),也许如同MSN副标题所言:严重的压力和抑郁,强烈的人格分裂和精神分裂,等待崩溃(呵呵,又一个玩笑)。可能是觉得写的东西没什么水准,并且也不能时常的更新,加上个人感觉自己技术的下降(呵呵,也许本来就没有什么技术),考虑甚多,终于作了这么个决定:Rover's Official Blog停止更新 同时停止更新的是Rover's GIS Blog,是3snews上面的Blog,不过上面的基本上也都是本站的复制。生活类Blog会不定时更新,停靠在了Space和新浪,由于关系自己暴露隐私等问题,所以本文不详细提供连接地址。从元旦开博到现在也已经八个月的时间了,发了40多篇的随笔和0篇的文章,非常开心能够在博客园作为我的主blog的停靠站,能够让我在这里结识这么多的朋友,并同他们交流,让我学到甚多、收益菲浅,非常的感谢博客园感谢大家。 也许我还会回来,说不定有一天我会发公告说本Blog重新开始更新,很有可能的事情。希望这段日子能够安静些,能够思考更多些,能够明确些方向,能够做出些实质性的东西,能够提高些自身的技术能力。非常的希望,不知道能否实现。 也许我也会偶然的更新一下本日志,大概是在有东西发布或者有好东西同大家分享的情况下吧。不过这篇日志就置顶了吧。 正准备经营的东西,希望能够得到大家的帮助,非常的感谢: www.gpsplayer.cn:GPS玩家。GPS资讯类网站。类似一个简单的新闻系统,加上一些简单的留言板等等功能,可能会添加一些Gmap API开发类的内容。 www.wikish.cn:维基上海。有了点想法和思路,但暂时由于技术能力等原因无法实现。 其他:还有两个玉米没有想好(呵呵)。 由于个人比较自私,所以想法上即使有所创意也不大会和大家分享(请见谅),加上自身没有技术,所以个人基本上是宁烂也不实现或者让别人实现(是有点自私了)。请原谅我的自私,Google是有创意的,但他的技术壁垒是他人所无法逾越的,而我即使有创意也没有任何技术壁垒,所以不讲了。加上大陆地区太多的炮制太另人失望了(去年非常红火的百万首页,在大陆地区做的烂的一塌,只会炮制没有几个是有创意或者在人家创意的基础上增加自己创意的,唉)。 非常的希望大家能够给我意见或者建议,对大家提供的帮助非常的感谢。 如果您对这一段有想法或者其他愿意和我交流,那么请给我mail。谢谢。 我的联系方式和需要注意的地方: E-mail:tfljh@163.com(基本上是每天晚上登陆一次) MSN:tfljh@msn.com(基本上是开机登陆,不过状态一般为忙碌,Mail会不定时登陆) Gmail:tangf2004@gmail.com(基本上是两三天登陆一次,Gtalk则不定时登陆了) QQ:65985498(基本上是每天晚上隐身登陆一次,并且一般在十分钟内关闭) 以后的联系通过E-Mail联系,谢绝一切的及时通讯工具,请尽量不要添加我为好友,包括QQ/MSN/Gtalk,如果您发的Mail足够的诚恳并且也足够的值得聊天的理由,那么我会添加你的。不希望通过聊天的方式来解决问题,聊了半天的问题最后做公安局调查户口的事情了(呵呵,说的严重了),或者说是聊了半天后就无聊了然后再也不聊了,多么的没有意思。我倒还是很愿意花上十分钟的时间来阅读您的Mail并将我知道的所答复给您。当然如果有邮件不回复,那么基本上我是不懂而无法回答或者觉得没有任何答复的价值,请多多的包涵。 以前写的部分日志以及提供的下载文件整理: 最后的礼物:校园多媒体系统和校园WEBGIS系统 http://www.cnblogs.com/Tangf/archive/2006/08/05/468257.html ┕校园多媒体系统源代码下载:http://www.cnblogs.com/Files/Tangf/Campus_Multimedia_Infomation_System_Source.rar ┕校园WEBGIS系统源代码下载:http://www.cnblogs.com/Files/Tangf/Campus_WebGIS_Source.rar Google卫星地图的URL计算 http://www.cnblogs.com/Tangf/archive/2006/07/23/457902.html 两点坐标间距离的算法以及验证 http://www.cnblogs.com/Tangf/archive/2006/07/23/457884.html 极索(Gsuo)推出新版地图采用Gmap设计思路 http://www.cnblogs.com/Tangf/archive/2006/07/23/457521.html 浅谈LBS(基于位置的服务) http://www.cnblogs.com/Tangf/archive/2006/07/17/452498.html MapBar地图更新啦 http://www.cnblogs.com/Tangf/archive/2006/07/13/450215.html 推荐一款软件:Global Mapper http://www.cnblogs.com/Tangf/archive/2006/07/11/448411.html 51ditu、清华地图以及Google地图 http://www.cnblogs.com/Tangf/archive/2006/07/02/440953.html 计算最近点和最近线段 http://www.cnblogs.com/Tangf/archive/2006/07/01/440311.html ┕最近点和最近线段算法示例代码(脱离MAPX5,VB6实现):http://www.cnblogs.com/Files/Tangf/neardis_new.rar Garmin Nuvi 350试用手记 http://www.cnblogs.com/Tangf/archive/2006/06/17/428045.html ┕全文下载(供转载专用):http://www.cnblogs.com/Files/Tangf/Nuvi350.rar MapBar中坐标的加密和解密(JS实现) http://www.cnblogs.com/Tangf/archive/2006/06/06/419124.html 发现一个SVG做的地图网站:ChinaQuest http://www.cnblogs.com/Tangf/archive/2006/06/04/417110.html boot.ini文件的修复 http://www.cnblogs.com/Tangf/archive/2006/06/04/416915.html 再谈MAPX打包以及MAPX的安装 http://www.cnblogs.com/Tangf/archive/2006/05/31/414361.html 寻找MapBar的地图切割方法 http://www.cnblogs.com/Tangf/archive/2006/05/28/411397.html ┕我自己切割的Mapbar地图,并且可以在本地运行:http://www.cnblogs.com/Files/Tangf/MapBar_My.rar 已知一点求最近点(问题请教) http://www.cnblogs.com/Tangf/archive/2006/05/28/411182.html ┕求最近点示例代码(基于MAPX5,VB6实现):http://www.cnblogs.com/Files/Tangf/neardis.rar 基于数据库的公交换乘算法(一点思路一点问题) http://www.cnblogs.com/Tangf/archive/2006/05/28/411065.html MapInfo/ArcInfo交流(提问解答,不定时更新) http://www.cnblogs.com/Tangf/archive/2006/05/09/395489.html (收集)Shape转KML工具(更新:Google正式收购SketchUp) http://www.cnblogs.com/Tangf/archive/2006/04/26/386092.html ┕两个SHape转KML工具:http://www.cnblogs.com/Files/Tangf/shape2kml.rar 地图投影 http://www.cnblogs.com/Tangf/archive/2006/04/17/377638.html 容器透明(如PictureBox) http://www.cnblogs.com/Tangf/archive/2006/04/05/367885.html Google地图切割以及类似Google的开源API http://www.cnblogs.com/Tangf/archive/2006/03/29/362110.html 获取字符串中的指定位置的子字符串 http://www.cnblogs.com/Tangf/archive/2006/03/25/358311.html 做了个界面,请大家PP http://www.cnblogs.com/Tangf/archive/2006/03/16/351640.html [存点资料]车载导航电子地图走向标准化 http://www.cnblogs.com/Tangf/archive/2006/03/04/342733.html [ZT]谈谈 wiki 的缺点 http://www.cnblogs.com/Tangf/archive/2006/03/01/340725.html [转贴]Web地图服务:GIS走近你我 http://www.cnblogs.com/Tangf/archive/2006/02/23/336493.html 算我给Google本地和E都市做个广告吧 http://www.cnblogs.com/Tangf/archive/2006/02/18/333076.html 电子地图查询系统_v1.0_源代码(VB6+MAPX5) http://www.cnblogs.com/Tangf/archive/2006/02/15/331375.htmlGoogle ┕电子地图查询系统源代码:http://www.cnblogs.com/Files/Tangf/MapSearch_Source.rar 地图的配色问题(以及MapBar和51ditu) http://www.cnblogs.com/Tangf/archive/2006/02/12/329162.html [分享]上海市样图 http://www.cnblogs.com/Tangf/archive/2006/02/08/327310.html ┕上海市样图:http://www.cnblogs.com/Files/Tangf/Map_SH.rar 用SetupFactory打包MapX(带打好的包和打包文档以及录像) http://www.cnblogs.com/Tangf/archive/2006/02/05/325842.html ┕打包以及文档和录像:http://www.cnblogs.com/Files/Tangf/Mapx_Pack.rar ArcGIS9、MapObject2.2和ArcExplorer2.0连接ArcSDE9.0问题 http://www.cnblogs.com/Tangf/archive/2006/01/26/323698.html MapBar和MapInfo中的比例尺[更新:MapBar比例尺是正确的] http://www.cnblogs.com/Tangf/archive/2006/01/24/322854.html MapBar研究(百度地图中的JS部分) http://www.cnblogs.com/Tangf/archive/2006/01/22/321756.html ┕本地浏览,调用远程图片:http://www.cnblogs.com/Files/Tangf/MapBar_baidu.rar 浅谈WEBGIS运用栅格地图实现原理[更新:Google Maps带来的新型WebGIS设计模式] http://www.cnblogs.com/Tangf/archive/2006/01/14/317327.html 校园WebGIS开发与实践(论文部分) http://www.cnblogs.com/Tangf/archive/2006/01/13/316918.html ┕校园WEBGIS的论文下载:http://www.cnblogs.com/Files/Tangf/Campus_WebGIS.rar MapInfo中按区域分割地图的方法(带MapBasic方法) http://www.cnblogs.com/Tangf/archive/2006/01/13/316363.html MIFtoSHP通用转换工具 http://www.cnblogs.com/Tangf/archive/2006/01/06/312654.html ┕MIFtoSHP通用转换工具:http://www.cnblogs.com/Files/Tangf/MIFtoSHP.rar MIFtoTAB and TABtoMIF(MIF和TAB互转小工具) http://www.cnblogs.com/Tangf/archive/2006/01/01/309375.html ┕MIFandTAB互转工具:http://www.cnblogs.com/Files/Tangf/MIFandTAB.rar 『浪人|努力』唐丰,Rover.Tang 2006.08.05

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧