mapgis二次開發(fā)基礎(chǔ)知識_第1頁
mapgis二次開發(fā)基礎(chǔ)知識_第2頁
mapgis二次開發(fā)基礎(chǔ)知識_第3頁
mapgis二次開發(fā)基礎(chǔ)知識_第4頁
mapgis二次開發(fā)基礎(chǔ)知識_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

MAPGIS二次開發(fā)基礎(chǔ)知識一、手動注冊組件與注銷組件COM以及客戶應用程序所需的、用來定位組件及對組件進行實例化的信息存儲在Windows的注冊表(Registry)里。因此,在使用組件之前要對組件進行注冊,只有成功注冊才能引用該組件,其具體步驟為:將包容組件的DLL文件放入MAPGISPROGRAM目錄下,假設物理路徑為:D:\mapgis65\program\MapGisBasCom1.dll運行注冊表程序注冊組件Windows開始菜單-運行:regsvr32D:\mapgis65\program\MapGisBasCom1.dll注冊成功與否將有對話框彈出。注銷該組件方法為:regsvr32/uD:\mapgis65\program\MapGisBasCom1.dll二、 VisualBasic中嵌入對象類型庫為了使VisualBasic能夠訪問MAPGIS對象定義,應該在VisuaiBasic項目或模塊中嵌入MAPGIS對象類型庫。如果想把一個VisualBasic對象聲明為MAPGIS對象類型,要求嵌入MAPGIS對象類型庫,如果想把一個VisualBasic對象聲明為一般Object類型,就不必嵌入MAPGIS對象。為了在項目中嵌入MAPGIS對象類型庫,通常執(zhí)行這些步驟:從Project(工程)菜單,選擇References,References對話框出現(xiàn),選中復選框嵌入MapGisBasComlTypeLibrary文件。這要求VisualBasic環(huán)境或代碼模塊編輯器是活動的,正在運行。三、 使用MAPGIS對象可以使用VisualBasic編寫使用MAPGIS對象的程序。在VisualBasic程序中使用MAPGIS對象所要求的步驟是:嵌入MAPGIS對象類型庫。建立一個MAPGIS對象。使用MAPGIS對象和包含的其他對象。釋放MAPGIS對象。使用一個句點(.)把對象變量與該對象的屬性、方法和集合分開。四、 使用C++和COM函數(shù)可以使用C++和COM函數(shù)編寫使用MAPGIS對象的程序。在C++程序中使用MAPGIS對象所要求的步驟是:嵌入MAPGIS對象和COM頭文件,并鏈接到COM庫。初始化C0M庫。建立一個MAPGIS對象。4?使用MAPGIS對象和包含的其他對象。釋放MAPGIS對象。6?解除C0M庫的初始化。使用成員選擇運算符(->)把“對象指針”變量與屬性、方法和集合函數(shù)分開。嵌入MAPGIS對象對MAPGIS對象編程的第一步是在項目中嵌入合適的類型庫或頭文件。完整的MAPGIS對象類型庫包含在MapGisBasComl.h文件中,這個文件的默認路徑:D:\mapgis65\include\MapGisBasCom1.h類型庫含有關(guān)于所有MAPGIS對象、屬性和方法的信息。五、 COM的調(diào)用MAPGIS對象包括ANSI和Unicode這兩個定制接口。使用ANSI接口時,所有MAPGIS對象字符串都是每個字符一個字節(jié)的ANSI字符串。使用Unicode接口時,所有MAPGIS對象字符串都是每個字符兩個字節(jié)的Unicode字符串。所有MAPGIS對象字符串都使用====BSTR字符串數(shù)據(jù)類型。默認情況下使用ANSI定制接口和ANSI====BSTR字符串。如果想使用Unicode定制接口和Unicode=====BSTR字符串,在嵌入所有頭文件之前必須定義UNICODE和—UNICODE。例如:#defineUNICODE#define_UNICODE在字符串值兩端使用TEXT(“str”)宏。默認情況下,這些是ANSI'Str”字符串。在定義了UNICODE和_UNICODE時,這些是UnicodeL“Str”字符串。在32位0LE中,所有BSTR字符串是Unicode字符串。為了使C++程序能夠訪問MAPGIS對象定義,除了嵌入Windows和0LE頭文件之外,還必須嵌人MAPGIS==.H和MAPGIS==.H頭文件。默認情況下,MAPGIS頭文件位于======\INCLUDE目錄中。VisualC++項目的Include設置或INCLUDE環(huán)境變量應指向含有這些文件的目錄。必須嵌入以下頭文件:MapGisBasCom1_i.cMapGisBasCom1.h例如:#include"MapGisBasCom1_i.c"#include"MapGisBasCom1.h"VisualC++項目的Library設置或LIB環(huán)境變量應指向含有這些文件的目錄。在程序能使用MAPGIS對象之前,必須初始化COM庫。VisualBasicMAPGIS程序不必初始化COM,VisualBasic自動初始化COM庫。C++所有MAPGISCOM函數(shù)都返回一個HRESULT值,這個值含有關(guān)于MAPGISCOM函數(shù)的成功或失敗的信息??梢月暶鲉蝹€HRESULT變量并重復利用它。例如:HRESULThr;在調(diào)用任何MAPGIS或COM函數(shù)之前,MAPGIS程序必須使用COMCoInitialize函數(shù)初始化COM庫。例如:hr=CoInitialize(Null);必須把NULL傳遞給CoInitialize。七、建立MAPGIS對象MAPGIS組件的核心是MAPGIS對象。VisualBasic在VisualBasic中有2個方法用于建立MAPGIS對象,這2個方法都涉及使用Dim語句聲明特定類型的對象變量。特定的MAPGIS對象類型常用的方法(如果使用的VisualBasic版本支持它)是使用Dim語句聲明特定MAPGIS對象對象類型的對象變量,這個方法要求MAPGIS類型庫包括在VisualBasic項目中。為了實際建立一個MAPGIS對象的新實例.可以在Dim語句中使用New關(guān)鍵字(如果使用VisualBasic版本支持它的話)或者使用CreateObject函數(shù)。例如,使用New關(guān)鍵字創(chuàng)建新的MAPGIS對象的語句是:DimldotAsNewL_DOT例如,使用CreateObject函數(shù)聲明和創(chuàng)建一個新的MapGis對象:DimldotAsL_DOTSetldot=CreateObject("MapGisBasCom1.L_DOT")有些版本的VisualBasic使用虛函數(shù)表綁定(vtable-binding),或早期綁定。直接使用MAPGIS定制接口(不通過COMIDispatch接口),產(chǎn)生最好的性能。有些版本的VisualBasic使用推遲綁定的形式,叫做分派ID綁定(dispID,binding),它使用COMIDispatchoIDispatch::Invoke函數(shù)與在MAPGIS類型庫中包括的dispID一起使用。這種方法使應用的性能沒有使用New關(guān)鍵字那樣快?但比使用Object類型快。八、 在C++中建立MAPGIS對象在C++中只有一種方法建立MAPGIS對象,聲明合適的MAPGIS“對象指針"類型的對象變量,然后使用COMCoCreateInstance函數(shù)建立MAPGIS對象的新實例。把以下參數(shù)傳遞給CoCreateInstance:MAPGIS對象的類IDNULLCLSCTX_INPROC_SERVERMAPGIS對象的接口IDMAPGIS“對象指針”變量的地址(使用&運算符的地址)例如,要建立一個新的ID_DotMAPGIS對象:IPntArea*ptPAi;hr=CoCreateInstance(CLSID_PntArea,NULL,CLSCTX_INPROC_SERVER,IID_IPntArea,(void**)&ptPAi);注意:一個多線程程序,必須串行化對MAPGIS對象的所有訪問,以避免重入.九、 函數(shù)庫名稱函數(shù)庫名稱 c,c++說明文件工作區(qū)基礎(chǔ)函數(shù) Win_area.h矩形圖框函數(shù)frmdll32.h投影類庫projdll.h控制點操作 w32_cpnt.h狀態(tài)欄顯示點轉(zhuǎn)換以及工作區(qū)投影函數(shù)cordcvt.h圖形顯示輸出 Map_out.hwin_out.h工程對象操作函數(shù)以及拼版文件操作函數(shù)Map_prj.h編輯工程文件 Prj_Disp.h圖例和工程文件操作函數(shù)Project.h圖像顯示函數(shù) Mapdisp.h圖像編輯函數(shù) Mapedit.h輸入編輯子系統(tǒng)類庫 CGisEdit.hCPrjEdit.h拓撲操作函數(shù) Gistopo.h圖元以及剪貼板操作函數(shù) clippaste.hUNDO處理數(shù)據(jù)及成員函數(shù)gistool.h窗口操作函數(shù) CGisView.hGisView對象函數(shù)Win_oper.h空間分析函數(shù) Spc_anly.h各種頭文件 MapGis.h十、怎樣用vb對mapgis進行二次開發(fā),不知道怎樣將二者聯(lián)系起來Vb開發(fā)三種方式:MAPGISAPI開發(fā)庫通過調(diào)用應用程序接口直接編程MAPGIS可視控件(ocx)MAPGIS組件開發(fā)(com)通過控件和組件編程如何創(chuàng)建MAPGIS對象DimworkaiAsNEWPntAreaDimworkaiAsPntAreaSetworkai=CreateObject(“MapGisBasCom1.pntarea”)三種方式可以互為補充。前MAPGIS二次開發(fā)庫主要以API函數(shù)、MFC類庫、ActiveX控件三種方式提供。開發(fā)庫被封裝于若干動態(tài)鏈接庫(DLL)中。API函數(shù)在使用方法上與Windows的API函數(shù)完全一樣,因此是獨立于開發(fā)工具的。無論您使用VC++、VB還是Dephi...,您在這些工具中如何調(diào)用Windows的API函數(shù),您就怎么調(diào)用這些二次開發(fā)函數(shù)。MAPGIS類庫是為基于MFC(MicrosoftFoundationClass)的開發(fā)者提供的多個可重用基類,將應用程序所需的常見基本功能作了封裝,使用便利,改動靈活。開發(fā)者只需從類庫派生即可使自己的程序獲得從窗口顯示控制到圖形查詢編輯的各項功能。MAPGIS二次開發(fā)常見問題及解答(轉(zhuǎn)載)MAPGIS二次開發(fā)常見問題及解答(轉(zhuǎn)載)1、 問:如何用Delphi生成MAPGIS明碼文件?答:先利用手冊看懂明碼格式文件的格式,知道數(shù)據(jù)的組織方式,利用delphi的文件函數(shù)創(chuàng)建一個文本型文件,吧數(shù)據(jù)庫中的數(shù)據(jù)按照格式輸出就是了。2、 問:ATT_STRU和CATT_STRU的區(qū)別和聯(lián)系?答:ATT_STRU是以前老版本的東東,換成CATT_STRU試試.CATT_STRU中包含了屬性結(jié)構(gòu)的詳細信息,具體用法可參見二次開發(fā)幫助文檔中第三章數(shù)據(jù)結(jié)構(gòu)中關(guān)于屬性字段描述結(jié)構(gòu),屬性字段描述頭和屬性信息頭的介紹,里面有該結(jié)構(gòu)的詳細內(nèi)容。3、 問:請教關(guān)于''不能打開子圖庫…”的問題,急!答:系統(tǒng)庫路徑不對,將mapfont.gis、mconfig.gis、netcfg.gis三個文件拷貝到執(zhí)行目錄即可。這幾個語言件放在MAPGIS\PROGRAM\目錄中。或是運行MapEnv.exe可設置,該運行文件也同樣在MAPGIS\PROGRAM\目錄中。4、 問:如果只知道工作區(qū)ai能不能依次得到工作區(qū)中的圖元號,該如何得到??!答:longi,pntn;shortlen;pnt_infoinf;d_dotxy;char*dat;_GetPntNum(ai,&i,&pntn);〃取點數(shù)for(i=1;i《pntn;i++){if(_getpnt(ai,i,&xy,&dat,&len,&inf)<=O)〃取點,返回值1/0/-1成功/失敗/刪除continue;…對該圖元進行操作}}i就是圖元號5、 問:MapGis6.5的SDK函數(shù)NearPnt,到底應該如何用??!跟以前的不同了,給個例子吧!答:longWINAPI_NearPnt(shortai,D_DOT*xy,unsignedchar*layerOnOffPad,shortpadLen,double*dis);ai點工作區(qū)號*xy點位置號---比如鼠標的位置layeronoffpad圖層開關(guān)標志,如不為空就只在打開狀態(tài)的圖層中查找padLen是layerOnOffPad的長度出口dis返回距離返回值成功返回點號,失敗為06、 問:如何屏蔽掉CPrjEditView中的右鍵功能editview有一個PopMenuControl屬性,同理CPrjEditView也可以直接使用這個屬性。editview.PopMenuControl=-17〃不顯示菜單=07〃全部顯示=17〃顯示窗口菜單=27〃顯示窗口+編輯菜單=37//1+2+工具箱7、問:如何將一個圓添加到一個工作區(qū)Ai中?先用—AppendLin函數(shù)在工作區(qū)畫園(或畫弧)的時候需要自己生成坐標點,比如說D_DOT*dat,這里dat的空間需自己申請,其長度為longlen,線的參數(shù)是LIN_INFOinf,需要賦值,shortai為區(qū)工作區(qū)號,longi為弧段號。然后調(diào)用:i=_AppendLin(ai,dat,len,&inf);輸入弧段。然后添加區(qū)域入口:ai-區(qū)工作區(qū)號longrdat[2]-區(qū)域數(shù)據(jù)塊rdat[0]=1(弧段個數(shù)),rdat[1]=i(i為弧段號)rinf-區(qū)域圖形信息,需要賦值然后調(diào)用:_AppendReg(ai,rdat,2,&rinf);&問:急關(guān)于_ShortFlash(ENTITY_MSG*pt,longnum)函數(shù)!答:sypedefstruct{shortai工作區(qū)號shorttype圖元類型longelmi圖元號}ENTITY_MSG定義一個ENTITY_MSG數(shù)組你把所要閃爍的圖元一個一個加進去就行了。9、 問:實現(xiàn)查詢多邊形中圖元的,并時期閃爍顯示,應如何實現(xiàn)呢?答:用_RectAskToList系列函數(shù),然后可通過CGisView的閃爍機制完成。10、 問:CloseToolBox();〃關(guān)閉工具箱OpenToolBox();〃打開工具箱我的程序只要進行了上面關(guān)閉和打開工具箱的操作后,在最后關(guān)閉時總是報錯不管是用上面的函數(shù)還是用右鍵提供的工具箱控制,到最后都會出現(xiàn)一個DebugAssertionFailed!的錯誤,誰能解釋一下呢?答:1、 升級你的VC++(比如SP2、SP4)2、 出現(xiàn)這種問題不用管,在編繹成Releas版后,這個問題不會再出現(xiàn)。11、 問:我在本機器開發(fā)環(huán)境上運行開發(fā)的軟件沒什么問題。但在其他機器上,運行時出現(xiàn)找不到mfc42d.dll動態(tài)鏈接庫文件。請幫忙!答:你編的東西編譯成DEBUG版,運行時需要mfc42.dll(這可不是MAPGIS的動態(tài)庫,是VC的),如果你在編譯時生成RELEASE版,到別的機子上運行,就不用找mfc42d.dll了。12、 問:有沒有獲得工程文件名的函數(shù),有沒有通過工程文件,來獲得工程中的個文件的路徑的函數(shù)答:這個容易,兄弟用VC吧。打開有關(guān)PRJ的頭文件(*.h,具體是哪個我記不清了,自已找找),看里面的函數(shù)聲明,這比看幫助或是開發(fā)指南要好用得多,而且看到的東西比什么指南都強。里面的函數(shù)英文名稱確切,當然,如果你的英文不行,先去補習一下吧。13、 問:顏色不準,急!急!急我公司新買的HPDJ800PS的噴墨打印機,mapgis的顏色庫用的是地礦部的標準色庫,可每次執(zhí)行光柵化輸出以后,出圖顏色與色標差太多,光柵化參數(shù)按推薦100、75、61、100設的。答:又是該死的地礦部標準,那玩意是用6色印刷的,普通噴墨儀如果只有四色,怎么著都打不出一模一樣的。真要打出跟那標準一模一樣,也簡單,輸出到EPS,花幾千塊,去印刷廠印一張回來。14、 問:請教各位大俠,logcount和count的區(qū)別?含義分別是什么?答:邏輯數(shù):工作區(qū)中沒有被刪除的實體或者記錄的個數(shù)。物理數(shù):工作區(qū)中所有的實體或者記錄的個數(shù),包括那些從被刪除了的實體或者記錄。有如下等式:物理數(shù)=邏輯數(shù)+被刪除的個數(shù)+115、 問:請問有沒有這樣的函數(shù)?可以求出兩個區(qū)之間的公共弧段呢。有的話,請告訴我關(guān)于這個函數(shù)的詳細情況。謝謝!答:先取出第一個區(qū)的所有弧段,對每一條弧段取拓撲,看看拓撲的左區(qū)或者右區(qū)中有沒有一個等于第二個區(qū)的區(qū)號。如果有,那么這條弧段就是這兩個區(qū)的公共弧段。16、問:如何對表文件(.wb)進行讀某條記錄的某個字段請問各位大蝦:如何取得表文件的記錄數(shù),如何判斷該記錄是被刪除,如何取某記錄的某個字段值。謝謝??!答:下載區(qū)二次開發(fā)示例第5章有詳細說明。17、 問:請問在delphi里怎么調(diào)用mapgis的api函數(shù)答:和調(diào)windows的api一樣調(diào)用。如:function_FindNearColor(r,g,b:Integer):Integer;stdcall;External'mapdsp60.dll'procedureTForm1.Button1Click(Sender:TObject);varaa:Integer;S:string[11];beginaa:=_FindNearColor(255,255,255);Str(aa,S);ShowMessage(S);end;18、 問:在對話框中實現(xiàn)區(qū)填充顏色、圖案預覽和選擇答:自己重繪ListCtrl。在DrawItem函數(shù)中繪制每一個Item的圖形(用MyDC)。19、 問:請教各位大蝦,如何用vb編程實現(xiàn)mapgis中屬性文件轉(zhuǎn)換為dbf、mdb等文件?答:目前VB中還沒有提供導出屬性數(shù)據(jù)的二次開發(fā)的方法。你可以用ADO或者其他的工具將mapgis的屬性數(shù)據(jù)讀出來再形成各自的記錄集,最后專程dbf、mdb20、 問:請教有關(guān)cmyk和mapgis顏色階的問題答:目前組件中還沒有相應的方法。API中提供_FindNearCMYKColor、_FindNearColor等函數(shù)完成顏色的轉(zhuǎn)換。21、 問:那位朋友有MAPGIS明碼文件格式說明能不能給我發(fā)一份,急需,我實在是找不到。。謝謝。答:詳見mapgis地理信息系統(tǒng)使用手冊數(shù)字制圖篇22、 問:如何能得到一條線的起始結(jié)點和終止結(jié)點(圖元號)?知道一個node的x,y坐標,如何能得到這個node的圖元號?答:取該線的拓撲信息。LIN_TOP該拓撲信息中第一個和第二個元素就是其實結(jié)點和中止結(jié)點的圖元號查找最近結(jié)點long_NearNod(shortai,D_DOT*xy,double*rtnDis)參數(shù)入口ai -結(jié)點工作區(qū)號*xy-結(jié)點位置,xy為圖形實際坐標出口*rtndis-返回距離返回值成功返回結(jié)點號(>0),失敗返回023、 問:在VC++中,如何從一裝入工程文件中,讀出工程文件中每個文件的名稱和類型?謝謝,大蝦。答:7、取工程中某個文件的類型short_PRJGetItemType(MAPPROJECTprj,intindex)參數(shù):入口prj—工程句柄index—文件位置出口無返回值:index指定文件的文件類型(LIN/PNT/REG/MSIIMG)9、 取項目的文件名(帶全路徑)LPCTSTR_PRJGetItemName(MAPPROJECTprj,intindex)參數(shù):入口prj—工程句柄index—文件位置出口無返回值:index指定文件的名稱的字符串10、 取項目的文件名(不帶全路徑)short_PRJGetItemName1(MAPPROJECTprj,intindex,char*name)參數(shù):入口prj—工程句柄index—文件位置出口*name—返回文件的名稱返回值:成功返回1,失敗返回024、 問:如果調(diào)用CGisEditView的編輯與修改什么的函數(shù),那么視圖窗口總是處于交互狀態(tài),請問如何取消?答:先調(diào)用SetExtTool(NULL);再調(diào)用SetOperateState(0);25、 問:我用VB來調(diào)試一些幫助中列舉的例子,在加載工程的時候用bPRJLoadProject(),系統(tǒng)給出錯誤:baddllcallingconvention.我不知道什么原因?答:你在mapgis目錄下的basic中找到map_prj.bas,對bPRJLoadProject的聲明如下。DeclareFunctionbPRJLoadProjectLib"mapprj60.dll"Alias"#1"(OptionalByVaialnstAsInteger=0)AsLong你自己改為:DeclareFunctionbPRJLoadProjectLib"mapprj60.dll"Alias"#1"(OptionalByValalnstAsInteger=0,OptionalByValfastOpenAsInteger=0)AsLong26、 問:請問用delphi調(diào)用mapgis的dll一定要用vc的dll對嗎答:不用重裝VC。只需要到別的地方去找一個MFC42D。DLL文件復制到SYSTEM目錄即可。27、 問:我想取消EditView的右鍵功能,而自己用Commandl(在vb中)來實現(xiàn),該怎么樣做?(比如實現(xiàn)放大、縮小、平移、更新、復位等)答:EditView空間提供zoomin()放大,zoomout()縮小等對窗口操作的方法。具體可參考對象瀏覽器中對各方法的注釋。28、 問:我在求距離和面積的時候想先畫出線然后得到距離或面積,就跟在MAGPGIS圖庫管理子系統(tǒng)中距離測量和面積測量功能一樣,又該怎么樣來實現(xiàn)?答:畫線可以采用異或線的方法,鼠標點擊的每個點都轉(zhuǎn)換成邏輯坐標,放入D_DotSet,再用CalculateLength,CalculateOneArea求長度和面積。29、 問:急??!關(guān)于_InputFileName()函數(shù)我的代碼是這樣的:char*strOutPath;char*fileter;strOutPath=NULL;fileter="wt";_InputFileName(strOutPath,NULL,NULL,"PNT",T,fileter,NULL);我調(diào)試的時候,一到最后一行就報錯。錯誤信息如下:UnhandledexceptioninChangePoint.exe(BAS60.DLL):0xC0000005:AccessViolation請指教,謝謝!答:charszName[128];chardsn[32];charowner[32];charftype;charopenflag=0;〃O打開文件;1保存文件charfilter[]=_T(”線文件(*.wl)\0*.wl\0點文件(*.wt)\0*.wt\0\0");charttlStr[]=_T("打開文件");charlog[32];charpsw[32];memset(szName,0,sizeof(szName));memset(dsn,0,sizeof(dsn));memset(log,0,sizeof(log));memset(psw,0,sizeof(psw));memset(owner,0,sizeof(owner));_InputFileName(szName,dsn,owner,&ftype,openflag,filter,ttlStr);if(dsn[O]!='\O'){db_GetLogPsw(dsn,log,psw);〃m_hlnst工作區(qū)示例句柄m_ai工作區(qū)號m_ai=_OpenFileArea(m_hInst,szName,dsn,log,psw);}elsem_ai=_OpenFileArea(m_hInst,szName);szNamedsnownerftype都是出口參數(shù)。strOutPath你給的是NULL當然是錯誤的。有可能是網(wǎng)絡數(shù)據(jù),dsnowner也為NULL,是相當危險的。30、 問:用delphi怎么新建一個工程?并且能不讓新建的工程彈出那兩個對話框嗎?答:直接CreateComObject()asIMap,然后把這個Imap接口賦給editview即可。31、 問:關(guān)于maplayer,在delphi中maptree不能正確使用,請問我如何能知道工程里所有文件的名稱和狀態(tài)?答:對map的layer進行遍歷,每個layer的workarea的name屬性就是工程里該文件的名稱。該layer的visible表示是否可見的狀態(tài)。用map的activelayer取、設激活的layer。32、 問:這樣求兩點距離和圖型面積?(vb)用鼠標虛義一根線,求出線兩端的距離?用鼠標畫一個任意閉合區(qū),求閉合區(qū)的面積?答:不管你輸入的是線,還是閉合區(qū)域,在Mapgis里都是用''點集”D_DotSet表示的。將你鼠標輸入的點轉(zhuǎn)換成邏輯坐標存入D_DotSet。調(diào)用CalculateLength(xyAsD_DotSet)AsDouble求線長度調(diào)用CalculateOneArea(xyAsD_DotSet)AsDouble求該點集圍成的區(qū)的面積33、 問:請問用delphi開發(fā),如何將某一maplayer和工作區(qū)綁定?我打開了一個工程文件,現(xiàn)在想對其中某一層進行操作,如何把這一層和工作區(qū)進行綁定?那個attach怎么用?我的意思是已經(jīng)用map.load把文件打開了,然后怎么綁定?我用的是varregarea:iregarea;regarea:=createcomobject(class_regarea)asiregarea;maplayer.attach(regarea);把regarea保存一下,發(fā)現(xiàn)還是空白一片答:對工程中的某一層進行操作,只需要對該layer的workarea接口操作即可。而你的代碼是把該layer又和一個新的regarea(你只是實例化了,沒有裝載文件)綁定,此時已經(jīng)丟掉了原來的workarea。所以出現(xiàn)你描述的情況。34、 問:那個函數(shù)能夠?qū)崿F(xiàn)計算一條曲線與其它多條曲線的交點?在winarea.h文件中有計算單個線段交點的函數(shù)shortWINAPI_CalCrossDot(D_DOT*laO,D_DOT*la1,D_DOT*lbO,D_DOT*lb1,D_DOT*xy);你可以先用當前線的rect通過RectAskLin找到相交的線,再逐個求交點。35、問:我使用actxedit gisedit控件進行的二次開發(fā)。可是打包后安裝,這個控件總也不能被注冊。具體怎么解決?答:建議你將該控件所用到的dll也一起打包(用DEPENDS察看)在你的打包程序中用regsvr32來注冊。36、 問:我用ModEnvFile但是報錯說不支持對象的屬性或方法請問為什么?我用GetEnv得到了路徑的文本,怎么修改呀?str=Mapgis.GetEnv.cur之后怎么辦呢?答:Mapgis.GetEnv.cur="新的路徑"37、 問:如何在VB中實現(xiàn)對目錄環(huán)境修改的功能答:你指的是mapgis的環(huán)境目錄嗎?如果是,你可以用mapgis對象下面的getenv、writeenvfile、setenv方法來取得、修改、設置mapgis的環(huán)境目錄。38、 問:老話重提:如何獲得工程的地圖參數(shù)答:MAPGIS工程中也同樣記載了一個''地圖參數(shù)”的內(nèi)容!如果是按照標準方式建立的工程數(shù)據(jù),那么工程中的地圖參數(shù)和包含文件中的地圖參數(shù)應該是一樣的!所以建議直接取工程文件本身記載的地圖參數(shù),那么就不用考慮是否存在文件的區(qū)別了!具體函數(shù)是:在project.h中調(diào)用Prj_Head.PrjMapParam即可!39、 問:如何在map對象中實現(xiàn)只對激活的maplayer進行編輯和操作?答:selectpoint方法可以選中所有的打開的點文件中的點。而不僅僅是你激活的那個layer。在最新的mapgis中對maplayer增力口了一個selected的標志。如果該標志設為1則selectpoint會在這個layer上做操作。相反,則不會影響這個layer。40、 問:在mapgis輸入編輯里有個功能叫''根據(jù)屬性賦參數(shù)”,請問二次開發(fā)里提供這個功能嗎?如果有怎么用,在哪里可以找到;如果沒有怎么根據(jù)屬性篩選符合條件的點。答:、''根據(jù)屬性賦參數(shù)"實際上就是找出那些滿足你給定的屬性條件的圖元,然后給他們參數(shù)的某一項,或者某幾項。用AttAsktoList即可,具體可參考vb開發(fā)示例。(MPGIS.COM.CN下載區(qū))41、 問:用Giseditl.SelectGraphics選中圖元后,如何取得其屬性值,請用VB示范一下,謝謝!答:可以自己寫一個交互操作,用鼠標雙擊、或者拉框來查詢圖元。對于鼠標雙擊可以直接調(diào)用nearlin…,對于拉框可用rectasktolist來查詢。前者得到圖元實體好,后者得到實體號列表。然后用這些實體號即可取屬性即可得到相應的屬性。42、 問:有關(guān)IMS的瀏覽查詢的問題我想在IMS中實現(xiàn)瀏覽查詢功能,能不能按照如下的思路做:1選定某一個工作區(qū);2找出該工作區(qū)的所有圖元3顯示該圖元的信息問題是:怎么樣找出一個工作區(qū)的所有圖員dimPrjltemsetPrjItem=Server.CreateObject("MpMapCom.MpPRJITEM.1")Session("MapViewObject").ViewPrj.GetItemi,PrjItem這樣能得到i對應的工作區(qū),下面該怎么得到此工作區(qū)的所有圖元呢?謝謝答:要得到圖元,是用戶進行查詢的,而查詢有多種查詢方法,可以模糊、點擊等等,如果用添加查詢,就用函數(shù)gisSearchByStr,點擊就用gisSearchByHitting等等,lib庫中有這樣的函數(shù),web開發(fā)實例中也有這樣的例子,您可以看看那里的例子,希望對您有所幫助43、 問:請問大俠,bEOOout函數(shù),能不能自定義導出的eOO文件的路徑?答:直接在文件名前面加路徑即可。如:DimhInstAsIntegerDimaiAsIntegerhInst=bInitWorkArea(&H0)ai=bOpenArea(hInst,LIN)CallbLoadFile(ai)CallbEOOout(ai,"d:\aa.e00")CallbFreeWorkArea(hInst)44、 問:請教在WEBGIS中,能否對*.WP,*.WL,*.WT文件進行操作,屬性檢索的功能和非WEGGIS開發(fā)模式下的有什么區(qū)別,我想閃爍某個/些被檢索到的圖元能做到嗎?答:在webgis中能夠?qū)c線面文件進行操作,可以根據(jù)用途的不同,可以進行不同的操作。屬性檢索和非webgis開發(fā)模式下沒有什么不同。在webgis中可以進行閃爍某個點或一些點,但是我們一般不建議這樣作,因為這樣速度可以跟不上,一般是通過改變顏色的方式來標志檢索到的圖元。45、 問:怎么寫點的屬性,我想用pntatt.write答:先得到你要寫屬性的那條記錄。pntarea.get(i,red)然后對red屬性記錄進行操作,rcd.item.val(l) 再pntarea.write即可。46、 問:如何在vb中使用“GisConv.h”中所聲明的api函數(shù)?比如eonvertapi_e答:DeelareFunctionbGisAscInLib"w60_eonv"Alias"#6"(ByValAHInstAsInteger,ByValmPathAsString,outAiAsInteger)AsInteger'明碼文件轉(zhuǎn)換二進制文件,返回成功和失敗DeelareFunetionbGisAseOutLib"w60_eonv"Alias"#7"(ByValaiAsInteger,ByValFileNameAsString)AsInteger'二進制文件轉(zhuǎn)換明碼文件,返回成功和失敗DeelareFunetionbEOOInLib"w60_eonv"Alias"#8"(ByValAHInstAsInteger,ByValmPathAsString,ByRefOutApAsInteger,ByRefOutAlAsInteger,ByRefOutArAsInteger,ByRefOutLabAsInteger,OptionalByRefOutNaiAsInteger=0,OptionalByValOrderColorFlagAsInteger=0,OptionalByValPntColorFldAsLong=0,OptionalByValLinColorFldAsLong=0,OptionalByValRegColorFldAsLong=0)AsIntegerDeelareFunetionbE00outLib"w60_eonv"Alias"#9"(ByValaiAsInteger,ByValFileNameAsString)AsIntegerDeelareFunetionbDxfOutLib"w60_eonv"Alias"#10"(ByValapAsInteger,ByValalAsInteger,ByValFileNameAsString)AsIntegerDeelareFunetionbAreInfInLib"w60_eonv"Alias"#11"(ByValAHInstAsInteger,ByValmPathAsString,ByRefOutApAsInteger,ByRefOutAlAsInteger,ByRefOutArAsInteger)AsIntegerDeelareFunetionbAreInfOutLib"w60_eonv"Alias"#12"(ByValaiAsInteger,ByValFileNameAsString)AsIntegerDeelareFunetionbAreInLib"w60_eonv"Alias"#13"(ByValAHInstAsInteger,ByValmPathAsString,ByRefOutApAsInteger,ByRefOutAlAsInteger)AsIntegerDeelareFunetionbAreOutLib"w60_eonv"Alias"#14"(ByValaiAsInteger,ByValFileNameAsString)AsInteger'示例:'DimahlnstAsInteger'DimbinAiAsInteger'DimaiAsInteger'DimmpathAsString'DimfnameAsString'Dimres''ahlnst=blnitWorkArea(0)'mpath="d:\mapgis61\sample\china.wal"'res=bGisAscIn(ahInst,mpath,binAi)'MsgBoxres'fname="d:\mapgis61\sample\china.wal"'ai=bOpenLinArea(ahlnst)'bLoadFileai'res=bGisAscOut(ai,fname)'MsgBoxres'bFreeWorkAreaahInst47、 問:對于區(qū)有一個生成label文件的操作,它是生成的一個新的點文件并提示保存,現(xiàn)在我就是想把生成的點文件保存在現(xiàn)在點文件的一層里,有什么辦法嗎?答:修改生成的點文件中的每個點的圖形參數(shù),將圖層改為一致,再拷貝打一個點工作區(qū)中即可。48、 問:求一個點到一個區(qū)的最近和最遠距離要怎么做答:double_MinDistofPntToReg(D_DOT*pnt,shortai,long,ri)double_MaxDistofPntToReg(D_DOT*pnt,shortai,longri)*pnt點坐標地址ai區(qū)所在工作區(qū)ri區(qū)號若點位于區(qū)內(nèi),則最小距離為0================2003年12月10新增==============49、 問:請教關(guān)于定位的問題。在一個工作區(qū)里面,我使用SelectRegion方法獲得一個selectset,想把它放大顯示在屏幕中央,該如何操作,使用那一個對象或是方法??最好給幾句代碼(vb)。3Q首先,取出集合中實體圖形信息(Info)使用EditView.SetMapRange(MapRectAsD_Rect)方法更改圖形信息中的區(qū)域范圍(D_Rect)。50、問:動畫功能如何實現(xiàn)?如何在有向的道路中心線上實現(xiàn)車行的模擬?即在道路上定兩個點,以一定的速度,模擬汽車(符合)在兩個點間的動態(tài)的行走,能否給個簡單的demo。答:MAPGIS屬性數(shù)據(jù)支持動畫類型的數(shù)據(jù),不需要什么示例,你只要把相應的動畫剪輯(世面上有專門制作這種閃圖的軟件)建立到屬性庫中就可以了,在相應的地方調(diào)用程序執(zhí)行就行了。51、 問:請教大師:如何用vb實現(xiàn)mapgis投影變換中的''用戶的文件投影轉(zhuǎn)換”的功能;答:使用以下方法,用對話框設置投影變換。FunctionSetInPara([moveAsInteger],[EnableEditAsInteger=1])AsBoolean在PRJTRANSCOMLib.PrjTrans對象中52、 問:mapgis的幫助中講的圖元號和實體號是一個意思嗎?答:GIS里的一些專業(yè)術(shù)語是有些比較難懂,圖元號與實體號是一個意思。53、 問:_EditAtt這個函數(shù)包含聯(lián)動的功能嗎?我使用_EditAtt不能實現(xiàn)圖形的聯(lián)動,請問還需要使用別的函數(shù)嗎?答:EditAtt函數(shù)會彈出一個窗體,返回值是這個窗口的句柄。程序?qū)崿F(xiàn)聯(lián)動就是這個窗口和圖形所在的視圖窗口之間互相通信的結(jié)果。當在屬性編輯窗口中編輯某個記錄的字段時會像視圖窗口發(fā)送消息MGM_FLASH_GRAPH,該消息的wParam參數(shù)為屬性窗口狀態(tài),它可以是下列宏定義之一:BEGIN_EDATT:表示開始編輯屬性。EDITING_ATT:表示正在編輯屬性。END_EDATT:表示結(jié)束編輯屬性。屬性窗口發(fā)送此狀態(tài)時,屬性窗口沒有撤消。一般情況,屬性窗口發(fā)送的所有MGM_FLASH_GRAPH消息中,開始時為BEGIN_EDATT狀態(tài),最后為END_EDATT狀態(tài),中間為若干EDITING_ATT狀態(tài)。IParam參數(shù)為指向MGMSG結(jié)構(gòu)的指針,該指針所指結(jié)構(gòu)空間屬于屬性編輯窗口,MGMSG結(jié)構(gòu)如下:〃圖元實體信息結(jié)構(gòu)typedefstruct{shortai;〃工作區(qū)號。shorttype;〃圖元類型,為LIN,PNT,REG,NOD,NET,TBL之一。longelmi;〃圖元號。}ENTITY_MSG;〃圖元重新顯示信息結(jié)構(gòu)typedefENTITY_MSGMGMSG;通過lParam參數(shù),通知hWnd窗口當前記錄對應的圖元是什么。當聯(lián)動狀態(tài)為斷開時,屬性窗口不給hWnd窗口發(fā)送當前圖元消息。當鼠標在視圖窗口雙擊選中一個實體時應該像屬性窗口發(fā)送GoToAtt的消息,讓屬性跳轉(zhuǎn)到和空間實體對應的屬性處。具體的程序可參考VC開發(fā)第五章示例54、問:gisattedit控件問題請問大蝦,《mapgis組件開發(fā)手冊》中說gisattedit的GotoAtt方法,當參數(shù)rcdNo=0時,彈出跳轉(zhuǎn)條件對話框。但是我試過,卻無法實現(xiàn)。我把gisattedit與工作區(qū)綁定后,仍然不能用,不知有何奧妙?答:DimareaAsPntAreaSetarea=NewPntAreaIfarea.Load()ThenEditView.PntArea=areaEditView.LinkAttSwitch=TrueEditView.AttachAttWorkAreaarea,area.TypeGisAttEdit.AttachAreaarea,area.TypeEndIfPrivateSubEditView_CurAttElement(ByVallNoAsLong)GisAttEdit.GotoAttlNoEndSubPrivateSubGisAttEdit_CurRcdFldNo(ByValrcdNoAsLong,ByVaifldNoAsInteger)EditView.GotoElementarea,rcdNo,area.TypeEndSub55、 問:怎么在裁剪的時候不用裝入裁剪框文件,而是直接在工作區(qū)內(nèi)用鼠標畫一個框子.答:不是在工作區(qū)中畫一個框子,而是在View上拉一個框子,記錄下框子的各個點添加到一個新的工作區(qū)中,將這個工作區(qū)作為裁減框工作區(qū)。裁減完成后可以設置這個工作區(qū)的改變標志為false,在關(guān)閉它。56、 問:用_OverlayPntReg函數(shù),疊加在某一區(qū)上的點時,如何不讓區(qū)文件的屬性追加到點屬性上!謝答:你可以將點中和區(qū)屬性有關(guān)的一些屬性字段刪除。57、 問:在MAPGIS里如何獲得一個區(qū)的最長的邊,并且怎么知道它的方位答:對每一個區(qū)調(diào)用_GetReg(…,rdat,len....);doublemaxLength=O;doubletempLength;doublemaxLi=0;for(i=1;i{if(rdat[i]!=0){_GetLin(...abs(rdat[i]),dotset,linlen...)tempLength=_CalculateLength(dotset,linlen);if(tempLength>maxLeghth){maxLeghth=tempLeghth;maxLi=abs(rdat[i]);}}}58、 問:(MSVC++)如何使用API在SQLSERVER2000的庫中建立MAPGIS管理過程?答:出于安全方面的考慮,我們沒有將建mapgis管理過程的函數(shù)引出,故一定要在平臺上進行操作才能建立Mapgis管理過程。59、問:如何建立shapefile與mapgis的顏色對照表?答:shapefile本身并不帶有顏色信息,是需要在arcview中重新賦予的,比如根據(jù)屬性賦參數(shù),所以也就沒有和mapgis間的對照表,包括線型、顏色、子圖等。60、問:關(guān)于數(shù)據(jù)源的問題!我是WEB—MAPGIS的用戶,我想知道對于數(shù)據(jù)源,是不是必須用SQLSERVER作為數(shù)據(jù)源,能不能用其他的數(shù)據(jù)庫軟件?如ACCESS、FOXPRO等?另外我想問問QLSERVER2000是不是和WINDOWSXP這個操作系統(tǒng)不兼容?我迫切想知道答案,能快點回復我嗎?對于數(shù)據(jù)源,可以用SqlServer和Oracle,對于Access和FroPro不支持,原因很簡短,因為后兩種數(shù)據(jù)庫軟件對大型數(shù)據(jù)庫支持不好,所以我們沒有作SDE,SqlServer2000不會與WindowsXp沖突,因為他們都是微軟的,你可以打Sql的Sp4布丁和XP的布丁,不會有問題61、問:我有兩個線工作區(qū),一個裝了一條直線,另一個裝了一系列等值線,我希望得到直線與等值線相交的一系列點,求教實現(xiàn)方法!謝謝!答:可以用函數(shù):short_CalCrossDot(D_DOT*la0,D_DOT*la1,D_DOT*lb0,D_DOT*lb1,D_DOT*xy)參數(shù):入口*la0-線段的起點坐標*la1-線段的終點坐標*lb0-另一線段的起點坐標*lb1-另一線段的終點坐標出口*xy-兩直線的交點坐標返回值1/0-成功/失敗用一個雙循環(huán),對每一條等值線調(diào)用_GetLin得到線的空間數(shù)據(jù),其中會返回一個點集,點集中每兩個相鄰的點形成一條直線,對這每一條直線和直線工作區(qū)中的直線調(diào)用上述的函數(shù)_CalCrossDot即可得到交點坐標。62、問:能夠通過區(qū)域的邊界點的地理坐標求得區(qū)域得實際面積嗎?答:在projDll中有函數(shù)doubleWINAPI_CountPolygonArea(D_DOT*xyLst,intlen,MAP_PARA*map);可以根據(jù)形成多邊形的點集以及相應的地圖參數(shù)計算出實際面積。63、問:用EDITVIEW顯示多個點(或線)文件后,怎樣激活某一層點(線)文件,并對其修改?答:根據(jù)你要修改的那一層的工作區(qū)類型,將工作區(qū)對象賦給EditView相應的工作區(qū)接口。如:要修改某區(qū)工作區(qū)regAi,則EditView.RegArea=regAi64、問:我有一個*.GRD文件,利用什么MAPGIS庫的什么函數(shù)把它顯示為等值線?要是離散的數(shù)據(jù),顯示之前又是調(diào)用什么函數(shù)把他規(guī)格化呢?答:MAPGIS提供了TINSDk開發(fā)包,可到網(wǎng)站下載.在Tin_Area.h文件中,GRD數(shù)據(jù)可通過_tnTinGridDemTraceContour()函數(shù)追蹤為等值線.具體步驟:使用_tnGetTinAI()創(chuàng)建TIN工作區(qū);使用_tnLoadFile()裝入GRD文件;使用_tnTinGridDemTraceContour()進行追蹤過程(此函數(shù)提供參數(shù)設置界面).離散數(shù)據(jù),有兩種網(wǎng)格化方法(依數(shù)據(jù)而定):直接使用_tnDistInsGriding()或_tnKringGriding()進行網(wǎng)格化;先建立三角網(wǎng)(可使用_tnCreateTinNetlnTinAreaO),再使用_tnTinDatGriding()內(nèi)插網(wǎng)格化.65、 問:我想將計算得到的一系列離散的數(shù)據(jù),畫成函數(shù)曲線通過對話框顯示出來,請問用什么比較好?答:方法:得到了離散點,調(diào)用mapgis的光滑函數(shù)(TinBas60.dll,w60LnCps.h),生成線文件,直接放到mapgis提供的顯示對象或控件顯示即可。66、 問:請問QUERY對象查詢時,輸入條件查詢時,''輸入日期大于2002-2-1”的條件,應該何格式?我用''日期>2002-2-1"格式后,查詢的結(jié)果超出查詢的范圍。答:對于日期的查詢需要將日期用"[]"括起來,如:日期>[2002-2-1]67、 問:請教等值線問題有我一批點的X坐標、Y坐標和觀測值,想在自已的程序中畫等值線,mapgis里的數(shù)字地面模型中有這樣的功能,但是我不知道二次開發(fā)函數(shù)是那些(特別是那三種數(shù)據(jù)網(wǎng)格化方法的函數(shù))?而且對TIN文件也一點不懂,能不能給介紹下這方面的知識和mapgis的等值線繪制方法,并給發(fā)個例子程序?答:首先,要下載TINSDK的開發(fā)庫;在其中Tin_Area.h頭文件中,有相關(guān)函數(shù)的說明可供參考.由于這一部分的二次開發(fā)庫還未正式推出,所以目前尚無開發(fā)手冊,只能針對具體開發(fā)函數(shù)回答.對于等值線追蹤,對于離散點數(shù)據(jù),應按照下列步驟進行:首先按照系統(tǒng)要求的DET數(shù)據(jù)格式,編輯你的數(shù)據(jù)(可以參考DTM系統(tǒng));使用_tnGetTinAI()創(chuàng)建TIN工作區(qū),最后應用_tnDeleteTinAI()刪除;使用_tnLoadFile()裝入數(shù)據(jù)文件;使用_tnCreateTinNetlnTinArea()生成三角網(wǎng);使用_tnTinTriNetTraceContour()追蹤等值線;================2003年12月17日新增===========68、 問:關(guān)于輸入?yún)^(qū)的問題有什么辦法,讓邊輸入弧段邊生成區(qū),當弧段封閉時,就自動生成一個區(qū)。而且輸入弧段最好用鍵盤輸入。能實現(xiàn)嗎?給段代碼吧答:鍵盤輸入點,記錄下每一個點的坐標。添加到一個D_Dot數(shù)組中,記錄下點數(shù)。用下面的函數(shù)即可將這些點組成弧段并生成區(qū)。(當然第一個點和最后一個點應該是同一個點。)longMakeRegFromLin(shortai,D_DOT*pddDot,longnum){ASSERT(ai>0);//添加弧段LIN_INFOLinlnfo={0};longLinNo=_AppendLin(ai,pddDot,num,&LinInfo);//造區(qū)longrdat[3]={0};rdat[0]=num+1;rdat[1]=LinNo;REG_INFORegInfo={0};longRegNo=_AppendReg(ai,rdat,2,&RegInfo);returnRegNo;}69、 問:如何在EDITVIEW中加入多個點線區(qū)文件?答:DimpntArealAsPntAreaDimpntArea2AsPntAreaDimlinArealAsLinAreaDimlinArea2AsLinAreaDimregArealAsRegAreaDimregArea2AsRegAreaPrivateSubCommandButton1_Click()SetpntArea1=NewPntAreaSetpntArea2=NewPntAreaSetlinArea1=NewLinAreaSetlinArea2=NewLinAreaSetregArea1=NewRegAreaSetregArea2=NewRegAreapntArea1丄oadpntArea2丄oadlinAreaLLoadlinArea2丄oadregAreaLLoadregArea2丄oadEndSubPrivateSubEditView1_MyDraw(ByValMpDCAsObject)MpDC.DispAreapntArea1MpDC.DispAreapntArea2MpDC.DispArealinArea1MpDC.DispArealinArea2MpDC.DispArearegArea1MpDC.DispArearegArea2EndSub70、 問:如何在繼承PRJ建立切分視后,向文件添加項目,給個示例吧?答:intflag;charszName[256];chardsn[32];charowner[32];charftype;charopenflag;charfilter[]="MapGis線文件(*.wl)\0*.wl\0\0";charttlStr[]="添加線文件";openflag=0;memset(szName,0,sizeof(szName));memset(dsn,0,sizeof(dsn));memset(owner,0,sizeof(owner));flag=_InputFileName(szName,dsn,owner,&ftype,openflag,filter,ttlStr);if(flag=1){〃給工程添加文件,只需要知道該文件的文件名,并不需要打開該文件(裝入工作區(qū))_PRJAppend(GetProject(),szName,NULL,-1);//PrjListView中顯示剛添加進的文件((CMyPrjListView*)(((CChildFrame*)(((CFrameWnd*)(AfxGetMainWnd()))->GetActiveFrame()))->m_wndSplitter.GetPane(0,0)))->ReloadPrjItems();//PrjEditView復位顯示OnRestoreWindow();}71、 問:請問如何用VB實現(xiàn)多個圖元在EDITVIEW上同時閃爍?答:DimselsetAsSelectSetSetselset=NewSelectSetFori=1ToIst.Count-1〃\\閃爍多個實體,對每一個實體都要New—個SelectitemSetsel=NewSelectitemsel.Type=gisLIN_ENTITYsel.ItemNo=lst.Item(i)sel.WorkArea=areaObjselset.AddselSetsel=NothingNextSetEditView.SelectSet=selsetEditView.FlashElementEditView.SelectSetSetselset=Nothing72、 問:有什辦法在GAPGIS內(nèi)核啟動之前修改環(huán)境目錄?我試過許多種方法,包括在CMyApp::InitInstance()甚至在構(gòu)造函數(shù)CMyApp::CMyApp()中加入相關(guān)檢查程序行也失敗??粗B續(xù)蹦出來的幾個標著驚嘆號的對話框和接下來的死翹翹。真是讓人傷心。答:在程序外面包一層不調(diào)用mapgis顯示相關(guān)動態(tài)庫的程序即可。外層程序僅僅調(diào)用win_area.h中的函數(shù)來修改目錄環(huán)境。修改完成后,調(diào)用進程函數(shù)裝入要執(zhí)行的mapgis程序。73、 問:如何根據(jù)點的屬性(坐標值)調(diào)整點的位置?答:如果是單個調(diào)整的話,可以利用''定位點”的方式;如果是批量調(diào)整,那就把坐標屬性導出來然后再根據(jù)坐標來生成點。74、問:在用VC++得類庫開發(fā)時,調(diào)用API函數(shù)時EDITWND參數(shù)如何獲?。课沂且晃粍倢WMAPgis開發(fā)的新手。在用VC++得類庫開發(fā)時,調(diào)用API函數(shù)時EDITWND參數(shù)如何獲???謝謝,那位能幫助我。答:現(xiàn)在Mapgis推薦使用類庫來進行二次開發(fā),你說的EDITWND已經(jīng)被封裝到CGisView類當中,你直接繼承CGisView類即可完成Mapgis圖形顯示的功能。具體的做法如下:第一步:建一個VisualC++的項目。打開VisualC++工作環(huán)境,選擇File菜單New命令,在彈出的對話框中選擇Projects頁的MFCAppWizard(EXE)項并在Projectname編輯框中敲入工程名(例如:engineer),然后單擊OK。這樣便進入了AppWizard(向?qū)В┑牡谝徊?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論