作者:miles 文章来源:https://www.doczj.com/doc/c37734974.html, 点击数:3023 更新时间:2006-2-10
11:44:53
一、MAPGIS简介
信息作为一种新兴的产业越来越受到人们的重视,信息革命的浪潮正冲击着人类社会,在这场革命中,地理信息系统(GIS)作为集计算机科学、地理学、测绘遥感学、环境科学、城市科学、空间科学、信息科学和管理科学为一体的新兴边缘学科迅速地兴起和发展起来。地理信息系统研究计算机技术和空间地理分布数据的结合,通过一系列空间操作和分析方法,为地球科学、环境科学和工程设计,乃至企业管理提供对规划、管理和决策有用的信息,并回答用户所提出的有关问题。
地理信息系统目前发展已相当成熟,国外高水平软件分别有ARC/INFO、MAPINF O等;同时国内高水平软件也较多,尤其以中国地质大学(武汉)研制的MAPGIS最为先进,其功能达到甚至超过国外同类软件的水平,而且为我国自主开发、自主版权的纯中文软件。本次软件的开发所采用的地理信息系统平台是MAPGIS平台。该平台在十几年数字制图软件开发的基础上,开发成为GIS软件以及GIS应用系统。目前该地理信息系统已达到国际先进水平。1997年、1998年、1999年、2000年连续全国评测第一。目前,在该原型系统的基础上目前已完成了管网系统、警用电子地图系统、作战指挥系统、城市规划建设系统、旅游系统等一系列应用系统的开发。MAPGIS地理信息系统适用于地质、矿产、地理、测绘、水利、石油、煤炭、铁道、交通、城建、规划及土地管理专业。
MAPGIS是具有国际先进水平的完整的地理信息系统,它分为"输入"、"图形编辑"、"库管理"、"空间分析"、"输出"以及"实用服务"六大部分,共计十六个子系统。功能十分强大,而且好懂易用,界面友好,兼容性教好。
因此本GIS浏览器采用MAPGIS的二次开发,为MAPGIS浏览器。
二、MAPGIS浏览器的开发目的
MAPGIS既然具有那么多的好处,功能又是如此的强大,那为什么还要似乎多此一举地开发什么MAPGIS浏览器呢?
首先,经济方面问题。MAPGIS本身的功能是十分的强大,而且应用又非常广泛,但是这种专业性极强的软件的价钱也是很可观的。并不是每个人都能买得起该软件。
其次,用途方面问题。花那么多的钱买功能这么强大的软件究竟要干什么,是否能够用到其中的全部功能或者大部分功能。显而易见,大多数的单位或者个人只能用到其中的一部分功能,甚至有的单位只用其中的一小部分功能。
近日,笔者一直在进行着的MAPGIS的二次开发就是一个与上述很相似的问题。该软件只是负责浏览MAPGIS绘制的地图,因而不需要MAPGIS这个庞大的系统来支
持,只需要一个MAPGIS的浏览器即可。这就是为什么要开发MAPGIS浏览器的原因。
三、系统浏览器的组成
本系统浏览器以MAPGIS的图形库作为底层支持,主要由文件输入、图形浏览、查询、工具、其它等几个模块组成。下面分别叙述。
(一)文件输入
该部分功能为将各图件的组成,如点、线、面等三类文件以工程文件形式输入浏览器。
文件输入以菜单事件驱动,当点击各图形对应的菜单时,即调入相应的项目文件,将项目文件中所含的图形组成部分全部读入计算机内,立即显示。
各项目文件格式为:如XXX.PRJ项目文件内容:
1、图形库组成文件数:N
2、区图元文件:XXX.WP
3、线图元文件:XXX.WL =N
4、点图元文件:XXX.WT
格式中区、线、点图元文件各点一行,总数为N。区、线、点图元文件不一定齐全,例如,可以只有区程线图元文件。
该种格式的方便之处在于,图库的变化只需修改项目文件即可,无需重新修改软件代码。
(二)图形浏览
图形浏览一方面浏览图形,另一方面浏览图形的属性信息。该部分功能具有浏览单点图元文件点图元文件点图元文件一或多个属性的能力,以及选择图形工作区和图漫游。
图形浏览菜单下内容,其中有:
1、浏览属性
点击此项菜单时,弹出所有图元文件,可任意选择需要浏览的图形,及其属性。选择后立即弹出一属性表单,表单中各子图元与图形联动,一但属性表单中某项被选中,相应的图形立即位于窗口中心闪烁显示,选择图形也可联动,十分方便于浏览全部图形与属性。
2、浏览单个属性
此项为浏览单个图形的属性,使用时先选择单个工作区,双击所需浏览的图形,被选择者即以闪烁方式显示,同时弹出其属性。
3、停止闪烁
单击时可终止点、线、区或全部正在显示的图形。
4、图形漫游
选择该项后,移动鼠标图形可随之移动,呈漫游状态显示。
5、选择工作区
即选择点、线或者区进行显示,可突出个别图形。
(三)查询
该部分具有点、线、面的查询能力,并能对点线面按其属性进行查询、提取保存,十分方便于专业性应用;同时查询结果能与数据库相关联,从数据库中查询更丰富的资料。
查询菜单项包括点线面查询与提取,两者均通过对话框输入条件进行查询与提取。
(四)工具
工具部分主要为图形显示操作。
该工具对图形窗口进行操作,如放大、缩小、移动窗口等。上级窗口为恢复前一次窗口形式;复位窗口则自动将图形大小恰好显示于窗口中;更新窗口则用于将窗口刷新显示;清窗口使窗口内容全部清除。
(五)其它
该部分为辅助功能,可分别单个输入点、线、面文件,以及面积、周长、长度统计。
输入点、线、面文件:用于输入其它点、线、面图形文件,方便于浏览其它图形文件,同时可使用该浏览器的其它功能。
面积、周长、长度统计:该统计功能适用于快速计算区域面积、周长,以及线段(如河流、道路等)的长度。
四、系统实现的部分程序清单
// CGisView_Demo1View.cpp : implementation of the CCGisView_Demo1View class
//
#include "stdafx.h"
#include "CGisView_Demo1.h"
#include "ddeobj.h"
#include "CGisView_Demo1Doc.h"
#include "CGisView_Demo1View.h"
#include "dialog2.h"
#include "Win_area.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "childfrm.h"
/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View
IMPLEMENT_DYNCREATE(CCGisView_Demo1View, CGisView)
BEGIN_MESSAGE_MAP(CCGisView_Demo1View, CGisView)
……
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View construction/destruction
extern HDDEDATA CALLBACK EXPORT DdeCallback(UINT iType,UINT iFmt,HCO NV hCconv, HSZ hsz1, HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dw Data2);
CDDEObj theDDE;
HWND hwnd;
char * Dwarfs[]={"Grumpy","Sleepy","Sneezy","Bashful","Dopey","Happy","Doc"};
char *Reindeer[]={"Dasher","Dancer","Prancer","Vixen","Comet","Cupid","Donner","Blitze n"};
CCGisView_Demo1View::CCGisView_Demo1View()
{bmp1.LoadBitmap(IDB_BITMAP1);
LButtonPos=(0,0);
gotoanywhere_flage=false;
querybore_flage=false;
flashtype=-1;
connectToDbs=false;
curview_area=-1;
curview_type=-1;
//DDE Initialize
DdeInitialize(&(theDDE.idInst),DdeCallback,APPCLASS_STANDARD |CBF_FAIL_ADVI SES |
CBF_FAIL_EXECUTES |CBF_FAIL_POKES |CBF_SKIP_REGISTRATIONS | CBF_SK IP_UNREGISTRATIONS,0L);
HSZ hszService;
theDDE.AppName="MyDDEApp";
hszService=DdeCreateStringHandle(theDDE.idInst,theDDE.AppName,0); DdeNameService(theDDE.idInst,hszService,NULL,DNS_REGISTER);
//DDE end
}
HDDEDATA CALLBACK EXPORT DdeCallback(UINT iType,UINT iFmt,HCONV hC conv,
HSZ hsz1, HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dwData2)
{//Topic=hsz1 Item=hsz2.
char szBuffer[32];
switch(iType) {
case XTYP_CONNECT:
//GET the application name
DdeQueryString((theDDE.fakeThis)->idInst,hsz2,szBuffer,sizeof(szBuffer),0);
if((theDDE.fakeThis)->AppName!=szBuffer)
return false;
DdeQueryString((theDDE.fakeThis)->idInst,hsz1,
szBuffer,sizeof(szBuffer),0);
if(strcmp(szBuffer,"Dwarfs") && strcmp(szBuffer,"Reindeer"))
return false;
return (HDDEDATA)TRUE;
break;
case XTYP_REQUEST:
DdeQueryString((theDDE.fakeThis)->idInst,hsz1,
szBuffer,sizeof(szBuffer),0);
if(strcmp(szBuffer,"Dwarfs")==0)
{ //get the item name
DdeQueryString((theDDE.fakeThis)->idInst,hsz2,
szBuffer,sizeof(szBuffer),0);
int dwarfcode=atoi(szBuffer);
// SendMessage(hwnd,WM_COMMAND,ID_TRY2,0L);
if((dwarfcode<0) || (dwarfcode>6))
return false;
return DdeCreateDataHandle((theDDE.fakeThis)->idInst,
(LPBYTE)Dwarfs[dwarfcode],
strlen(Dwarfs[dwarfcode])+1,
0,hsz2,CF_TEXT,0);
}
}
return NULL;
}
CCGisView_Demo1View::~CCGisView_Demo1View()
{}
BOOL CCGisView_Demo1View::PreCreateWindow(CREATESTRUCT& cs) {
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
// ptai=NULL;//选择显示区
return CGisView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View drawing
void CCGisView_Demo1View::OnDraw(CDC* pDC)
{
CCGisView_Demo1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
hwnd=m_hWnd;
// TODO: add draw code for native data here
CGisView::OnDraw(pDC);
}
void CCGisView_Demo1View::_OwnerDraw(MyDC myDC)
{
short ti,i,j,k;
short *pLst;
short type;
BOOL flage=false;
CCGisView_Demo1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
_GetAreaList(&pLst);
if(pLst==NULL)
return;
for(ti=0;ti<4;ti++) //循环4次,依次显示区,线,点,网
{
switch(ti)
{
case 0: type=REG; break;
case 1: type=NET; break;
case 2: type=LIN; break;
case 3: type=PNT; break;
}
if(pDoc->ptai==NULL) //选择显示区)
{
for(i=1;i<=pLst[0];i++)
{
if(type!=_GetAreaType(pLst[i]))
continue;
switch(type)
{
case PNT: _DispPntArea(myDC,pLst[i]); break;
case LIN: _DispLinArea(myDC,pLst[i]); break;
case REG: _DispRegArea(myDC,pLst[i]); break;
case NET: _DispLinArea(myDC,pLst[i]); break; default: break;
}
}
}
else
for(i=1;i<=pDoc->ptai[0];i++)
{
if(type!=_GetAreaType(pDoc->ptai[i]))
continue;
for(k=1;k<=pLst[0];k++) {
if(pLst[k]==pDoc->ptai[i]) {flage=true; break;}
flage=false;
}
if(flage)
switch(type)
{
case PNT: _DispPntArea(myDC,pDoc->ptai[i]); break; case LIN: _DispLinArea(myDC,pDoc->ptai[i]); break; case REG: _DispRegArea(myDC,pDoc->ptai[i]); break; case NET: _DispLinArea(myDC,pDoc->ptai[i]); break; default: break;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View diagnostics
#ifdef _DEBUG
void CCGisView_Demo1View::AssertValid() const
{
CGisView::AssertValid();
}
void CCGisView_Demo1View::Dump(CDumpContext& dc) const
{
CGisView::Dump(dc);
}
CCGisView_Demo1Doc* CCGisView_Demo1View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCGisView_Demo1Doc))); return (CCGisView_Demo1Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View message handlers
void CCGisView_Demo1View::LoadAFile(short fType)
{
CCGisView_Demo1App *ptApp;
short ai,i;
short *pOldLst;
short *pNewLst;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
ai=_OpenArea(ptApp->m_AHInst,fType); //打开一个fType类型的空工作区
if(ai<=0) //失败则返回
return;
if(!_LoadFile(ai)) //装入文件到ai工作区,若失败则关闭工作区,然后返回
{
_CloseArea(ai);
return;
}
_GetAreaList(&pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
pNewLst=new short [pOldLst[0]+2];//
pNewLst[0]=pOldLst[0]+1;
for(i=1;i<=pOldLst[0];i++)
pNewLst[i]=pOldLst[i];
}
else
{
pNewLst=new short [2];
pNewLst[0]=1;
i=1;
}
pNewLst[i]=ai; //再添加新的工作区
_SetAreaList(pNewLst); //重新设置当前视窗口对应的工作区
delete[] pNewLst;
_RestoreWindow(); //复位当前视窗口
return;
}
void CCGisView_Demo1View::OnLoadPnt()
{
LoadAFile(PNT); //装入点文件
}
void CCGisView_Demo1View::OnLoadLIN()
{
LoadAFile(LIN); //装入线文件
}
void CCGisView_Demo1View::OnLoadREG()
{
LoadAFile(REG); //装入区文件
}
void CCGisView_Demo1View::OnStartFlash()
{
// char _WillGetRect(char yesOrNo);
//是否将要取鼠标左键按住移动的矩型范围,该函数必须在_SetCommandFlag后面调用。_SetCommandFlag(ID_START_FLASH);
_WillGetRect(1);
return;
}
void CCGisView_Demo1View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
RECT rc;
F_RECT frc;
long *ptLst;
short *ptAiLst;
short i;
CGisView::OnLButtonUp(nFlags, point);
long cmd=_GetCommandFlag();
switch(cmd)
{
case IDMN_ENLARGE: //放大窗口
_EnlargeWindowLxy(point.x,point.y);break;
case IDMN_REDUCE: //缩小窗口
_ReduceWindowLxy(point.x,point.y);break;
case IDMN_MOVE: //移动窗口
_MoveWindowLxy(LButtonPos.x-point.x,LButtonPos.y-point.y);break;
case IDMN_LASTWIN: //上级窗口
_PrevWindow();break;
// case IDMN_RESTORE: //复位窗口
// _RestoreWindow();break;
// case IDMN_UPDATE: //更新窗口
// _UpdateWindow();break;
// case IDMN_CLEAR: //清窗口
// _CleanWindow(); break;
case ID_START_FLASH://闪烁图元
if(_GetRect(&rc))
{
_WpToLp(rc.left , rc.top , &(frc.xmin), &(frc.ymax));
_WpToLp(rc.right, rc.bottom, &(frc.xmax), &(frc.ymin));
if(_GetAreaList(&ptAiLst))
{
for(i=1;i<=1 /*ptAiLst[0]*/;i++)
{
switch(_AType(ptAiLst[i]))
{
case PNT:
ptLst=_RectAskPntToList(ptAiLst[i],&frc,NULL);
if(ptLst) {
_FlashPnt(ptAiLst[i], ptLst+1, ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst[i],PNT,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
break;
case LIN:
ptLst=_RectAskLinToList(ptAiLst[i],&frc,NULL);
if(ptLst && querybore_flage==false) {
_FlashLin(ptAiLst[i], ptLst+1,1);//ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst[i],LIN,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
break;
case REG:
ptLst=_RectAskRegToList(ptAiLst[i],&frc,NULL);
if(ptLst && querybore_flage==false) {
_FlashReg(ptAiLst[i], ptLst+1, ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst[i],REG,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
break;
default:
break;
}
}
}
}break;
default:break;
}
}
void CCGisView_Demo1View::OnStopFlashPnt()
{
_StopFlash(PNT);//停止闪烁点
}
void CCGisView_Demo1View::OnStopFlashLin()
{
_StopFlash(LIN);//停止闪烁线
}
void CCGisView_Demo1View::OnStopFlashReg()
{
_StopFlash(REG);//停止闪烁区
}
void CCGisView_Demo1View::OnEnlarge()
{//MessageBox("sdsdsd","vfsfsfs",MB_OK);
_SetCommandFlag(IDMN_ENLARGE);
}
void CCGisView_Demo1View::OnReduce()
{
_SetCommandFlag(IDMN_REDUCE);
}
void CCGisView_Demo1View::OnMove()
{
_SetCommandFlag(IDMN_MOVE);
}
void CCGisView_Demo1View::OnRestore()
{
_RestoreWindow();//复位窗口
}
void CCGisView_Demo1View::OnUpdate()
{
_UpdateWindow();//更新窗口
}
void CCGisView_Demo1View::OnLastwin()
{
_PrevWindow();//上级窗口
}
void CCGisView_Demo1View::OnClear()
{
_CleanWindow();//清窗口
}
void CCGisView_Demo1View::OnLButtonDown(UINT nFlags, CPoint point) {
LButtonPos=point;
CGisView::OnLButtonDown(nFlags, point);
}
void CCGisView_Demo1View::OnRButtonDown(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default
if(gotoanywhere_flage)
CheckMenuItem(m_hGisViewPopMn,ID_GOTOANYWHERE, MF_CHECKED );
else
CheckMenuItem(m_hGisViewPopMn,ID_GOTOANYWHERE, MF_UNCHECKED);
_SetCommandFlag(0);
CGisView::OnRButtonDown(nFlags, point);
}
int CCGisView_Demo1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CGisView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code hereID_BMP
AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
//AppendMenu( m_hGisViewPopMn, MF_BITMAP,ID_BMP, (LPCSTR)bmp1.GetSafeHa ndle());//(CBitmap::FromHandle(bmp1)));//MAKEINTRESOURCE(IDB_BITMAP1)); AppendMenu( m_hGisViewPopMn, MF_STRING,ID_TRY,"浏览属性"); AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
AppendMenu( m_hGisViewPopMn, MF_STRING,ID_START_FLASH,"浏览单个属性"); AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
AppendMenu( m_hGisViewPopMn, MF_STRING,IDMN_STOP_FLASH_PNT,"停止闪烁点");
AppendMenu( m_hGisViewPopMn, MF_STRING,IDMN_STOP_FLASH_LIN,"停止闪烁线");
AppendMenu( m_hGisViewPopMn, MF_STRING,IDMN_STOP_FLASH_REG,"停止闪烁区");
AppendMenu( m_hGisViewPopMn, MF_STRING,ID_STOPALL_FLASH,"停止全部闪烁");
AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
AppendMenu( m_hGisViewPopMn, MF_UNCHECKED ,ID_GOTOANYWHERE,"图形漫游");
return 0;
}
BOOL CCGisView_Demo1View::OnCommand(WPARAM wParam, LPARAM lParam) {
// TODO: Add your specialized code here and/or call the base class
switch(wParam)
{
case ID_BMP://MessageBox("vvvvvv");
dialog2 dlg;
dlg.DoModal();
break;
}
return CGisView::OnCommand(wParam, lParam);
}
void CCGisView_Demo1View::OnTry()
{
CCGisView_Demo1App *ptApp;
//AREA_HINST hinst=GetAreaInst();
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
//ai=_OpenArea(ptApp->m_AHInst
attHwnd=_ViewAtt(GetSafeHwnd() ,ptApp->m_AHInst,WS_CAPTION);
//if(_ViewAtt(GetSafeHwnd() ,ptApp->m_AHInst,WS_CAPTION)==NULL)
//MessageBox("error","",MB_OK);
}
LRESULT CCGisView_Demo1View::OnMyMessage(WPARAM wParam,LPARAM lPara m)
{
LIN_INFO lin_info;
REG_INFO reg_info;
PNT_INFO pnt_info;
/* sprintf(str,"area=%d type=%d element=%d \n",((MGMSG *) lParam)->ai, ((MGMSG *) lParam)->type,
((MGMSG *) lParam)->elmi);
*/ //MessageBox(str,"",MB_OK);
curview_area=((MGMSG *) lParam)->ai;
curview_type=((MGMSG *) lParam)->type;
switch(((MGMSG *) lParam)->type){
case PNT:
_GetPntInfo(((MGMSG *) lParam)->ai,((MGMSG *) lParam)->elmi,&pnt_info);
_GotoWindowFxy(0.5*(pnt_info.rect.xmin+pnt_info.rect.xmax),
0.5*(pnt_info.rect.ymin+pnt_info.rect.ymax));
_FlashPnt(((MGMSG *) lParam)->ai, &(((MGMSG *) lParam)->elmi), 1);
flashtype=PNT;
break;
case LIN:
_GetLinInfo(((MGMSG *) lParam)->ai,((MGMSG *) lParam)->elmi,&lin_info);
_GotoWindowFxy(0.5*(lin_info.rect.xmin+lin_info.rect.xmax),
0.5*(lin_info.rect.ymin+lin_info.rect.ymax));
_FlashLin(((MGMSG *) lParam)->ai, &(((MGMSG *) lParam)->elmi), 1);
flashtype=LIN;
//MessageBox("flash lin","MSG",MB_OK);
break;
case REG:
_GetRegInfo(((MGMSG *) lParam)->ai,((MGMSG *) lParam)->elmi,®_info);
_GotoWindowFxy(0.5*(reg_info.rect.xmin+reg_info.rect.xmax),
0.5*(reg_info.rect.ymin+reg_info.rect.ymax));
_FlashReg(((MGMSG *) lParam)->ai, &(((MGMSG *) lParam)->elmi), 1);
flashtype=REG;
break;
default:
break;
}
return 0;
}
LRESULT CCGisView_Demo1View::OnDestroyAttWnd(WPARAM wParam,LPARAM l Param){
if(lParam==0 && attHwnd!=NULL) {
attHwnd=NULL;
curview_area=-1;
curview_type=-1;
_StopFlash(LIN);_StopFlash(PNT);_StopFlash(REG);
}
return 0;
}
void CCGisView_Demo1View::OnLButtonDblClk(UINT nFlags, CPoint point)
{
RECT rc;
F_RECT frc;
long *ptLst;
short *ptAiLst;
short i;
ATT_STRU *stru;
char *att;
char ptStr[256];
long cmd=_GetCommandFlag();
if(cmd==ID_START_FLASH || attHwnd!=NULL)//闪烁图元
{
rc.left=point.x-10; rc.bottom=point.y+10;
rc.right=point.x+10; rc.top=point.y-10;
{
_WpToLp(rc.left , rc.top , &(frc.xmin), &(frc.ymax));
_WpToLp(rc.right, rc.bottom, &(frc.xmax), &(frc.ymin));
if(_GetAreaList(&ptAiLst))
{
for(i=1;i<=ptAiLst[0];i++)
{
switch(_AType(ptAiLst[i]))
{
case PNT:
ptLst=_RectAskPntToList(ptAiLst[i],&frc,NULL);
if(ptLst) {
if(attHwnd==NULL&& curview_area==-1) {
_FlashPnt(ptAiLst[i], ptLst+1,1); //ptLst[0]);
if(connectToDbs) {
_GetAtt(ptAiLst[i],PNT,*(ptLst+1),&stru,&att);
if(_CvtFldToString1(stru,att,"钻孔号",ptStr,256,NULL,NULL))
{// MessageBox(ptStr,ptStr,MB_OK);
pb.ExcuteServiceCmd(ptStr);}
else
_ViewARcd(GetSafeHwnd(),ptAiLst[i],PNT,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else
_ViewARcd(GetSafeHwnd(),ptAiLst[i],PNT,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else if(flashtype==PNT) {
//_FlashPnt(ptAiLst[i], ptLst+1,1); //ptLst[0]);
::SendMessage(attHwnd,WM_COMMAND,GOTO_ATT,*(ptLst+1));
}
break;
}
case LIN:
ptLst=_RectAskLinToList(ptAiLst[i],&frc,NULL);
if(ptLst && querybore_flage==false)
{
if(attHwnd==NULL&& curview_area==-1) {
_FlashLin(ptAiLst[i], ptLst+1,1); // ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst[i],LIN,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else if(flashtype==LIN) {
//_FlashLin(ptAiLst[i], ptLst+1,1); // ptLst[0]);
::SendMessage(attHwnd,WM_COMMAND,GOTO_ATT,*(ptLst+1));
//MessageBox("flash lin","",MB_OK);
}
break;
}
case REG:
ptLst=_RectAskRegToList(ptAiLst[i],&frc,NULL);
if(ptLst && querybore_flage==false)
{
if(attHwnd==NULL&& curview_area==-1) {
_FlashReg(ptAiLst[i], ptLst+1,1); // ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst[i],REG,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else if(flashtype==REG) {
//_FlashLin(ptAiLst[i], ptLst+1,1); // ptLst[0]);
::SendMessage(attHwnd,WM_COMMAND,GOTO_ATT,*(ptLst+1));
//MessageBox("flash reg","regg",MB_OK);
}
break;
}
default:
break;
}
}
}
}
}
CGisView::OnLButtonDblClk(nFlags, point);
}
void CCGisView_Demo1View::OnDestroy()
{ short *ptAiLst;
int i;
if(_GetAreaList(&ptAiLst))
{
for(i=1;i<=ptAiLst[0];i++)
{
//_SaveFile(ptAiLst[i]);
_CloseArea(ptAiLst[i]);
}
}
CGisView::OnDestroy();
//MessageBox("Close Child Frame view","",MB_OK);
}
void CCGisView_Demo1View::OnMouseMove(UINT nFlags, CPoint point)
{
F_DOT xy1;
//F_RECT frc;
RECT frc;
long dx,dy;
CPoint point2;
GetClientRect(&frc);
if(gotoanywhere_flage){
if(point.x<=frc.left+50) dx=50;
if(point.x>=frc.right-50) dx=-50;
if(point.y<=frc.top+50) dy=50;
if(point.y>=frc.bottom-50) dy=-50;
if(point.x<=frc.left+50 || point.x>=frc.right-50 ||
point.y<=frc.top+50 || point.y>=frc.bottom-50 ){
GetCursorPos(&point2);
point2.x+=dx; point2.y+=dy;
_WpToLp(&point,&xy1);
_GotoWindowFxy(xy1.x,xy1.y);
SetCursorPos(point2.x,point2.y);//0.5*(frc.left+frc.right),0.5*(frc.top+frc.bottom));
}
}
CGisView::OnMouseMove(nFlags, point);
}
void CCGisView_Demo1View::OnGotoanywhere()
{
gotoanywhere_flage=!gotoanywhere_flage;
}
void CCGisView_Demo1View::OnUpdateGotoanywhere(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(gotoanywhere_flage); // TODO: Add your command update UI han dler code here
}
void CCGisView_Demo1View::OnStopallFlash()
{
_StopFlash(LIN);_StopFlash(PNT);_StopFlash(REG);
}
/*
void CCGisView_Demo1View::OnTry2()
{
//MessageBox("I am trying DDE Connection" ,"DDE OnTry2",MB_OK);
//OnStartFlash();
long *p;
short *pOldLst;
int i,ai;
LPTSTR pstr;
CString name;
char c[2];
c[0]='"'; c[1]='\0';
_GetAreaList(&pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst[i];
name.Empty();
name="钻孔编号!=";
name=name+c;
name=name+"001";
name=name+c;
pstr = name.GetBuffer(name.GetLength());
MessageBox(pstr,pstr,MB_OK);
p=_AttAskToList0(ai,PNT,pstr);
//_ _AttAskToList(ai,PNT);
if(p!=NULL) {
_FlashPnt(ai,p+1,p[0]);
}
}
}
}
*/
BOOL CCGisView_Demo1View::OpenMap(char *prj)
{
CCGisView_Demo1App *ptApp;
short ai,i;
short *pOldLst;
short *pNewLst;
FILE *fp;
short fType;
CString name;
CString path;
int j,num_file;
LPTSTR p;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
char dir[256];
//GetCurrentDirectory(200,dir);
TCHAR szFullPath[256];
TCHAR szDir[256];
TCHAR szDrive[256];
::GetModuleFileName(NULL,szFullPath,256);
_splitpath(szFullPath,szDrive,szDir,NULL,NULL);
name=szDrive;//dir;
//name=name.Left(2);
name=name+"\\mapgis32\\xzhmap";
path=name;
name=path+"\\"+prj;
//MessageBox(name,name,MB_OK);
if((fp=fopen(name,"r"))!=NULL) {
fscanf(fp,"%d\n",&num_file);
for(j=1;j<=num_file;j++) {
fscanf(fp,"%s\n",dir);
name=dir;
name.MakeUpper();
fType=-1;
if(name.Find(".WL")!=-1) fType=LIN;
if(name.Find(".WT")!=-1) fType=PNT;
if(name.Find(".WP")!=-1) fType=REG;
if(fType==-1) continue;
name=path+name;
p = name.GetBuffer(name.GetLength());
ai=_OpenArea(ptApp->m_AHInst,fType); //打开一个fType类型的空工作区
if(ai<=0) //失败则返回
return false;
if(!_LoadAFile(p/*"F:\\mapgis32\\yqmap\\china.wl"*/,ai,NULL,NULL,NULL))//_LoadFile(a i)) //装入文件到ai工作区,若失败则关闭工作区,然后返回
{
MessageBox(name,"文件不存在!!!",MB_OK);
_CloseArea(ai);
//return false;
第1章概述与安装 1.1 概述 MAPGIS 是中国地质大学(武汉)开发的、通用的工具型地理信息系统软件。它是在享有盛誉的地图编辑出版系统MAPCAD 基础上发展起来的,可对空间数据进行采集,存储,检索,分析和图形表示的计算机系统。MAPGIS 包括了MAPCAD的全部基本制图功能,可以制作具有出版精度的十分复杂的地形图、地质图,同时它能对图形数据与各种专业数据进行一体化管理和空间分析查询,从而为多源地学信息的综合分析提供了一个理想的平台。 MAPGIS 地理信息系统适用于地质、矿产、地理、测绘、水利、石油、煤炭、铁道、交通、城建、规划及土地管理专业,在该系统的基础上目前已完成了城市综合管网系统、地籍管理系统、土地利用数据库管理系统、供水管网系统、煤气管道系统、城市规划系统、电力配网系统、通信管网及自动配线系统、环保与监测系统、警用电子地图系统、作战指挥系统、GPS 导航监控系统、旅游系统等一系列应用系统的开发。 1.2安装 1)系统要求: 硬件:CPU 486 以上、16M RAM、200M 硬盘、256 色以上显示器; 操作系统:Win9x、Win2000、WinNT 、WinXP或Win7系统; 输入设备:本单位主要使用的是GRAPHTEC—RS200Pro型扫描仪; 输出设备:本单位主要使用的是Canon—IPF700型出图打印机。 2) 硬件的安装: MAPGIS 硬件部分有加密狗,ISA 卡、PCI 卡三种,本单位主要为MAPGIS USB 软件狗,在确保机器BIOS 设置中USB 设备未被禁止的条件下,Windows 98 和Windows2000 自带的标准USB 驱动程序均可支持MAPGIS USB 软件狗工作。 3)软件的安装: MAPGIS 安装程序的安装过程为:找到MAPGIS 系统安装软件,双击SETUP 图标,系统自动安装软件,在WIN2000/NT/XP 下安装时,应先运行WINNT_DRV,提示成功后才可选择SETUP 开始MAPGIS 程序的安装; 对于MAPGIS6.1 及MAPGIS6.5,则无关键字和安装选择,但须根据实际需要选择安装组件。 从上述组件中选择实际运用中需要的选项,根据提示即可完成安装。
利用VB和MAPGIS基本控件学做二次开发 摘要:本文介绍了利用VB进行MAPGIS二次开发的原理、方法和实现技术,为用户进行复杂的应用开发提供了技术基础。 关键词:VB,MAPGIS,二次开发 微软公司的Visual Basic是一个简单易学的可视化开发工具,MAPGIS提供了很多功能强大的图形和属性管理控件,并为二次开发提供了许多完备的功能接口。利用VB和MAPGIS 基本控件可以做一些基本的开发,满足用户的一些特殊需要。本文将以区文件操作开发为例,讲解二次开发的原理、方法、要点和实现技术。 第一步:首先建立VB开发环境。 安装MAPGIS SDK软件到MAPGIS安装路径下。 添加声明模块vbW60_Area.bas,该模块包含MAPGIS基本参数及结构定义、消息与版本定义等。添加的方法是:在VB程序中点取"Project"菜单下的"Add Module",添加vbW60_Area.bas文件,该文件在MAPGIS安装程序的Basic子目录下。 添加参照引用文件。这些文件是MAPGIS控件功能实现的外部参照。添加的方法是:在VB程序中点取"Project"菜单下的“References”,将MapGisBasCtl1 1.0 Type Library、MapGisBasCtl2 1.0 Type Library、MapGisBasCom 1.0 Type Library、MapGisBasCtl 1.0 Type Library四个参照文件打钩,如下图所示。 设置可执行文件输出目录。生成的可执行文件必须放在与MAPGIS安装目录的动态库和控件相同的目录中才能执行。设置的方法是:点取"File"菜单下的"Make *.exe..",选择
山西地信数码科技公司
MAPGIS 教程
8、系统弹出(如下图)对话框。在此对话框中选择我们新建好的空白文件夹。
此文件夹即为 新建好的空白 文件夹
9、选择要裁剪的文件。这儿有两种情况: ①如果(左面窗口中)所有的文件都需要进行裁剪时,我们直接点击“添加全部”即可。 ②如果(左面窗口中)只有一部分文件需裁剪时,我们要将所需裁剪的文件全部选中(即将 其选为蓝色) 。然后点击“添加”→选择全部→设置“参数” (参数的设置参照下图即可)→ →单击“参数应用” (此时左下角的窗口中会显示出我们将要进行裁剪的图形文件)→单击 “装入裁剪框” (即我们在“输入编辑”中新建好的区文件)→单击“开始裁剪”→在右下 角窗口中的任意位置单击右键,在弹出的下拉菜单中选择“复位窗口” 。这时裁剪后新的图 形文件就显示在此窗口中→退出。
5
山西地信数码科技公司
MAPGIS 教程
此处为裁剪 范围。 此图为裁剪 后的新文件。
10、最后,我们可以在“输入编辑”中打开裁剪后的文件。 (如下图)
6
山西地信数码科技公司
MAPGIS 教程
本次操作结束,如发现有不清或不对的地方请与我们联系(sxmapgis@https://www.doczj.com/doc/c37734974.html,) ,我们 会及时改正,谢谢! 这里只是讲一些快速的入门法, 如果想更深入的了解 MAPGIS 知识, 请看 MAPGIS 相关书 籍。
7
山西地信数码科技公司
MAPGIS 教程
MAPGIS 打
印
(作者:sxmapgis) 功能:打印出图. 当一张图绘制完后,我们需要把它打印出来,具体步骤如下:
如果在准备出图的过程中,如果还要进行一些修改,在菜单栏上单击“返回编辑” 。
1
(完整word版)MAPGIS67教程(制图详细步骤讲解) 编辑整理: 尊敬的读者朋友们: 这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word 版)MAPGIS67教程(制图详细步骤讲解))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。 本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)MAPGIS67教程(制图详细步骤讲解)的全部内容。
第1章概述与安装 1.1 概述 MAPGIS 是中国地质大学(武汉)开发的、通用的工具型地理信息系统软件。它是在享有盛誉的地图编辑出版系统 MAPCAD 基础上发展起来的,可对空间数据进行采集,存储,检索,分析和图形表示的计算机系统。MAPGIS 包括了 MAPCAD的全部基本制图功能,可以制作具有出版精度的十分复杂的地形图、地质图,同时它能对图形数据与各种专业数据进行一体化管理和空间分析查询,从而为多源地学信息的综合分析提供了一个理想的平台。 MAPGIS 地理信息系统适用于地质、矿产、地理、测绘、水利、石油、煤炭、铁道、交通、城建、规划及土地管理专业,在该系统的基础上目前已完成了城市综合管网系统、地籍管理系统、土地利用数据库管理系统、供水管网系统、煤气管道系统、城市规划系统、电力配网系统、通信管网及自动配线系统、环保与监测系统、警用电子地图系统、作战指挥系统、GPS 导航监控系统、旅游系统等一系列应用系统的开发。 1。2安装 1)系统要求: 硬件:CPU 486 以上、16M RAM、200M 硬盘、256 色以上显示器; 操作系统:Win9x、Win2000、WinNT 、WinXP或Win7系统; 输入设备:本单位主要使用的是GRAPHTEC—RS200Pro型扫描仪; 输出设备:本单位主要使用的是Canon—IPF700型出图打印机。 2)硬件的安装: MAPGIS 硬件部分有加密狗,ISA 卡、PCI 卡三种,本单位主要为 MAPGIS USB 软件狗,在确保机器 BIOS 设置中 USB 设备未被禁止的条件下,Windows 98 和 Windows2000 自带的标准 USB 驱动程序均可支持 MAPGIS USB 软件狗工作。 3)软件的安装: MAPGIS 安装程序的安装过程为:找到 MAPGIS 系统安装软件,双击SETUP 图标,系统自动安装软件,在 WIN2000/NT/XP 下安装时,应先运行 WINNT_DRV,提示成功后才可选择 SETUP 开始 MAPGIS 程序的安装; 对于 MAPGIS6。1 及 MAPGIS6。5,则无关键字和安装选择,但须根据实际需要选择安装组件。 从上述组件中选择实际运用中需要的选项,根据提示即可完成安装。
mapgis二次开发教程 默认分类 2009-09-08 10:18:14 阅读898 评论1 字号:大中小订阅 目前MAPGIS二次开发库主要以API函数、MFC(Microsof t Foundation Class)类库、Com组件、Activ eX 控件四种方式提供。开发库被封装在若干动态链接库(DLL)中。 API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。无论您使用VC++、VB还是BC++、Dephi…,您在这些工具中如何调用Windows的API函数,您就可以怎么调用这些二次开发函数。 MAPGIS类库是为基于MFC类库的C++开发者提供的多个可重用基类,它将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。开发者只需从类库派生即可使自己的程序获得从窗口显示控制到图形查询编辑的各项功能。 MAPGIS COM组件是MAPGIS新一代体系结构的表现,功能更加强大,使用更加便利。具有二次开发方便、易于集成、无限 扩展等特点。支持多种开发软件,包括Visual C++、Visual Basic、Delphi、script、InterDev、Power Builder等,开发者可以多层次的 访问MAPGIS组件的数据层、功能层和界面层。 Activ eX 控件是MAPGIS完成组件化改造的成果之一,它们使得二次开发更为快捷便利,代码的可复用性更高。 上述各类开发接口提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象 处理等一系列功能。其中,API函数是基础,使用上最灵活,但技巧性要求也最高。所以本书大量篇幅用于介绍C++ API函数。MAPGIS将不断丰富完善各类二次开发接口,以多种开发手段满足不同层次、不同应用的需求。这些函数所 在的C++头文件表4-1所示:
------------------- 时磊5说----- - ---- ------- 新手学习mapgis教程 一、几个术语 图层:按照一定的需要或标准把某些相关物体组合在一起。可以把图层理解为一张透明薄膜, 每一层的图元在同一薄膜上,如水系力图层、铁路图层、地质界限图层、断层图层等。图层的分层有利于地图图元的管理,提高成图速度。 栅格图:即扫描的图像。 矢量图:即进行了数字化的图像,图中的每一个点都有相对的X和Y座标。 图元:图面上表示空间信息特征的基本单位,分为点、线(孤段)、多边形等三种类型。 点元:点图元的简称,有时称点。指其位置只有一组X和Y座标来控制。 它包括字符串(注释)、子图(专用符号)等。所有点保存在点文件中(*.wt)结点:指某线或孤段的端点或数条线或孤段的交点。 结点平差:使几条线或孤段成为共用一个结点的过程 线图元:地图中线状物的总称。如划线、省界、国界、地质界线、断层、水系、公路等。所有线图元都保存在线文件中(*.wl) 区图元(面图元):由线或孤段组的封闭区域,可以以颜色和花纹图案填充。如湖泊、地层、岩体分布区等。所有区图元都保存在区文件中(*.wp )。 工程:对一系列的点、线、面文件进行管理的描述性文件。 二、MAPGIS几种主要文件类型及后缀 .wp区(面)文件.pnt控制点文件 .wl线文件 .wt点文件 ?tif栅格文件 .rbm光栅求反后文件 .mpj工程文件 ?cln图例板文件 点文件(.wt):包括文字注记、符号等。即在输入时,文字和符号都存在点 文件中。在机助制图时,文字注记称为注释(如各种标注等),符号称为子图(矿 点符号,泉符号等)。 线文件(.wl):是由境界线、河流、航空线、海岸线等线状地物组成的图元。 面文件(.wp):将各个行政区进行普染色后,就得到了区文件。在理论上,区是封闭的线组成的区域,因此区是基于线生成的。 工程(.mpj):对一系列的点、线、面文件进行管理的描述性文件。其主要记录了各个文件的信息,如存放地、可编辑性等。(如何建立工程,见以后) 图形处理一输入编辑 一、输入编辑步聚 主要步骤为: 1将图件进件进行扫描,成灰度、或彩色、或二值。 2、建立相应的工作目录,即建立自已的工作文件夹。女口mapgis学习 3、将扫描的图像拷入到工作文件夹中, 4、将系统库(相当于\mapgis65\slib文件夹)拷到工作文件夹中。
MAPGIS VirtualEarth 二次开发技术篇
目录 目录..............................................................................................................................................- 2 - 1 概述..............................................................................................................................- 3 - 2 开发环境介绍..............................................................................................................- 3 - 2.1开发环境................................................................................................................- 3 - 2.2开发软件---Eclipse................................................................................................- 4 - 3 MAPGIS VirtualEarth二次开发技术........................................................................- 1 4 - 3.1 JavaScript脚本语言.............................................................................................- 14 - 3.2 Java语言...............................................................................................................- 16 - 3.3 HTML语言..........................................................................................................- 18 - 3.4 JSP技术................................................................................................................- 19 - 3.5 数据库(SQL Server/Oracle)..........................................................................- 20 - 3.6 XML语言.............................................................................................................- 21 -
MAPGIS教程(基础篇)
基础篇 (MAPGIS) 广东友元国土信息工程有限公司编制 2009年7月 2
目录 第一讲MAPGIS 简介 (4) 一、几个术语 (4) 二、MAPGIS 几种主要文件类型及后缀 (5) 三、MAPGIS 总体结构 (5) 四、MAPGIS 安装 (6) 第二讲图形处理—输入编辑 (8) 一、输入编辑步聚 (8) 第三讲线、点的输入及编辑操作错误!未定义书签。 第四讲造区 (12) 一、检查线是否有错误 (12) 二、造区 (12) 三、需熟知的几种区操作 (13) 第五讲误差校正 (16) 第一步:采集较正控制点 (17) 第二步:数据较正 (18) 第六讲数据转换 (19) 第七讲标准图框-投影变换 (21) 一、投影系统及坐标系简介 (22) (一)、常用的投影类型 (22) (二)、坐标系(椭球参数) (22) (三)、高斯—克吕格投影 (22) 二、投影变换需注意问题: (23) 三、标准图框生成 (23) (一)已知图的四个角的经、纬度,生成 3
标准图框。 (23) (二)已知图的四个角的大地坐标,生成 标准图框 (27) 第八讲图形裁剪 (28) 第九讲建立工程 (29) 第十讲系统库编辑 (32) 符号拷贝 (34) 第十一讲图例板 (35) 第十一讲属性库 (40) 第一讲MAPGIS 简介 一、几个术语 图层:按照一定的需要或标准把某些相关物体组合在一起。可以把图层理解 为一张透明薄膜,每一层的图元在同一薄膜上,如水系力图层、铁路 图层、地质界限图层、断层图层等。图层的分层有利于地图图元的管 理,提高成图速度。 栅格图:即扫描的图像。 矢量图:即进行了数字化的图像,图中的每一个点都有相对的X 和Y 座标。 图元:图面上表示空间信息特征的基本单位,分为点、线(孤段)、多边形等三种类型。 点元:点图元的简称,有时称点。指其位置只有一组X 和Y 座标来控制。 它包括字符串(注释)、子图(专用符号)等。所有点保存在点文件中(*.wt)结点:指某线或孤段的端点或数条线或孤段的交点。 4
用C++实现混合使用MAPGIS的多种二次开发方式(一) 一、MAPGIS及其二次开发 1、MAPGIS简介 MAPGIS微机地理信息系统是武汉中地信息工程有限公司开发的GIS基础平台软件系统。集地图输入编辑、数据库管理及空间分析为一体GIS基础平台。可应用于建立基础地理信息系统,能应用于需要地理信息的相关行业和应用系统。作为一个GIS基础平台软件,提供了多种二次开发方式,用户可以在MAPGIS 上进行二次开发,开发出适合自己需要的应用系统。 2、MAPGIS二次开发方式 MAPGIS的二次开发方式主要有API函数、MFC类库、ActiveX控件三种方式,MAPGIS二次开发库封装在若干动态链接库(DLL文件)中。MAPGIS提供的二次开发方式采用的开发接口独立于开发工具(MFC 类库开发方式除外),用户无需学习新的开发工具就可以进行MAPGIS二次开发,无需像某些有自己二次开发语言(工具)的GIS系统,要学习其开发语言(工具)。下面介绍一下MAPGIS的三种二次开发方式:API函数:MAPGIS的API函数开发方式与Windows的API开发方式一样。 MFC类库:MAPGIS类库是基于MFC库的开发方式。用面向对象的思想把一些API功能进行封装,形成多个派生于MFC中CView类的可重用基类,用户利用基于MFC的MAPGIS类库,可构建符合面向对象软件工程的MAPGIS应用系统。 ActiveX控件:它是基于COM(组件对象模型)标准的一种程序组件,能够嵌入程序中运行完成一定功能,在软件开发中实现了功能重用。开发中只需简单调用功能接口就行了,开发更为简单、可靠、便利。 3、C++开发工具 C++语言是最符合面向对象软件工程思想的开发工具,C++支持结构化软件工程、面向对象工程、组件软件工程开发模式。事实上C++也是应用最广泛的开发语言,在当今最先进的组件软件开发模式中,C++是支持得最好的,尽管组件的使用不依赖特定的语言,但开发符合COM规范的软件组件的最佳开发语言还是C++。Visual C++ 是微软公司推出的C++开发工具,它与Windows系统有很好的兼容性,自Visual C++5.0推出以来,它已成为开发Windows应用程序的最流行的C++开发工具。我们就以Visual C++ 为例介绍怎样用C++实现混合使用MAPGIS的多种二次开发方式。 二、用C++实现混合使用MAPGIS的多种二次开发方式 使用C++进行API、MAPGIS类库方式开发MAPGIS应用程序,大家都很熟悉。这里主要是讲怎样用C++实现混合使用MAPGIS的三种二次开发方式。对于C++使用MAPGIS控件开发MAPGIS应用程序,可能有些用户还不太熟悉。所以先讲怎样用ActiveX控件开发MAPGIS应用程序,再讲怎样用C++实现混合使用MAPGIS的三种二次开发方式。 1、Visual C++中使用ActiveX控件开发方式 MAPGIS推出的ActiveX控件二次开发方式,主要是对于那些使用基于对象语言开发工具的用户,如Visual Basic,Delphi等,用这些开发工具的用户就可以使用MAPGIS控件对象来快速构建MAPGIS应用程序。事实上这种基于COM(组件对象模型)标准的MAPGIS控件是用C++开发出来的,但是这种用C++做出来的好东东,被他人所用,总感觉不爽。其实C++可以使用ActiveX控件开发,经常往对话框中放的一些编辑框之类的东西就是一些ActiveX控件,但是MAPGIS是要在视图中显示大量的图形的,并要进行操作,怎么办呢?你不要担心,对话框、视窗都是派生于CWnd类的,它们都能支持嵌入ActiveX控件。下面分别介绍
mapgis软件是中国具有完全自主知识版权的地理信息系统,是全球唯一的搭建式GIS数据中心集成开发平台。软件立足行业,深入具体业务细节,以强大的数据中心集成技术,整合各行业运行系统的各关键信息,实现了灵活、可靠、高效的数据集成与管理。本站这里提供的是mapgis6.7破解版下载,附带了详细图文教程和mapgis6.7破解狗,可以完美破解软件,更详细的安装如下文所示。 基本介绍: mapgis6.7版本继承了以前的界面友好,使用方便等特点,主要对数字测图、高程库系统、电子沙盘系统和DTM系统作了重大改进,功能不断增强,数据精度更高,性能更趋稳定,多种算法进行了优化,能够更好的为用户提供服务。 mapgis6.7安装破解教程如下: 特别说明: 1、安装之前打开软件狗; 2、mapgis软件的使用在任何情况都需要软件狗的支持,软件狗包含mapgis的服务; 开始安装: 1、下载解压,双击“Setup67.EXE”依提示安装;
2、一般选择默认的组件安装即可; 3、软件显示正在注册控件; 4、设置三维绘制引擎,一般按默认操作即可;
5、打开桌面上生成的mapgis软件图标,点击设置,软件运行环境已经设置成功; 6、依次选择图形处理--输入编辑--点击打开,软件成功破解。
mapgis快捷键如下: F4键(高程递加) 这个功能是供进行高程线矢量化时,为各条线的高程属性进行赋值时使用的。在设置了高程矢量化参数后,每按一次F4键,当前高程值就递加一个增量。 F5键(放大屏幕) 以当前光标为中心放大屏幕内容。 F6键(移动屏幕) 以当前光标为中心移动屏幕。 F7键(缩小屏幕) 以当前光标为中心缩小屏幕内容。 F8键(加点): 用来控制在矢量跟踪过程中需要加点的操作。按一次F8键,就在当前光标处加一点。 F9键(退点): 用来控制在矢量跟踪过程中需要退点的操作,每按一次F9键,就退一点。有时在手动跟踪过程中,由于注释等的影响,使跟踪发生错误,这时通过按F9键,进行退点操作,消去跟踪错误的点,再通过手动加点跟踪,即可解决。 F11键(改向): 用来控制在矢量跟踪过程中改变跟踪方向的操作。按一次F11键,就转到矢量线的另一端进行跟踪。 F12键(抓线头): 在矢量化一条线开始或结束时,可用F12功能键来捕捉需相连接的线头。 “A”键---输入线时:锁定线头或线尾(输入弧段:锁定弧段头或弧段尾) “S”键---锁定线中点(锁定弧段中点)
前言 MAPGIS 是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统平台。它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科学于一体的大型智能软件系统,是集数字制图、数据库管理及空间分析为一体的空间信息系统,是进行现代化管理和决策的先进工具。MAPGIS 连续四年在全国GIS 测评中名列第一,并成为唯一连续四年获得国家科技部向社会推荐的国产GIS 软件平台。 中地软件丛书之MAPGIS 二次开发培训教程是根据最新推出的MAPGIS 软件平台编写而成,主要介绍进行MAPGIS 二次开发必须具备的基础知识、主流开发工具以及MAPGIS 系统的基本概念、结构体系和操作方法。该教程分为三个部分,共十一讲。其中: 第一部分(即第一讲的内容):介绍Windows 编程的概念。包括类与数据封装、继承、重载、虚拟函数与多态性以及内存管理。该部分为可视化编程的基础,有可视化编程经验的读者可以略过此讲,直接进入下一部分的学习。 第二部分(即第二讲的内容):编程工具VC 。对于在VC 这样一个编程环境中开发应用程序所应熟悉的概念,术语和最基本的框架、构件实现过程等知识做了一个简明扼要的介绍。已掌握一定VC 编程基础知识的读者可以略过该部分。 第三部分(即第三讲至第十一讲的内容):详细讲述了地理信息系统的基本概念(包括GIS 原理概述、空间数据类型、空间数据库、空间数据结构与数据管理等内容);MAPGIS 的基本概念和体系结构(简要描述了MAPGIS 二次开发的基本概念、术语、工作区、空间实体及其数据、C++类组织和开发环境介绍的内容);MAPGIS 空间数据存取和属性编辑(包括工作区、空间实体和属性的操作及其网络介绍);图形显示输出及窗口操作、图形编辑、类库和控件开发;矢量空间分析和属性查询;投影变换、图框生成和工程管理;图库管理和查询系统(包括基于图库的应用程序开发、MAPGIS 图库介绍、开发的一般步骤以及结合图库显示说明图库主要函数的功能等方面的内容)以及图象分析与处理。这一部分为本教程的主要部分,能使大家从了解到熟练掌握这个部分的内容也是我们编制本书的主要目的,同时它还可被作为MAPGIS 二次开发过程中的参考来使用。 参加本书编写的人员主要是本系统的软件开发人员以及长期从事MAPCAD 和MAPGIS 培训的教师。由于时间仓促,书中难免存在错误和不当之处,敬请广大用户及读者提出宝贵意见和建议,以利改进。 中地软件丛书编委会 2001年10月 M A P G I S 二次开发培教程
新手学习mapgis教程 一、几个术语 图层:按照一定的需要或标准把某些相关物体组合在一起。可以把图层理解为一张透明薄膜,每一层的图元在同一薄膜上,如水系力图层、铁路图层、地质界限图层、断层图层等。图层的分层有利于地图图元的管理,提高成图速度。 栅格图:即扫描的图像。 矢量图:即进行了数字化的图像,图中的每一个点都有相对的X 和Y 座标。 图元:图面上表示空间信息特征的基本单位,分为点、线(孤段)、多边形等三种类型。 点元:点图元的简称,有时称点。指其位置只有一组X 和Y 座标来控制。 它包括字符串(注释)、子图(专用符号)等。所有点保存在点文件中(*.wt) 结点:指某线或孤段的端点或数条线或孤段的交点。 结点平差:使几条线或孤段成为共用一个结点的过程 线图元:地图中线状物的总称。如划线、省界、国界、地质界线、断层、水系、公路等。所有线图元都保存在线文件中(*.wl) 区图元(面图元):由线或孤段组的封闭区域,可以以颜色和花纹图案填充。 如湖泊、地层、岩体分布区等。所有区图元都保存在区文件中(*.wp)。 工程:对一系列的点、线、面文件进行管理的描述性文件。 二、MAPGIS 几种主要文件类型及后缀 .wp 区(面)文件.pnt 控制点文件 .wl 线文件 .wt 点文件 .tif 栅格文件 .rbm 光栅求反后文件 .mpj 工程文件 .cln 图例板文件 点文件(.wt):包括文字注记、符号等。即在输入时,文字和符号都存在点 文件中。在机助制图时,文字注记称为注释(如各种标注等),符号称为子图(矿 点符号,泉符号等)。 线文件(.wl):是由境界线、河流、航空线、海岸线等线状地物组成的图元。 面文件(.wp):将各个行政区进行普染色后,就得到了区文件。在理论上,区是封闭的线组成的区域,因此区是基于线生成的。 工程(.mpj):对一系列的点、线、面文件进行管理的描述性文件。其主要记录了各个文件的信息,如存放地、可编辑性等。(如何建立工程,见以后) 图形处理—输入编辑 一、输入编辑步聚 主要步骤为: 1、将图件进件进行扫描,成灰度、或彩色、或二值。 2、建立相应的工作目录,即建立自已的工作文件夹。如mapgis 学习 3、将扫描的图像拷入到工作文件夹中, 4、将系统库(相当于\mapgis65\slib 文件夹)拷到工作文件夹中。 5、进行读图分析,看分几层。如水系层(河流、水库、泉等),交通层(铁 路、公路、小路、航空线等),断层层(各种断层),地层层(地层界线,地层区,
目录 第一讲 MAPGIS地理信息系统的基本功能 (1) 第二讲图形输入..............................................................................10第三讲图形编辑..............................................................................15第四讲拓扑处理及实用工具...............................................................28第五讲系统库编辑...........................................................................32第六讲误差校正..............................................................................36第七讲图型裁剪..............................................................................38第八讲数字高程模型(DTM分析) (41) 第九讲图形输出..............................................................................44第十讲数据接口转换 (47)
第一讲MAPGIS地理信息系统的基本功能 (四)MAPGIS的主要功能 l.数据输入 在建立数据库时,我们需要将各种类型的空间数据转换为数字数据,数据输入是GIS 的关键之一。MAPGIS提供的数据输入有数字化仪输入、扫描矢量化输入、GPS输入和其它数据源的直接转换。 (1) 数字化输入 数字化输入也就是实现数字化过程,即实现空间信息从模拟式到数字式的转换,一般数字化输入常用的仪器为数字化仪。 (2)扫描矢量化输入 扫描矢量化子系统,通过扫描仪输入扫描图象,然后通过矢量追踪,确定实体的空间位置。对于高质量的原资料,扫描是一种省时、高效的数据输入方式。 (3)GPS输入 GPS是确定地球表面精确位置的新工具,它根据一系列卫星的接收信号,快速地计算地球表面特征的位置。由于GPS测定的三维空间位置以数字坐标表示,因此不需作任何转换,可直接输入数据库。 (4)其他数据源输入 MAPGIS升级子系统可接收低版本数据,实现6.X与5.X版本数据的相互转换,即数据可升可降,供MAPGIS使用。MAPGIS还可以接收AUTOCAD、ARC/INFO、MAPINFO等软件的公开格式文件。同时提供了外业测量数据直接成图功能,从而实现了数据采集、录入、成图一体化,大大提高了数据精度和作业流程。 2. 数据处理 输入计算机后的数据及分析、统计等生成的数据在入库、输出的过程中常常要进行数据校正、编辑、图形整饰、误差消除、坐标变换等工作。MAPGIS通过图形编辑子系统及投影变换、误差校正等系统来完成,下面分别介绍之。 (1) 图形编辑 该系统用来编辑修改矢量结构的点、线、区域的空间位置及其图形属性、增加或删除点、线、区域边界,并适时自动校正拓扑关系。图形编辑子系统是对图形数据库中的图形进行编辑、修改、检索、造区等,从而使输入的图形更准确、更丰富、更漂亮。 (2) 投影变换 地图投影的基本问题是如何将地球表面(椭球面或圆球面)表示在地图平面上。这种表示方法有多种,而不同的投影方法实现不同图件的需要,因此在进行图形数据处理中很可能要从一个地图投影坐标系统转换到另一个投影坐标系统,该系统就是为实现这一功能服务的,本系统共提供了20种不同投影间的相互转换及经纬网生成功能。通过图框生成功能可自动生成不同比例尺的标准图框。 (3) 误差校正 在图件数字化输入过程中,通常的输入法有:扫描矢量化、数字化仪跟踪数字化、标准