想进行GIS的项目开发,但是不知道怎么开始,请帮帮小弟!!(100分)

  • 主题发起人 xiao_chenke
  • 开始时间
X

xiao_chenke

Unregistered / Unconfirmed
GUEST, unregistred user!
我们公司现在想上GIS的项目,上司让我做调研,重点是对现在的GIS的最新发展趋势、可行性、各种GIS软件的比较和实现成本等大体上的调研,小弟对GIS还是个门外汉,希望各位大虾能指点指点小弟,在此先谢过了。

对GIS的要求是:1、对地理空间数据要求不高,能实现基本的图的放大、缩小、对象的选取、对象间连线;能在地图上添加、修改、删除自定义的图标等。
2、数据库用SQL Server ,能实现C/S结构,能用ADO;
3、属于小型的GIS项目.
请帮帮小弟,分不够再加[:)]
 
怎么没人回答呀给个网地址也可以.....
期待,....
 
先买个GPS,接收GPS数据,估计下面的程序已经够你们用了。
unit Maps;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, ExtCtrls, StdCtrls, Buttons,comm232,ComObj, Menus, MapXLib_TLB,
Db, DBTables;

type
TMapsForm = class(TForm)
Timer1: TTimer;
Map1: TMap;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
Table1: TTable;
N8: TMenuItem;
N9: TMenuItem;
OpenDialog1: TOpenDialog;
Table_dtk: TTable;
Timer2: TTimer;
N10: TMenuItem;
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
Panel1: TPanel;
Edit1: TEdit;
BitBtn1: TBitBtn;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Map1ToolUsed(Sender: TObject;
ToolNum: Smallint;
X1, Y1, X2,
Y2, Distance:do
uble;
Shift, Ctrl: WordBool;
var EnableDefault: WordBool);
private
{ Private declarations }
public
{ Public declarations }
Buf,Pb:pbyte;
BufLen,Len:integer;
procedure MovePoint(X, Y:do
uble);
//移动目标
procedure CheckPoint(var X, Y:do
uble;TempFeature:CMapXFeature);
//自动校位
end;


var
MapsForm: TMapsForm;
Device_AD:TComm232;
i:integer;
str_b1,str_b2:boolean;
jdz,wdz:double;
MapLayerAni:CMapXLayer;
//动画层
shijian:string;
path:string;
CurrentKey:integer;
x,y:double;
implementation

{$R *.DFM}

procedure TMapsForm.CheckPoint(var X, Y:do
uble;TempFeature:CMapXFeature);
begin

if (X>Map1.Bounds.XMax) or (X<Map1.Bounds.XMin) or (y>Map1.Bounds.yMax)or (y<Map1.Bounds.yMin) then
begin
//超出图形范围
Map1.CenterX:=TempFeature.Point.X;
Map1.CenterY:=TempFeature.Point.Y;
end
end;


procedure TMapsForm.MovePoint(X, Y:do
uble);
var
DrawPoint:CMapXPoint;
//创建点
CarFeature:CMapXFeature;
//点对象类型
TempFeature:CMapXFeature;
aaa:CMapXStyle;
begin

if CurrentKey>0 then
begin
//移动
TempFeature:=MapLayerAni.GetFeatureById(CurrentKey);
//在图形上得到需要移动的点对象
TempFeature.Point.Set_(X,Y);
//更改坐标
TempFeature.Update(EmptyParam, EmptyParam);
//更新图显示
end
else

begin

DrawPoint:=CoPoint.Create;
//创建点
DrawPoint.Set_(X,Y);
//GPS打点
CarFeature:=CreateOleObject('MapX.Feature.4') as CMapXFeature;
//创建图对象
aaa:=CreateOleObject('MapX.Style.4') as CMapXStyle;
aaa.SymbolType:=1;
aaa.SymbolBitmapTransparent:=true;
aaa.SymbolBitmapName:='stop1-32.BMP';
aaa.SymbolBitmapSize:=10;
Map1.DefaultStyle:=aaa;
CarFeature:= Map1.FeatureFactory.CreateSymbol(DrawPoint,Map1.DefaultStyle);
//点形状
TempFeature:=MapLayerAni.AddFeature(CarFeature,EmptyParam);
//加载到图形上
CurrentKey:=TempFeature.FeatureID;
//得到新加载图象的ID
end;

CheckPoint(X,y,TempFeature);
//判断是否超出窗口视图范围
end;



procedure TMapsForm.Timer1Timer(Sender: TObject);
var
zh,str2,str1,ad_c,wd,jd:string;
str_i,wd_n,jd_n,wxsl_n:integer;

begin

Device_AD.ReceRawData(Buf,Buflen);
if Buflen=0 then
begin

Device_AD.Destroy;
Device_AD:=TComm232.Create;
//初始化波形串口
Device_AD.Settings:=edit1.text+',115200,0,8,0';
//设置波形串口参数:端口名,速率,校验,数据位,停止位
Device_AD.PortOpen:=True;
Device_AD.SetCtrlSign(False,False);
timer1.Enabled:=true;
exit;
end;


Str1:='';
Str2:='';
str_b1:=false;
str_b2:=false;
str_i:=0;
if BufLen>0 then
begin

PB:=Buf;
for i:=0 to BufLen-1do
begin

Str2:=Str2+IntToHex(PB^,2);
if (str_b1=false) and (copy(str2,length(str2)-5,6)='404040') then
begin

str1:='';
str2:='';
str_b1:=true;
end;

if str_b1 then
begin

str_i:=str_i+1;
Str1:=Str1+IntToHex(PB^,2);
len:=41;
if (str_i=len) and (copy(str1,length(str1)-1,2)='23') then
begin
// 没有第二速度
str_b2:=true;
break;
end;

end;

Inc(PB);
end;

if (str_b2<>true) or (copy(str1,31,16)='3030303030303030') then
str1:='';
end;

if str_b2<>true then
begin

Timer1.Enabled :=true;
exit;
end;

//纬度
ad_c:=copy(str1,31,8);
if ad_c<>'' then

begin

insert('$',ad_c,1);
wd_n:=(strtoint(ad_c));
wd:=inttostr(strtoint(ad_c));
end else

begin

Timer1.Enabled :=true;
exit;
end;

//经度
try
ad_c:=copy(str1,39,8);
insert('$',ad_c,1);
jd_n:=strtoint(ad_c);
jd:=inttostr(strtoint(ad_c));
except
Timer1.Enabled :=true;
exit;
end;

//移动点
wdz:=strtoint(wd)/60000;
jdz:=strtoint(jd)/60000;
// table1.open;
Table1.Append;

Table1.FieldByName('jdz').asfloat:=jdz;
Table1.FieldByName('wdz').asfloat:=wdz;
Table1.Post;
// table1.Close;
if (jdz<0) or (jdz>360) then
exit;
if (wdz<0) or (wdz>90) then
exit;
MovePoint(jdz,wdz);
end;


procedure TMapsForm.FormCreate(Sender: TObject);
var shijian:string;
path:string;
begin

MapsForm.Left:=0;
MapsForm.Top:=0;
MapsForm.Width:=1024;
MapsForm.Height:=768;
Map1.Left:=0;
Map1.Top:=0;
Map1.Width:=1024;
Map1.Height:=768;
Device_AD:=TComm232.Create;
//初始化波形串口
Device_AD.Settings:=edit1.text+',115200,0,8,0';
//设置波形串口参数:端口名,速率,校验,数据位,停止位
if not Device_AD.PortOpen then

begin

Device_AD.PortOpen:=True;
Device_AD.SetCtrlSign(False,False);
end;

//初始化
Map1.Geoset:='d:/Maps/Map/china.gst';
//装载图
MapLayerAni :=Map1.Layers.CreateLayer('MapLayerAni', EmptyParam,1,EmptyParam, EmptyParam);
//创建动画层
Map1.RedrawInterval:=50;
//自动重绘周期
Map1.AutoRedraw:=True;
Map1.Layers.AnimationLayer:=MapLayerAni;
//指定当前动画层
Map1.TitleText:='';
Map1.CurrentTool:=miPanTool;
Map1.Align:=alclient;

end;


procedure TMapsForm.Button1Click(Sender: TObject);
begin

Map1.DefaultStyle.PickSymbol;
end;


procedure TMapsForm.N2Click(Sender: TObject);
begin

timer1.Enabled:=false;
close;
end;


procedure TMapsForm.N4Click(Sender: TObject);
begin

Map1.CurrentTool:=miZoomInTool;
end;


procedure TMapsForm.N6Click(Sender: TObject);
begin

Map1.CurrentTool:=miPanTool
end;


procedure TMapsForm.N5Click(Sender: TObject);
begin

Map1.CurrentTool:=miZoomOutTool;
end;


procedure TMapsForm.N7Click(Sender: TObject);
begin

Map1.DefaultStyle.PickSymbol;
end;


procedure TMapsForm.N9Click(Sender: TObject);
var ml_c:string;
ml_c1:string;
ml_c2:string;
hf_wjm,hf_ml:string;
begin

timer1.Enabled:=false;
opendialog1.Filter:='*.db';
opendialog1.FileName:='*.db';
if opendialog1.Execute then
begin

//获得目录、文件名
ml_c:='';
ml_c1:='';
ml_c2:='';
hf_ml:='';
hf_wjm:='';
ml_c:=opendialog1.files[0];
while pos('/',ml_c)<>0do
begin

ml_c1:=copy(ml_c,1,pos('/',ml_c));
ml_c2:=copy(ml_c,pos('/',ml_c)+1,100);
hf_ml:=hf_ml+ml_c1;
ml_c:=ml_c2;
end;

hf_wjm:=ml_c;
table_dtk.close;
table_dtk.DataBaseName:='d:/maps/db/';
table_dtk.TableName:=(hf_wjm);
table_dtk.open;
table_dtk.First;
timer2.Enabled:=true;
end;

end;


procedure TMapsForm.Timer2Timer(Sender: TObject);
begin


wdz:=table_dtk.fieldbyname('wdz').asfloat;
jdz:=table_dtk.fieldbyname('jdz').asfloat;
if (jdz<0) or (jdz>360) then
exit;
if (wdz<0) or (wdz>90) then
exit;
MovePoint(jdz,wdz);
table_dtk.Next;
end;


procedure TMapsForm.N10Click(Sender: TObject);

begin

shijian:=formatdatetime('yyyymmddss',now);
path:=extractfilepath(application.ExeName);
//系统路径
Table1.close;
Table1:=TTable.Create(nil);
Table1.DataBaseName:=path+'db';
Table1.TableType:=ttDefault;
Table1.TableName:=shijian+'.db';
Table1.Close;
Table1.FieldDefs.Clear;
Table1.FieldDefs.Add('jdz',ftfloat,0,False);
//0
Table1.FieldDefs.Add('wdz',ftfloat,0,False);
//1
Table1.CreateTable;
Table1.open;
Timer1.Enabled:=true;
end;


procedure TMapsForm.N11Click(Sender: TObject);
begin

shijian:=formatdatetime('yyyymmddss',now);
path:=extractfilepath(application.ExeName);
//系统路径
Table1.close;
Table1:=TTable.Create(nil);
Table1.DataBaseName:=path+'db';
Table1.TableType:=ttDefault;
Table1.TableName:=shijian+'.db';
Table1.Close;
Table1.FieldDefs.Clear;
Table1.FieldDefs.Add('jdz',ftfloat,0,False);
//0
Table1.FieldDefs.Add('wdz',ftfloat,0,False);
//1
Table1.CreateTable;
Table1.open;
Timer1.Enabled:=true;

end;


procedure TMapsForm.N12Click(Sender: TObject);
begin

Map1.CurrentTool:=miZoomInTool;
end;


procedure TMapsForm.N13Click(Sender: TObject);
begin

Map1.CurrentTool:=miZoomOutTool;
end;


procedure TMapsForm.N14Click(Sender: TObject);
begin

Map1.CurrentTool:=miPanTool
end;


procedure TMapsForm.N15Click(Sender: TObject);
begin

Map1.DefaultStyle.PickSymbol;
end;


procedure TMapsForm.N16Click(Sender: TObject);
begin

close;
end;


procedure TMapsForm.N17Click(Sender: TObject);
begin

panel1.Visible:=true;
end;


procedure TMapsForm.BitBtn1Click(Sender: TObject);
begin

panel1.Visible:=false;
end;


procedure TMapsForm.Map1ToolUsed(Sender: TObject;
ToolNum: Smallint;
X1,
Y1, X2, Y2, Distance:do
uble;
Shift, Ctrl: WordBool;
var EnableDefault: WordBool);
begin

x:=x1;
y:=y1;
end;


end.
 
昨天看到了,想回复来着。可是问题太多了不知道该怎么回复。还有GIS版风气不好,回答了问题,往往没有回复,也不结帖,都不知道问题有没有解决。
先给你几个网址吧。
http://www.gissky.net/
http://clm.njau.edu.cn/wx/GIS/MapObject.htm
http://person.swust.edu.cn/my12121/paper.htm
http://lab.irsa.ac.cn/showforum.asp?boardID=17&amp;RootID=4591&amp;ID=4591
http://www.sohi.cn/gismile/
http://www.teleware.com.cn/njxz-1.asp
http://www.sohi.cn/software/mapx.htm
 
你的要求不算很难,我这里有一个自己写的DEMO,有需求的话发邮件给我,我发给你。
wangy160@163.com
 
先要选择好组件,比如mapx或者mo找到他们的开发帮助指南

 
谢谢上面的各位朋友:
可能你们有点误会我的意思,目前是做一些调研,还没有决定用MapX或者mo,我的意思是想知道目前的GIS的方向,因为我也浏览了很多GIS的网站,因为太多看的我仗二和尚摸不着头脑,想请各位大虾指点迷津,只须要大体上的介绍就可以了:

比如:地图的获取方式、各个GIS软件地图的兼容、哪种GIS在对于一般小型的项目二次开发上更好些、分发和licence的情况,性价比方面的考虑。
 
to yostgxf:
[^]说的也是,这种情况让人很气愤!!我们鄙视他!!!!

大家放心分肯定是要给的。
由于在公司不能上网(领导脑袋有包),不能及时回复大家,我只能晚上回家上网,请大家谅解。
 
呵呵,其实也不是分的问题,既然讨论了希望有个结果。

我发表一点意见吧,供参考。
我对MapX和Mo比较熟悉一点,对其它的组件不熟悉。
1。我认为使用组件比通过OLE用Mapinfo之类的平台好,就是不谈技术,以后发布要好的多。
2。这二种地图格式都比较通用,并且相互之间可以转换。相对来说MapInfo格式的要用的多一些。
3。从性能和功能来说ESRI公司的(Mo)要比MapInfo强大的多,但开发难度也大一些。
4。从组件和licence费用来说,差的不多。
5。MapX的例子代码要多一些,相关资料也多一些,对delphi的支持好像也要好一点,但发布要麻烦一些,对数据库的支持要差一些。

对于你的情况,我建议你选用MapX。
 
To yostgxf:
我们面对的主要是一些县级的单位,所以用户很多,没个地方都要地图,单对图的要求又不是很高,主要是能对位置进行定位等简单操作,由于数量多所以licence 和 电子地图是很头痛的问题,成本高了用户不能接受。

不知道国产的GIS有没有物美价廉的?
 
如果用户很多,licence的相对费用就很低了呀。一般超过50个就可以无用户限制。有时候30个就可以。还有D版嘿嘿。
MapX是最物美价廉的,我认为。
 
不知道GIS还需要了解其它什么技术呢?
 
这怎么说呢,GIS就是地理信息系统。有关地理信息技术要搞透就很难了,将就用吧
 
问题就此结束了,主要是问题的范围不是很明确太大了不好怎么说,我在捉摸捉摸,
谢谢个位,给分了。
 

Similar threads

回复
0
查看
665
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部