arcgis nd

Upload: edvinas-prokofijovas

Post on 10-Oct-2015

20 views

Category:

Documents


0 download

DESCRIPTION

Arcgis too.

TRANSCRIPT

VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETASFUNDAMENTINI MOKSL FAKULTETASGRAFINI SISTEM katedra

Geografini informacinisistem pagrindaiNam DARBAS

Atliko: Edvardas alcas, ITF-10Tikrino: Doc. Ana Usovait

Vilnius, 2013Turinys1.Uduotis22. vadas33.Programos veikimo apraymas44.ArcObjects ir COM55.DrawGraphicPolygon.dll krimas56.Mygtuko terpimas ArcMap program57.Mygtuko veikimas ArcMap programiniame pakete68.Programos kodas7Ivados10Literatra10

1. UduotisDraw polygons. This program draws polygons on mouse click in current map. The polygon should be in own layer, should persist on the screen, it should not disappear on the next screen refresh.ArcGIS programins rangos pagalba sukurti:1. Programa turi pakurti mygtuk, kurio pagalba bus pieiamas poligonas.2. Programa paspaudus mygtuk turi sukurti poligona.3. Poligonai turi bti atskirame sluoksnyje ir neturi dingti perkraunant ekran.4. Sluoksnis turi bti kuriamas kai nubraiome pirm poligon, visi kiti poligonai braiomi esame sluoksn.

2. vadasGeografin informacin sistema (GIS) informacin sistema skirta darbui su erdvine ir apraomja informacija. Sistema skirta skaitmenini, koordinuot erdvje duomen kaupimui, saugojimui, vaizdavimui, redagavimui, integravimui bei analizei.Viena inomiausi GIS yra ESRI ArcGISo paketas. ArcGIS nra vientisas, bet sudarytas i trij pagrindini dali:1. ArcGIS Desktop paketas skirtas darbui su emlapiais ir kit GIS funkcij atlikimui. Jis taip pat sudarytas i keli integruot dali:0. ArcMap pagrindin ArcGIS Desktop dalis skirta darbui su emlapiais (krimui, analizei, redagavimui).0. ArcCatalog leidia valdyti ir organizuoti GIS duomenis.0. ArcToolbox yra paprastas paketas turintis savyje daugyb nauding ranki, skirt manipuliavimui geografiniais duomenimis.1. ArcSDE paketas skirtas geografini duomen bazi valdymui1. ArcIMS Internetui skirta GIS, kurios pagalba galima platinti duomenis ir paslaugas.ArcGIS gali bti sukonfiguruota tiek vienam, tiek ir daugeliui vartotoj. Modulin ArcGIS struktra lemia didel ios GIS lankstum ir pritaikomum vairiems poreikiams.

3. ArcObjects ir COM ArcObjects yra vystymo platforma ArcGIS produkt eimai (ArcMap, ArcCatalog ir ArcScene). ArcObjects yra griauiai, kurie leidia sukurti tam tikrai sriiai specifinius komponentus i kit komponent. ArcObjects sukurti naudojant Microsoft Component Object Model (COM) technologij. Taigi galima plsti ArcObjects kuriant COM komponentus naudojant bet kuri COM suderinam programavimo kalb. ArcGIS Desktop aplikacij pritaikymo bdas yra naudojant Visual Basic for Applications (VBA) arba C# programavimo kalbas, kurios yra integruotops ArcCatalog ir ArcMap. Tokiu bdu galima papildyti ArcMap ir ArcCatalog ranki rinkin savo paties sukurtomis komandomis, rankiais ir moduliais.4. DrawGraphicPolygon.dll krimasAtliekant uduot buvo sukurtas DrawGraphicPolygon.dll, naudojant C# programavimo kalb. DrawGraphicPolygon.dll sudaro viena klas - DrawGraphicPolygon klas, kuri savyje laiko visus metodus. ie metodai atlieka funkcijas: mygtuko ir jo apraymo krimas, poligono pieimas, naujo sluoksnio krimas nupieto poligono isaugojimas sluoksnyje 5. Programos veikimo apraymasklus mygtuk ranki juost suveikia metodas DrawGraphicPolygon:: OnCreate( object hook) ir inicializuoja kintamj m_application.Paspaudus mygtuk i ranki juostos suveikia metodas DrawGraphicPolygon:: OnClick(). is metodas reiklaingas inicializuoti kintamuosius, bet jo jis nebuvo naudojamas ioje programoje, todl po veikimo, programa laukia, kol bus paspaustas pels mygtukas emlapyje. O tada bus vykdomas metodas DrawGraphicPolygon:: OnMouseDown(int Button, int Shift, int X, int Y). is metodas ikvieia metoda DrawGraphicPolygon:: GetActiveViewFromArcMap(IApplication application), kuris sugraina ActiveView reikm. i reikm naudojama gauti esamo emelapio elementus. Viduje metodo OnMouseDown vykdomas poligono pieimas, arcmape kuriamas sluoksnis (jei nebuvo iki tol jau sukurtas, jei buvo, poligonas pieiamas esam sluoksn) kuriam priskyriamas nupaiytas polygonas. Pabaigoje arcmape sukuriamas sluoksnis su nubraiytu poligonu.

6. Mygtuko terpimas ArcMap programPaleidus ArcMap program atidaromas tuias emapis. Metodas DrawGraphicPolygon()sukuria ir aprao mygtuk (pavadinim, anotacija, paveiksliuk ir t.t.), kur vliau reikia kelti programos lang.Norint kelti nauj custom rank ranki juosta reikia paspausti Customize->Costumize mode

1 Pav. Customize mode pasirinkimas i meniuTai padarius atsidaro naujas langas, kuriame reikia paspausti Commands ir surasti kategorija Laboratoriniai arba paiekoje rayti mygtuko pavadinim (Draw Polygon).

2 Pav. Customize langasPaskui reikia pasirinkti custom rank ir ji nutempt reikiama viet ranki juostoje.

3 Pav. rankio iraukimas ranki juost7. Mygtuko veikimas ArcMap programiniame paketeUduoiai realizuoti buvo sukurtas DrawPolygon mygtukas. DrawPolygon sukuria poligonus ir juos isaugo atskiruose sluoksniuose, kuri pavadinimas yra Naujas polygonas.Norint aktyvuoti poligon pieim, reikia paspausti mygtuk . J paspaudus rankis lauks tol kol bus paspaustas emlapyje pirmas takas, nuo kurio bus pieiamas poligonas. Sudarius norim geometrin form, paskutiniame take reikia vykdyti dvigub pels paspaudim.

4 Pav. poligono pieimas (pradia)Tai vykdius nupietas poligonas usipildo. O taip pat is poligonas yra priskiriamas sukurtams sluoksniui New Layer.

5 Pav. poligono pieimas (pabaiga)Po op veiksmo yra galimyb, nupieti kitus poligonus tame paiame sluoksnyje. Toks pieimas yra vykdomas tol, kol vartotojas pasirinks kit mygtuk arba funkcij.8. Programos kodas

using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using System;using System.Drawing;using System.Runtime.InteropServices;using ESRI.ArcGIS.ADF.BaseClasses;using ESRI.ArcGIS.ADF.CATIDs;using ESRI.ArcGIS.Framework;using ESRI.ArcGIS.ArcMapUI;using System.Windows.Forms;using System;using System.Collections.Generic;using System.Text;using System.IO;using ESRI.ArcGIS;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geodatabase;

namespace CustomTool{ [Guid("001c57ca-c292-459d-95a7-9984d78d0d93")] [ClassInterface(ClassInterfaceType.None)] [ProgId("CustomTool.DrawGraphicPolygon")] public sealed class DrawGraphicPolygon : BaseTool { [ComRegisterFunction()] [ComVisible(false)] static void RegisterFunction(Type registerType) { ArcGISCategoryRegistration(registerType); }

[ComUnregisterFunction()] [ComVisible(false)] static void UnregisterFunction(Type registerType) { ArcGISCategoryUnregistration(registerType); }

private static void ArcGISCategoryRegistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); MxCommands.Register(regKey);

}

private static void ArcGISCategoryUnregistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); MxCommands.Unregister(regKey);

}

private IApplication m_application; public DrawGraphicPolygon() { base.m_category = "Laboratoriniai"; base.m_caption = "Draw Polygon"; base.m_message = ""; base.m_toolTip = "Draws a graphic Polygon in the map window of ArcMap"; base.m_name = "DrawGraphicPolygon"; try { string bitmapResourceName = GetType().Name + ".bmp"; base.m_bitmap = new Bitmap(GetType(), bitmapResourceName); base.m_cursor = new System.Windows.Forms.Cursor(GetType(), GetType().Name + ".cur"); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap"); } }

public override void OnCreate(object hook) { m_application = hook as IApplication;

if (hook is IMxApplication) base.m_enabled = true; else base.m_enabled = false; }

public override void OnClick() {

}

public override void OnMouseDown(int Button, int Shift, int X, int Y) { IActiveView activeView = GetActiveViewFromArcMap(m_application); ESRI.ArcGIS.Display.IScreenDisplay screenDisplay = activeView.ScreenDisplay;

if (activeView == null) { return; }

screenDisplay.StartDrawing(screenDisplay.hDC, (System.Int16) ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache); // Explicit Cast ESRI.ArcGIS.Display.IRgbColor rgbColor = new ESRI.ArcGIS.Display.RgbColorClass(); rgbColor.Blue = 255;

ESRI.ArcGIS.Display.IColor color = rgbColor; // Implicit cast. ESRI.ArcGIS.Display.ISimpleFillSymbol simpleFillSymbol = new ESRI.ArcGIS.Display.SimpleFillSymbolClass(); simpleFillSymbol.Color = color;

ESRI.ArcGIS.Display.ISymbol symbol = simpleFillSymbol as ESRI.ArcGIS.Display.ISymbol; // Dynamic cast. ESRI.ArcGIS.Display.IRubberBand rubberBand = new ESRI.ArcGIS.Display.RubberPolygonClass(); ESRI.ArcGIS.Geometry.IGeometry geometry = rubberBand.TrackNew(screenDisplay, symbol); screenDisplay.SetSymbol(symbol); screenDisplay.DrawPolygon(geometry); screenDisplay.FinishDrawing();

IElement elem = null; IPolygonElement polygonElement = new PolygonElementClass(); elem = polygonElement as IElement; elem.Geometry = geometry as ESRI.ArcGIS.Geometry.IGeometry;

IMap map = activeView.FocusMap;

IGraphicsLayer graphicsLayer; if ( map.LayerCount==0) { graphicsLayer = new CompositeGraphicsLayerClass(); ((ILayer)graphicsLayer).Name = "New Layer"; (graphicsLayer as IGraphicsContainer).AddElement(elem, 0); map.AddLayer(graphicsLayer as ILayer); } else { ILayer layer = map.get_Layer(0); graphicsLayer = layer as IGraphicsLayer; (graphicsLayer as IGraphicsContainer).AddElement(elem, 0); } activeView.Refresh(); }

public IActiveView GetActiveViewFromArcMap(IApplication application) { if (application == null) { return null; } IMxDocument mxDocument = application.Document as IMxDocument; // Dynamic Cast IActiveView activeView = mxDocument.ActiveView;

return activeView; } }}

1. Ivadosiame darbe buvo susipainta su Arcgis emelapi kurimo technologij ir iaikinta kaip sukurti custom rank, C# kalbos pagalb, kur galim nauduoti arcmap aplinkoje. Ikelti custom rankio krimo tikslai atlikti, o pats rankis veikia taip kaip buvo numatyt. Literatra3. http://help.arcgis.com/en/sdk/10.0/arcobjects_net/ao_home.html3. ArcGIS tutorial: ArcObjects Developer Kit.3. www.stackoverflow.com

9