10楼#
发布于:2006-12-01 13:06
<P>也,代码呢?怎么发附件啊?这样吧,免的说我骗贴!!</P>
<P>unit Unit1;</P> <P>interface</P> <P>uses<BR> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<BR> Dialogs, OleCtrls, ImgList, ActnList, ComCtrls, ToolWin, RzStatus, RzPanel,<BR> ExtCtrls, RzTabs, RzSplit, esriSystem_TLB, StdCtrls,RzButton,<BR> esriCarto_TLB, esriGeoDatabase_TLB, esriDataSourcesFile_TLB,<BR> esriGeometry_TLB, esriSystemUI_TLB, esriDisplay_TLB, esriMapControl_TLB,<BR> esriTOCControl_TLB, esriToolbarControl_TLB, Math;</P> <P>type<BR> TForm1 = class(TForm)<BR> RzSplitter1: TRzSplitter;<BR> RzPageControl1: TRzPageControl;<BR> TabSheet1: TRzTabSheet;<BR> TabSheet2: TRzTabSheet;<BR> RzStatusBar1: TRzStatusBar;<BR> RzStatusPane1: TRzStatusPane;<BR> CoolBar1: TCoolBar;<BR> ToolBar1: TToolBar;<BR> ToolButton1: TToolButton;</P> <P> RzProgressStatus1: TRzProgressStatus;<BR> OpenDialog1: TOpenDialog;<BR> ActionList1: TActionList;<BR> ImageList1: TImageList;<BR> acCreateTinFromFile: TAction;<BR> Panel1: TPanel;<BR> ToolButton3: TToolButton;<BR> ToolButton2: TToolButton;<BR> ToolButton4: TToolButton;<BR> ToolButton5: TToolButton;<BR> procedure FormClose(Sender: TObject; var Action: TCloseAction);<BR> procedure FormCreate(Sender: TObject);<BR> procedure acCreateTinFromFileExecute(Sender: TObject);<BR> procedure ToolButton3Click(Sender: TObject);<BR> procedure ToolButton2Click(Sender: TObject);<BR> procedure ToolButton4Click(Sender: TObject);<BR> procedure ToolButton5Click(Sender: TObject);<BR> private<BR> { Private declarations }<BR> public<BR> { Public declarations }<BR> MapControl1: TMapControl;<BR> TOCControl1: TTOCControl;<BR> ToolbarControl1: TToolbarControl;<BR> function CreateTinFromDataFile(DataFile, TinName, TinPath: string;<BR> MaxEdgeLen: Double; IsEdgeModify: Boolean): ITin;<BR> procedure ModifyTinEdge(ipTin: ITin;MaxEdgeLen: Double);<BR> end;</P> <P>var<BR> Form1: TForm1;</P> <P>implementation</P> <P>uses Unit2, Unit3, Unit4;</P> <P>{$R *.dfm}</P> <P>procedure TForm1.FormCreate(Sender: TObject);<BR>var<BR> pAOInitialize : IAoInitialize;<BR>begin<BR> pAOInitialize :=IAoInitialize(CoAoInitialize.Create);<BR> //Set8087CW($133f) ;<BR> ToolbarControl1:= TToolbarControl.Create(Self);<BR> ToolbarControl1.Parent:= ToolBar1;<BR> MapControl1:= TMapControl.Create(Self);<BR> MapControl1.Parent:= Panel1;<BR> MapControl1.Align:= alClient;<BR> TOCControl1:= TTOCControl.Create(Self);<BR> TOCControl1.Parent:= TabSheet1;<BR> TOCCOntrol1.Align:= alClient;</P> <P> ToolbarControl1.AddItem('esriControlTools.ControlsOpenDocCommand', 0, -1, FALSE,0,esriCommandStyleIconOnly);<BR> ToolbarControl1.AddItem('esriControlTools.ControlsSaveAsDocCommand', 0, -1, FALSE,0,esriCommandStyleIconOnly);<BR> ToolbarControl1.AddItem('esriControlTools.ControlsMapZoomInTool', 0,-1, False,0,esriCommandStyleIconOnly);<BR> ToolbarControl1.AddItem('esriControlTools.ControlsMapZoomOutTool', 0,-1, False,0,esriCommandStyleIconOnly);<BR> ToolbarControl1.AddItem('esriControlTools.ControlsMapPanTool', 0,-1, False,0,esriCommandStyleIconOnly);<BR> ToolbarControl1.AddItem('esriControlTools.ControlsMapFullExtentCommand', 0,-1, False,0,esriCommandStyleIconOnly);<BR> //ToolbarControl1.AddItem('esriControlTools.ControlsSceneZoomInOutTool', 0,-1, False,0,esriCommandStyleIconOnly);<BR> ToolbarControl1.AddItem('esriControlTools.ControlsSelectFeaturesTool', 0,-1, False,0,esriCommandStyleIconOnly);</P> <P> TOCControl1.SetBuddyControl(MapControl1.DefaultInterface);<BR> ToolbarControl1.SetBuddyControl(MapControl1.DefaultInterface);<BR>end;</P> <P>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<BR>var<BR> P:DWORD;<BR> H : Integer;<BR>begin<BR> (CoAoInitialize.Create as IAoInitialize).Shutdown;<BR> H:=Application.Handle;<BR> if H<>0 then<BR> begin<BR> GetWindowThreadProcessId(H,@P);<BR> if P=0 then Exit;<BR> TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);<BR> end;<BR>end;</P> <P>function TForm1.CreateTinFromDataFile(DataFile, TinName, TinPath: string;<BR> MaxEdgeLen: Double; IsEdgeModify: Boolean): ITin;<BR>var<BR> ipTinEdit: ITinEdit;<BR> ipEnvelope: IEnvelope;<BR> pEnvelope: OleVariant;<BR> List,ListXYZ: TStringList;<BR> ipPoint: IPoint;<BR> ipArray: IArray;<BR> ipUnk: IUnknown;<BR> I, Count, NodeIndex: Integer;<BR> XMin, XMax, YMin, YMax: Double;<BR> IsSuccessful: WordBool;<BR> ipSpatialReferenceFac: ISpatialReferenceFactory;<BR> ipProjCoordSystem: IProjectedCoordinateSystem;<BR>begin<BR> List:= TStringList.Create;<BR> ListXYZ:= TStringList.Create;<BR> List.LoadFromFile(DataFile);<BR> ipArray:= CoArray_.Create as IArray;<BR> XMin:= 100000000;<BR> XMax:= -100000000;<BR> YMin:= 100000000;<BR> YMax:= -100000000;<BR> for I:= 0 to List.Count - 1 do<BR> begin<BR> if Trim(List.Strings)= '' then Break;<BR> ListXYZ.DelimitedText:= List.Strings;<BR> ipPoint:= CoPoint.Create as IPoint;<BR> if StrToFloat(ListXYZ.Strings[0]) < 1000000 then<BR> ipPoint.Set_X(StrToFloat(ListXYZ.Strings[0])+41000000)<BR> else<BR> ipPoint.Set_X(StrToFloat(ListXYZ.Strings[0]));<BR> ipPoint.Set_Y(StrToFloat(ListXYZ.Strings[1]));<BR> ipPoint.Set_Z(StrToFloat(ListXYZ.Strings[2])*-1);<BR> ipArray.Add(ipPoint as IUnknown);<BR> if StrToFloat(ListXYZ.Strings[0]) < XMin then XMin:= StrToFloat(ListXYZ.Strings[0]);<BR> if StrToFloat(ListXYZ.Strings[0]) > XMax then XMax:= StrToFloat(ListXYZ.Strings[0]);<BR> if StrToFloat(ListXYZ.Strings[1]) < YMin then YMin:= StrToFloat(ListXYZ.Strings[1]);<BR> if StrToFloat(ListXYZ.Strings[1]) > YMax then YMax:= StrToFloat(ListXYZ.Strings[1]);<BR> end;<BR> List.Free;<BR> ListXYZ.Free;</P> <P> ipSpatialReferenceFac:= CoSpatialReferenceEnvironment.Create as ISpatialReferenceFactory;<BR> ipSpatialReferenceFac.CreateProjectedCoordinateSystem(<BR> esriSRProjCS_Beijing1954_3_Degree_GK_Zone_41,ipProjCoordSystem);</P> <P> ipTinEdit:= CoTin.Create as ITinEdit;<BR> ipEnvelope:= CoEnvelope.Create as IEnvelope;<BR> ipEnvelope.Project(ipProjCoordSystem as ISpatialReference);<BR> ipEnvelope.Set_XMin(XMin);<BR> ipEnvelope.Set_XMin(XMax);<BR> ipEnvelope.Set_YMin(YMin);<BR> ipEnvelope.Set_YMax(YMax);<BR> ipTinEdit.InitNew(ipEnvelope);<BR> ipTinEdit.StartEditing(IsSuccessful);<BR> ipArray.Get_Count(Count);<BR> for I:= 0 to Count-1 do<BR> begin<BR> ipArray.Get_Element(I, ipUnk);<BR> ipTinEdit.AddPointZ(ipUnk as IPoint, 0, NodeIndex);<BR> end;<BR> if IsEdgeModify then<BR> ModifyTinEdge(ipTinEdit as ITin, MaxEdgeLen);<BR> ipTinEdit.SaveAs(TinPath+TinName,pEnvelope);<BR> ipTinEdit.StopEditing(True, IsSuccessful);<BR> Result:= ipTinEdit as ITin;<BR>end;</P> <P>procedure TForm1.ModifyTinEdge(ipTin: ITin; MaxEdgeLen: Double);<BR>var<BR> ipTinEdit: ITinEdit;<BR> ipTinAdvanced: ITinAdvanced;<BR> I, EdgeCount, Index, TriCount: LongInt;<BR> ipTinEdge: ITinEdge;<BR> EdgeLen: Double;<BR> ipTriangle: ITinTriangle;<BR> IsInEditMode, IsSuccessful: WordBool;<BR> a, b, c, al, be, ga: Double;<BR>begin<BR> ipTinEdit:= ipTin as ITinEdit;<BR> ipTinAdvanced:= ipTin as ITinAdvanced;<BR> ipTinAdvanced.Get_EdgeCount(EdgeCount);<BR> for I:= 1 to EdgeCount do<BR> begin<BR> ipTinAdvanced.GetEdge(I, ipTinEdge);<BR> ipTinEdge.Get_Length(EdgeLen);<BR> if EdgeLen > MaxEdgeLen then<BR> begin<BR> ipTinEdge.Get_LeftTriangle(ipTriangle);<BR> if ipTriangle <> nil then<BR> begin<BR> ipTriangle.Get_Index(Index);<BR> ipTinEdit.SetTriangleOutsideDataArea(Index);<BR> end;<BR> ipTinEdge.Get_RightTriangle(ipTriangle);<BR> if ipTriangle <> nil then<BR> begin<BR> ipTriangle.Get_Index(Index);<BR> ipTinEdit.SetTriangleOutsideDataArea(Index);<BR> end;<BR> end;<BR> end;</P> <P> ipTinAdvanced.Get_TriangleCount(TriCount);<BR> for I:= TriCount downto 1 do<BR> begin<BR> ipTinAdvanced.GetTriangle(I, ipTriangle);<BR> ipTriangle.Get_Edge(0, ipTinEdge);<BR> ipTinEdge.Get_Length(a);<BR> ipTriangle.Get_Edge(1, ipTinEdge);<BR> ipTinEdge.Get_Length(b);<BR> ipTriangle.Get_Edge(2, ipTinEdge);<BR> ipTinEdge.Get_Length(c);<BR> al := ArcCos((b*b + c*c - a*a)/2/b/c);<BR> be := ArcCos((a*a + c*c - b*b)/2/a/c);<BR> ga := pi - al - be;<BR> if (RadToDeg(al) >= 150) or (RadToDeg(be) >= 150) or (RadToDeg(ga) >= 150) then<BR> ipTinEdit.SetTriangleOutsideDataArea(I);<BR> end;<BR>end;</P> <P><BR>procedure TForm1.acCreateTinFromFileExecute(Sender: TObject);<BR>var<BR> ipTin: ITin;<BR> ipTinLayer: ITinLayer;<BR> ipTinRenderer: ITinRenderer;<BR> ipTinSingleSymbolRenderer: ITinSingleSymbolRenderer;<BR> ipSymbol: ISymbol;<BR> ipSimpleLineSymbol: ISimpleLineSymbol ;<BR> ipColor: IColor;<BR>begin<BR> if OpenDialog1.Execute then<BR> begin<BR> ipTinLayer:= CoTinLayer.Create as ITinLayer;<BR> ipTin:= CreateTinFromDataFile(OpenDialog1.FileName, Copy(ExtractFileName(OpenDialog1.FileName), 1 ,Pos('.', ExtractFileName(OpenDialog1.FileName))-1)+'Tin',ExtractFilePath(OpenDialog1.FileName),2500, True);<BR> ipTinLayer._Set_Dataset(ipTin);<BR> ipTinLayer.Set_Name('Tin');</P> <P> MapControl1.AddLayer(ipTinLayer as ILayer, 0);</P> <P> ipTinRenderer:= CoTinEdgeRenderer.Create as ITinRenderer;<BR> ipTinSingleSymbolRenderer:= ipTinRenderer as ITinSingleSymbolRenderer;<BR> ipSymbol:= CoSimpleLineSymbol.Create as ISymbol;<BR> ipSimpleLineSymbol:= ipSymbol as ISimpleLineSymbol;<BR> ipSimpleLineSymbol.Set_Style(esriSLSSolid);<BR> ipColor:= CoRgbColor.Create as IColor;<BR> ipColor.Set_RGB(255);<BR> ipSimpleLineSymbol.Set_Color(ipColor);<BR> ipTinSingleSymbolRenderer._Set_Symbol(ipSymbol);</P> <P> ipTinLayer.ClearRenderers;<BR> ipTinLayer.AddRenderer(ipTinRenderer);<BR> end;<BR>end;</P> <P>procedure TForm1.ToolButton3Click(Sender: TObject);<BR>var<BR> ipFeature: IFeature;<BR> ipGeometry, ipOutGeometry: IGeometry;<BR> ipCurve: ICurve;<BR> ipMap: IMap;<BR> ipSelection: ISelection;<BR> ipEnumFeature: IEnumFeature;<BR> ipTinLayer: ITinLayer;<BR> ipTin: ITin;<BR> ipTinSurface: ITinSurface;<BR> StepSize: OleVariant;<BR> ipPointCollection: IPointCollection;<BR> I, Count: Integer;<BR> ipPoint, ipTempPoint: IPoint;<BR> ipArray: IArray;<BR> PointArray: array of array of Double;<BR> ipProximityOperator: IProximityOperator;<BR> Dis, Z, Max, Min: Double;<BR>begin<BR> //ipArray:= CoArray_.Create as IArray;<BR> //获取断面几何对象<BR> ipMap:= MapControl1.Map;<BR> ipMap.Get_FeatureSelection(ipSelection);<BR> ipEnumFeature:= ipSelection as IEnumFeature;<BR> ipEnumFeature.Reset;<BR> ipEnumFeature.Next(ipFeature);<BR> if ipFeature = nil then<BR> begin<BR> Showmessage('请选择断面!');<BR> Exit;<BR> end;<BR> ipFeature.Get_Shape(ipGeometry);<BR> ipCurve:= ipGeometry as ICurve;<BR> ipCurve.Get_FromPoint(ipPoint);<BR> //ipArray.Add(ipPoint);<BR> //获取TinSurface<BR> ipTinLayer:= MapControl1.Layer[1] as ITinLayer;<BR> ipTinLayer.Get_Dataset(ipTin);<BR> ipTinSurface:= ipTin as ITinSurface;<BR> ipTinSurface.InterpolateShape(ipGeometry,ipOutGeometry, StepSize);<BR> ipPointCollection:= ipOutGeometry as IPointCollection;<BR> ipPointCollection.Get_PointCount(Count);<BR> SetLength(PointArray, Count, 2);<BR> ipProximityOperator:= ipPoint as IProximityOperator;<BR> for I:= 0 to Count-1 do<BR> begin<BR> ipPointCollection.Get_Point(I, ipTempPoint);<BR> ipProximityOperator.ReturnDistance(ipTempPoint, Dis);<BR> PointArray[I,0]:= Round(Dis*100)/100;<BR> ipTempPoint.Get_Z(Z);<BR> PointArray[I,1]:= Round(Z*100)/100;<BR> end;</P> <P> Form2:= TForm2.Create(nil);<BR> Form2.Cell1.OpenFile('G:\A编程区\Delphi\ArcEngine\起点距水深表','');<BR> Max:= -9999; Min:= 9999;<BR> for I:= 0 to Count-1 do<BR> begin<BR> Form2.Cell1.InsertRow(I+2, 1, 0);<BR> Form2.Cell1.SetCellDouble(1, I+2, 0, PointArray[I,0]);<BR> Form2.Cell1.SetCellDouble(2, I+2, 0, PointArray[I,1]*(-1));<BR> Form2.Series1.AddXY(PointArray[I,0], PointArray[I,1]*(-1));<BR> Form2.Series2.AddXY(PointArray[I,0], 5);<BR> if Max < PointArray[I,1]*(-1) then Max:= PointArray[I,1]*(-1);<BR> if Min > PointArray[I,1]*(-1) then Min:= PointArray[I,1]*(-1);<BR> end;<BR> Form2.Chart1.LeftAxis.Minimum:= Min-(Max-Min)*0.3;<BR> Form2.Chart1.LeftAxis.Maximum:= Max+(Max-Min)*0.3;<BR> Form2.ShowModal;<BR> Form2.Free;</P> <P>end;</P> <P>procedure TForm1.ToolButton2Click(Sender: TObject);<BR>var<BR> ipFeature: IFeature;<BR> ipGeometry: IGeometry;<BR> ipMap: IMap;<BR> ipSelection: ISelection;<BR> ipEnumFeature: IEnumFeature;<BR> ipTinLayer: ITinLayer;<BR> ipTin: ITin;<BR> ipTinEdit: ITinEdit;<BR> ipTinFeatureEdit: ITinFeatureEdit;<BR> IsSuccessful: WordBool;<BR> ipTinSurface: ITinSurface;<BR> Volume, Area, Depth: Double;<BR> ipArea: IArea;<BR> I: Integer;<BR> ipLayer: ILayer;<BR> LayerName: WideString;<BR>begin<BR> ipMap:= MapControl1.Map;<BR> ipMap.Get_FeatureSelection(ipSelection);<BR> ipEnumFeature:= ipSelection as IEnumFeature;<BR> ipEnumFeature.Reset;<BR> ipEnumFeature.Next(ipFeature);<BR> if ipFeature = nil then<BR> begin<BR> Showmessage('请选择区域!');<BR> Exit;<BR> end;<BR> ipFeature.Get_Shape(ipGeometry);</P> <P> Form3:= TForm3.Create(nil);<BR> Form3.ipGeometry:= ipGeometry;<BR> for I:= 0 to MapControl1.LayerCount -1 do<BR> begin<BR> ipLayer:= MapControl1.Layer;<BR> ipLayer.QueryInterface(ITinLayer, ipTinLayer);<BR> if ipTinLayer <> nil then<BR> begin<BR> ipTinLayer.Get_Name(LayerName);<BR> Form3.RzCheckList1.Items.Add(LayerName);<BR> end;<BR> end;</P> <P> Form3.ShowModal;<BR> {<BR> ipTinLayer:= MapControl1.Layer[6] as ITinLayer;<BR> ipTinLayer.Get_Dataset(ipTin);</P> <P> ipTinEdit:= ipTin as ITinEdit;<BR> //ipTinEdit.StartEditing(IsSuccessful);<BR> ipTinFeatureEdit:= ipTin as ITinFeatureEdit;<BR> ipTinFeatureEdit.StartInMemoryEditing(IsSuccessful);<BR> ipTinEdit.AddShape(ipGeometry,esriTinSoftClip, 0, EmptyParam);<BR> //ipTinEdit.StopEditing(True, IsSuccessful);</P> <P> ipTinSurface:= ipTin as ITinSurface;<BR> ipTinSurface.GetVolume(-5, 1, Volume);<BR> ipTinSurface.GetProjectedArea(-5, 1, Area);<BR> Depth:= Volume/Area+5;<BR> Showmessage(FloatToStr(Volume));<BR> Showmessage(FloatToStr(Depth));<BR> }<BR>end;</P> <P>procedure TForm1.ToolButton4Click(Sender: TObject);<BR>var<BR> ipFeature: IFeature;<BR> ipGeometry: IGeometry;<BR> ipMap: IMap;<BR> ipGraphicsLayer: IGraphicsLayer;<BR> ipGraphicsContainer: IGraphicsContainer;<BR> ipSelection: ISelection;<BR> ipEnumFeature: IEnumFeature;<BR> ipLayer: ILayer;<BR> ipTinLayer: ITinLayer;<BR> ipFeatureLayer: IFeatureLayer;<BR> ipFeatureClass: IFeatureClass;<BR> ipTin: ITin;<BR> ipTinAdvanced: ITinAdvanced;<BR> ipPolygon: IPolygon;<BR> ipElement: IElement;<BR> ipFillShapeElement: IFillShapeElement;<BR> ipFillSymbol: IFillSymbol;<BR> ipColor: IColor;<BR> Count: Integer;<BR> ipTable: ITable;<BR> ipFeatureCursor: IFeatureCursor;<BR> ipDataset: IDataset;<BR> ipWorkspace: IWorkspace;<BR> ipWorkspaceEdit: IWorkspaceEdit;<BR> ipSelectionSet: ISelectionSet;<BR>begin<BR>{<BR> ipMap:= MapControl1.Map;<BR> ipMap.Get_BasicGraphicsLayer(ipGraphicsLayer);<BR> ipGraphicsContainer:= ipGraphicsLayer as IGraphicsContainer;</P> <P><BR> ipLayer:= MapControl1.Layer[4];<BR> ipTinLayer:= ipLayer as ITinLayer;<BR> ipTinLayer.Get_Dataset(ipTin);<BR> ipTinAdvanced:= ipTin as ITinAdvanced;<BR> ipTinAdvanced.GetDataArea(ipPolygon);<BR> ipElement:= CoPolygonElement.Create as IElement;<BR> ipElement.Set_Geometry(ipPolygon as IGeometry);<BR> ipFillShapeElement:= ipElement as IFillShapeElement;<BR> ipFillSymbol:= CoSimpleFillSymbol.Create as IFillSymbol;<BR> ipColor:= CoRgbColor.Create as IColor;<BR> ipColor.Set_Transparency(0);<BR> ipFillSymbol.Set_Color(ipColor);<BR> ipFillShapeElement.Set_Symbol(ipFillSymbol);<BR> ipGraphicsContainer.AddElement(ipElement, 0);<BR> }<BR> MapControl1.AddShapeFile('H:\','Regin');<BR> ipLayer:= MapControl1.Layer[0];<BR> ipFeatureLayer:= ipLayer as IFeatureLayer;</P> <P> ipFeatureLayer.Get_FeatureClass(ipFeatureClass);<BR> //ipFeatureClass.Search(nil, False, ipFeatureCursor);<BR> //ipFeatureCursor.NextFeature(ipFeature);<BR> ipFeatureClass.FeatureCount(nil, Count);<BR> //ipFeatureClass.GetFeature(0, ipFeature);<BR> //if ipFeature <> nil then<BR> Showmessage(IntTostr(Count));<BR> {<BR> ipDataset:= ipFeatureClass as IDataset;<BR> ipDataset.Get_Workspace(ipWorkspace);<BR> ipWorkspaceEdit:= ipWorkspace as IWorkspaceEdit;<BR> ipWorkspaceEdit.StartEditing(True);<BR> ipWorkspaceEdit.StartEditOperation;</P> <P> ipFeatureClass.Search(nil, False, ipFeatureCursor);<BR> ipFeatureCursor.NextFeature(ipFeature);<BR> if ipFeature <> nil then<BR> begin<BR> ipFeatureClass.FeatureCount(nil, Count);<BR> Showmessage(IntTostr(Count));<BR> end;<BR> }<BR>end;</P> <P>procedure TForm1.ToolButton5Click(Sender: TObject);<BR>begin<BR> Form4:= TForm4.Create(nil);<BR> Form4.SetMapControl(MapControl1);<BR> Form4.ShowModal;<BR> Form4.Free;<BR>end;</P> <P>end.</P> |
|
上一页
下一页