Jag har kollat på möjligheterna att använda ArcGIS Silverlight/WPF Web APIs i SketchFlow för att göra GIS prototyper. Det känns som att det blir lite mer komplext att bygga en prototyp, men så här kan man iaf göra om man vill.
ESRIs komponenter läggs till i SketchFlow när man installerar API:erna. Vill man lägga till ett bagrundslager så kan man lägga till en karta:
Sen lägga till ett bagrundslager via egenskaper:
Observera att det finns möjlighet att välja flera olika "data källor":
Genom att välja ett tiled layer så går det att koppla upp sig mot bakgrundslager via arcgis.com:
Det går även att lägga till grafiklager och skapa geometrier i detta via AXML editorn:
Som sagt lite mer komplext och knyter sig till ESRIs produkt för Silverlight/WPF för att skapa sin prototyp, vilket kan ha sina för- och nackdelar.
Sunday, October 31, 2010
Skapa skissaktiga knappar för SketchFlow
Ej GIS specifikt. Men vill man lyxa till det och lägga in ett verktygsfält med skissliknande knappar, så hittade jag ett tips på StackExchange: Import current UI into sketchflow som mha Paint.Net låter dig skapa skissliknande knappar från t.ex. knapparna som ska användas i rätta projektet.
Detta görs genom att öppna en bild i Paint.Net och använda effekter, Effects | Artistic | pencil Sketch.
Lägg till knappar i SketchFlow och lägg in dina ny skapade bilder som background på knapparna, resultatet blir då så här:
Detta görs genom att öppna en bild i Paint.Net och använda effekter, Effects | Artistic | pencil Sketch.
Lägg till knappar i SketchFlow och lägg in dina ny skapade bilder som background på knapparna, resultatet blir då så här:
Använda SketchFlow för att skapa GIS prototyper.
Har suttit och klurat lite på hur man skulle kunna använda Microsoft SketchFlow för att skapa GIS prototyper. Det viktigaste i en sådan prototyp är att man måste kunna beskriva när användaren skapar och jobbar med geometrier i kartan. Eftersom detta skiljer sig mot andra typer av applikationer.
För att illustrera geometrier så kan man göra så här
Linjer kan läggas till genom att använda Pen verktyget:
Sen sätter man om den Stroke som används av linjen till Base-Border Sketch:
På samma sätt kan man även göra när det gäller polygoner, men vill man ta en genväg så kan man använda Rectangle Sketch, då slipper man sitta och ändra utseendet på elementen.
För punkter kan man använda Circle sketch.
Genom att förändra border och background går det att skapa en fylld punkt.
Resultatet blir då:
För att illustrera geometrier så kan man göra så här
Linjer kan läggas till genom att använda Pen verktyget:
Sen sätter man om den Stroke som används av linjen till Base-Border Sketch:
På samma sätt kan man även göra när det gäller polygoner, men vill man ta en genväg så kan man använda Rectangle Sketch, då slipper man sitta och ändra utseendet på elementen.
För punkter kan man använda Circle sketch.
Genom att förändra border och background går det att skapa en fylld punkt.
Resultatet blir då:
Monday, October 11, 2010
Windows Phone 7 och ArcGIS API for Windows Phone 2.1
Sitter och testar WP7 och ESRIs ArcGIS API for Windows Phone 2.1, en beta för windows phone finns på ESRIs resource sida: http://help.arcgis.com/en/arcgismobile/10.0/apis/windowsphone/ har noterat följande som kan vara värt att veta:
- Kom ihåg att när VS2010 klagar på att Zune software inte är installerad, så beror det på att man ska ställa om och köra projektet så att den deployar på emulatorn. Se: http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/ec49dab8-37c6-44ce-ad67-7429338677fc/
- Kom ihåg att göra unblock på ArcGIS API for Windows Phone 2.1 zip-fil innan den zippas upp annars så får VS spunk.
- PDF:en som följde med innehåller XAML kod som inte fungerar, ta bort radbrytning, se min forum postning: http://forums.arcgis.com/threads/14735-ServiceError-with-Code-400-but-no-error-message.
Saturday, September 11, 2010
Balloon Callout i ArcGIS Engine.
Anpassat ett exempel i VBA dokumentationen "How to add balloon callout" så att den fungerar i ArcGIS Engine. Inga stora förändringar krävdes utan det räckte med att byta ut så att ActiveView inte hämtas via MxDocument utan MapControl. Bryter man dessutom ut ActiveView till att vara en inparameter så fungerar dessutom exemplet i både desktop och engine.
Private Sub AddBalloonCallout(ByVal activeView As IActiveView)
Dim pTextElement As ITextElement
Dim pElement As IElement
Dim pPoint As IPoint
Dim pCallout As ICallout
Dim pTextSymbol As IFormattedTextSymbol
Dim pGraphicsContainer As IGraphicsContainer
Dim midX As Double, midY As Double
'Create a new text element
pTextElement = New TextElement
pElement = CType(pTextElement, IElement) 'QI
pTextElement.Text = "Text callout" & vbCrLf & "In the middle of the screen"
'Position the new element on the active view's center point
midX = (activeView.Extent.XMax + activeView.Extent.XMin) / 2
midY = (activeView.Extent.YMax + activeView.Extent.YMin) / 2
pPoint = New Point
pPoint.PutCoords(midX, midY)
pElement.Geometry = pPoint
'Set the text element symbology to a default balloon callout
pTextSymbol = New TextSymbol
pCallout = New BalloonCallout
pTextSymbol.Background = CType(pCallout, ITextBackground)
'Use this formula to get a callout anchor point location
pPoint.PutCoords(midX - activeView.Extent.Width / 4, midY + activeView.Extent.Width / 20)
pCallout.AnchorPoint = pPoint
pTextElement.Symbol = pTextSymbol
'Add the element to the active view, either the focus Map or PageLayout
pGraphicsContainer = CType(activeView, IGraphicsContainer)
pGraphicsContainer.AddElement(pElement, 0)
pElement.Activate(activeView.ScreenDisplay)
'Flag the area of the new element for refreshing
activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, pElement, Nothing)
End Sub
Friday, September 10, 2010
Skapat en kodsnutt för att fånga när ett lager till i ArcGIS Engine.
Skapat en kodsnutt för att fånga när ett lager läggs till i karta, samt ser till att det lager som ligger överst alltid ligger kvar överst i ArcGIS Engine.
Private activeViewEvents As ESRI.ArcGIS.Carto.IActiveViewEvents_Event
Private m_ActiveViewEventsItemAdded As ESRI.ArcGIS.Carto.IActiveViewEvents_ItemAddedEventHandler
Private Sub AddEventListenerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddEventListenerToolStripMenuItem.Click
activeViewEvents = CType(axMapControl1.ActiveView.FocusMap, ESRI.ArcGIS.Carto.IActiveViewEvents_Event)
m_ActiveViewEventsItemAdded = New ESRI.ArcGIS.Carto.IActiveViewEvents_ItemAddedEventHandler(AddressOf OnActiveViewEventsItemAdded)
AddHandler CType(axMapControl1.ActiveView.FocusMap, ESRI.ArcGIS.Carto.IActiveViewEvents_Event).ItemAdded, m_ActiveViewEventsItemAdded
End Sub
Private Sub OnActiveViewEventsItemAdded()
'makes layer(1) always on top.
axMapControl1.ActiveView.FocusMap.MoveLayer(axMapControl1.ActiveView.FocusMap.Layer(0), 1)
End Sub
Wednesday, August 25, 2010
Skapat verktyg med IDisplayFeedback.
Vi har problem med standard mätverktyget i ArcGIS engine. Bug in ControlMapMeasureTool? “Measure An Area” creates a duplicate dialog in ArcGIS Engine 10 Så jag har suttit efter tips från Kirk och labbat lite hur man kan skapa egna verktyg med IDisplayFeedback. Hittade ett bra exempel Sample: Custom subtyped command and tool som visade hur man ska göra. Skapar man en ny verktygsklass, så kan man överlagra på det här sättet för att få ett verktyg som mäter areal:
Private m_polygonFeedback As INewPolygonFeedback
Private m_screenDisplay As IScreenDisplay
Private m_hookHelper As IHookHelper
Public Overrides Sub OnCreate(ByVal hook As Object)
If (m_hookHelper Is Nothing) Then m_hookHelper = New HookHelperClass
If Not hook Is Nothing Then
m_hookHelper.Hook = hook
End If
End Sub
Public Overrides Sub OnClick()
m_screenDisplay = m_hookHelper.ActiveView.ScreenDisplay
End Sub
Public Overrides Sub OnDblClick()
Dim polygon As IPolygon = m_polygonFeedback.Stop()
MsgBox("Area: " & CType(polygon, IArea).Area)
m_polygonFeedback = Nothing
End Sub
Public Overrides Sub OnMouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Integer, ByVal Y As Integer)
If Button = 1 Then
Dim cursorPoint As ESRI.ArcGIS.Geometry.IPoint = m_screenDisplay.DisplayTransformation.ToMapPoint(X, Y)
If m_polygonFeedback Is Nothing Then
m_polygonFeedback = New NewPolygonFeedbackClass()
m_polygonFeedback.Display = m_screenDisplay
m_polygonFeedback.Start(cursorPoint)
Else
m_polygonFeedback.AddPoint(cursorPoint)
End If
End If
End Sub
Public Overrides Sub OnMouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Integer, ByVal Y As Integer)
If Not m_polygonFeedback Is Nothing Then
Dim cursorPoint As ESRI.ArcGIS.Geometry.IPoint = m_screenDisplay.DisplayTransformation.ToMapPoint(X, Y)
m_polygonFeedback.MoveTo(cursorPoint)
End If
End Sub
Labels:
ArcGIS Engine,
ArcObjects,
dotNet,
ESRI,
Kodning
Tuesday, July 06, 2010
Långsamma javascript i IE ger felmeddelande.
På vissa sidor så går javascripten så långsamt att man får felmeddelande gång på gång i IE om man vill stoppa skriptet.
Råkade ut för detta på en sida som visar API dokumentationen har även påtalat felet för dom som står bakom websiten, men det tar ett tag att fixa prestandaproblem och efter att ha stäng felrutan hundra gånger, så googlade jag efter andra alternativ och det finns ett annat sätt att hantera detta genom att ställa upp timeout tiden. Se: http://support.microsoft.com/kb/175500
Ett skript på den här sidan gör att Internet Explorer går långsamt. Om det fortsätter att vara igång kan datorn sluta att svara. Vill du avbryta skriptet?
Stop running this script
Råkade ut för detta på en sida som visar API dokumentationen har även påtalat felet för dom som står bakom websiten, men det tar ett tag att fixa prestandaproblem och efter att ha stäng felrutan hundra gånger, så googlade jag efter andra alternativ och det finns ett annat sätt att hantera detta genom att ställa upp timeout tiden. Se: http://support.microsoft.com/kb/175500
Thursday, July 01, 2010
Exkludera filer från källkodshantering i Visual Studio.
Är tvungen att kolla upp detta gång på gång, så nu skriver jag upp det i bloggen så kanske jag kommer ihåg det tills nästa gång. Om man vill göra detta i ett vanligt projekt så är det relativt enkelt, gäller bara att komma ihåg att det är under source control i file menyn man ska söka:
http://msdn.microsoft.com/en-us/library/66tw9ezk(VS.90).aspx
Annat är det med Web sites, här känns det som att källkodshanteringen itne riktigt fungerar på samma sätt, men det går att göra "undo pending changes" på dom filer man inte vill ska läggas till:
http://social.msdn.microsoft.com/Forums/en-US/tfspowertools/thread/f4595ff1-059c-4a33-a3c6-2f22961a73c7
1.In Visual Studio, open Solution Explorer and select the file to exclude.
2.On the File menu, click Source Control, then click Exclude from Source Control.
3.When you are ready to place the file under source control, you can access the File menu and click Source Control, then uncheck Exclude from Source Control.
http://msdn.microsoft.com/en-us/library/66tw9ezk(VS.90).aspx
Annat är det med Web sites, här känns det som att källkodshanteringen itne riktigt fungerar på samma sätt, men det går att göra "undo pending changes" på dom filer man inte vill ska läggas till:
Delete files that you want to exclude, add them to were they were again, but do not checkin yet. Then on source control undo pending changes. After that these files would not be source controled items.
http://social.msdn.microsoft.com/Forums/en-US/tfspowertools/thread/f4595ff1-059c-4a33-a3c6-2f22961a73c7
Friday, June 11, 2010
Debugga fel på beroenden mellan olika assemblys.
När man jobbar med stora .Net-projekt eller .Net-projekt som laddar assemblies via t.ex. CAB, så kan det vara svårt att se vad som går fel, när man får ett felmeddelande som säger att följande assenbly inte kan laddas. Hittade en bra beskrivning av ett verktyg som heter fuslogvw.exe Se MSDN: http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx som man kan använda för att spåra den har typen av fel.
Outlook via HTTP frånkopplad hela tiden i Windows 7.
Har haft problem med att få Outlook att koppla sig till Exchange servern via HTTP enda sen jag installerade om min XP maskin med windows 7. Frågade en kollega och han sa att det var något problem i Vista med RPC och att det var en registernyckel som man skulle ändra. Så jag googlade lite på det och hittade lösningen:
Outlook 2007
Click Start, click Run, type regedit in the Open box, and then click OK.
Locate and then click the following subkey:
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\RPC
On the Edit menu, point to New, and then click DWORD Value.
Type DefConnectOpts, and then press ENTER.
Right-click DefConnectOpts, and then click Modify.
In the Value data box, type 0, and then click OK.
Exit Registry Editor.
http://support.microsoft.com/kb/913843/en-us
Error messages when you try to connect Outlook 2007 to Exchange Server: "The action cannot be completed" or "Your Microsoft Exchange Server is unavailable" or "Cannot start Microsoft Office Outlook"
Outlook 2007
Click Start, click Run, type regedit in the Open box, and then click OK.
Locate and then click the following subkey:
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\RPC
On the Edit menu, point to New, and then click DWORD Value.
Type DefConnectOpts, and then press ENTER.
Right-click DefConnectOpts, and then click Modify.
In the Value data box, type 0, and then click OK.
Exit Registry Editor.
http://support.microsoft.com/kb/913843/en-us
Labels:
Exchange,
HTTP,
Outlook 2007,
RPC,
Värt att Veta
Monday, May 31, 2010
ArcGIS Engine 10.0, platform target x86.
Nytt i ArcGIS 10.0 är att ESRIs assemblies är kompilerade mot x86 plattformen. Detta innebär att alla projekt som refererar ESRIs DLL:er måste sättas till x86. Annars får man ett felmeddelande i stil med:
Så vid uppgradering av ArcGIS 9.3 applikationer till 10.0, så får man hålla koll på hur plattformen är satt.
Läs mera här: How to migrate ArcGIS 9.3 Desktop and Engine stand-alone applications to ArcGIS 10, Platform CPU target change
Could not load file or assembly 'ESRI.ArcGIS.Version, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86' or one of its dependencies. Det går inte att hitta filen.
Så vid uppgradering av ArcGIS 9.3 applikationer till 10.0, så får man hålla koll på hur plattformen är satt.
Läs mera här: How to migrate ArcGIS 9.3 Desktop and Engine stand-alone applications to ArcGIS 10, Platform CPU target change
Thursday, May 27, 2010
ArcGIS Engine 10.0, RuntimeManager
Nytt i ArcGIS 10 är att ArcGIS desktop och ArcGIS Engine distribueras till var sin katalogstruktur (What's new for developers at 10), detta för att det oberoende av varandra ska gå att lägga in service packar. Detta innebär också att när man bygger standalone applikationer, så måste man välja vilken runtime man vill köra sin applikation under. När man väljer att skapa en ny MapControl Application project så läggs automatiskt kod in i Program.cs för att hantera detta:
if (!RuntimeManager .Bind(ProductCode .Engine))
{
if (!RuntimeManager .Bind(ProductCode .Desktop))
{
MessageBox .Show("Unable to bind to ArcGIS runtime. Application will be shut down." );
return ;
}
}
Värt att notera det nya RuntimeManager objektet som ESRI använder för att göra bind mot runtime versionen. Detta måste göras i koden innan några ArcObjects objekt anropas.
Run VS as administrator.
När man kör Visual Studio (VS) i Windows 7 (Win7), så är det bra att ställa in så att man kör den som administratör eftersom man i annat fall kan få fel i VS. Detta pga att processen körs med för hög säkerhet. Istället för att varje gång komma ihåg att högerklicka och välja "run as administrator" så kan man välja "egenskaper"
och "Advanced" och klicka i "run as admininstrator"
så startas VS alltid med administrator rättigheter.
Wednesday, May 05, 2010
Slå ihop PDF filer med iTextSharp.
Fick en fråga om jag kunde lägga till en sida med text i en rapport som vi genererar via reporting services. Och visst kan man det men då kommer man bli tvungen att underhålla en sida med text via rapporten vilket inte känns så bra. Ett annat alternativ som kändes mer lockande var att kombinera ihop PDF:en som skapas från reporting services med text sidan som en PDF. Så att dom kan underhållas var för sig.
Testade att skapa en applikation för att slå ihop två PDF:er och använde iText# som vi använder i andra projekt och utnyttjade ett exempel som jag hittade på nätet: http://khsw.blogspot.com/2006/04/merge-pdf-files-using-itextsharp.html gjorde enklast möjliga kod:
Fungerar hur bra som helst!
Testade att skapa en applikation för att slå ihop två PDF:er och använde iText# som vi använder i andra projekt och utnyttjade ett exempel som jag hittade på nätet: http://khsw.blogspot.com/2006/04/merge-pdf-files-using-itextsharp.html gjorde enklast möjliga kod:
Dim destination As String = "c:\\testPDF.pdf"
Dim source As List(Of String) = New List(Of String)
source.Add("c:\\1.pdf")
source.Add("c:\\2.pdf")
PdfMerge.MergeFiles(destination, source.ToArray())
Fungerar hur bra som helst!
Saturday, April 24, 2010
ESRI DevSummit tech sessions. Developing .NET Applications for ArcGIS Engine
Kollat på tech-session-videos som ESRI lagt ut.
I presentationen "Developing .NET Applications for ArcGIS Engine" så går man igenom nyheterna i ArcGIS Engine. Några nyheter är:
I presentationen "Developing .NET Applications for ArcGIS Engine" så går man igenom nyheterna i ArcGIS Engine. Några nyheter är:
- VS2008, .Net 3.5 SP1.
- Engine och Desktop är uppdelade som två runtimes.
- Nytt att man måste aanvända RuntimeManager för att bind mot rätt runtime.
- Ikonerna skickas med som PNG bilder.
- GrahicsTracker, ett objekt som hjälper till med realtidsuppdateringar av objekt i kartan.
- Background GeoProcessing, GeoProcesing kan köras som en separat process.
- För licenser så har "Concurrent use" och "Borrow/Return" tillkommit.
Saturday, April 17, 2010
Public Resource.resx
Lade till en Resource.resx fil i ett av mina projekt och försökte komma åt ResoureManager objektet från en annat projekt, men fick ett kompileringsfel. :( Det visade sig att VS standardmässigt skapar resursfiler som Internal/Friend isf Public, vilket gör att klasserna bara går att komma åt internt i samma assembly. Detta går att lösa genom att hacka i den automatgenererade koden men det är ajjabajja , det vill man inte göra. Visar sig att det går att byta custom tool som skapar koden, vilket är en bättre lösning:
Byt från ResXCodeFileGenerator till PublicResXFileCodeGenerator så får man en resurs klass som är public.
Byt från ResXCodeFileGenerator till PublicResXFileCodeGenerator så får man en resurs klass som är public.
Hantera ohanterade fel i .Net och CAB.
Hittade en bra artikel om hur man ska hantera ohanterade fel:
Tanken är att man i sin egen kod bara hanterar fel som man vet ska inträffa:
Alla andra fel som man inte vet vad det är låter man propagera hela vägen upp till applikationen som hanterar dom ohanterade felen:
Fördelarna som jag ser med detta är att man slipper risken att någon att fångar och sväljer fel bara för att dom inte vet vad man ska göra med felet. Samtidigt tycker jag att man alltid ska fånga alla fel som inträffar i sin kod för att kunna logga felen där dom inträffar. Detta står inte i konflikt med varandra eftersom man alltid kan kasta felet vidare efter man fångat ett exception. Dock bör man ha veta hur man gör för att behålla den fulla stacktracen när man gör det se t.ex:
Tanken är att man i sin egen kod bara hanterar fel som man vet ska inträffa:
Try
Throw New InvalidAttributeException("Fel på in argumentet!!!")
Catch ex As InvalidAttributeException
'Hanterar felet
End Try
Alla andra fel som man inte vet vad det är låter man propagera hela vägen upp till applikationen som hanterar dom ohanterade felen:
<STAThread()> _
Public Shared Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
AddHandler currentDomain.UnhandledException, AddressOf AppDomainUnhandledException
AddHandler Application.ThreadException, AddressOf ThreadException
app = New Program()
app.Run()
End Sub
Private Shared Sub AppDomainUnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
HandleException(CType(e.ExceptionObject, Exception))
End Sub
Private Shared Sub ThreadException(ByVal sender As Object, ByVal ex As System.Threading.ThreadExceptionEventArgs)
HandleException(ex.Exception)
End Sub
Private Shared Sub HandleException(ByVal e As Exception)
'MessageBox.Show("Ohanterat fel har inträffat!!")
End Sub
Fördelarna som jag ser med detta är att man slipper risken att någon att fångar och sväljer fel bara för att dom inte vet vad man ska göra med felet. Samtidigt tycker jag att man alltid ska fånga alla fel som inträffar i sin kod för att kunna logga felen där dom inträffar. Detta står inte i konflikt med varandra eftersom man alltid kan kasta felet vidare efter man fångat ett exception. Dock bör man ha veta hur man gör för att behålla den fulla stacktracen när man gör det se t.ex:
VB.Net och Shared Sub Main
Som standard så startas VB.Net applikatioenr via en Main Formulär men ibland vill man lägga in loggning eller liknande direkt när en appliation startar isf att lägga det i Form_Load. Hade problem med att få en VB.Net applikation att starta via Sub Main:
Förväntade mig att se den som ett val under properties på appliaktionen men icke:
Visade sig att det krävs att man klickar ur "Enable application framework" för att Sub Main ska komma upp som val i VB.Net.
<STAThread()> _
Public Shared Sub Main()
End Sub
Förväntade mig att se den som ett val under properties på appliaktionen men icke:
Visade sig att det krävs att man klickar ur "Enable application framework" för att Sub Main ska komma upp som val i VB.Net.
Saturday, April 10, 2010
The ArcGIS API for Microsoft Silverlight™/WPF™ hostad i CAB.
Suttit och testat ifall det går att lägga in ESRIs ArcGIS API for Microsoft Silverlight™/WPF™ i en CAB applikation. Skulle vara en grym kombination för kartvisning i CAB baserade applikationer. Har gjort en relativt enkel appliaktion en shell appliaktion som innehåller meny och verktygsfält samt ett workspace för kartan. Gjort en Modul som innehåller en WPF-vy som hostar kart kontrollen samt ett kommando för att sätta om kartan till full utbredning.
Detta visar på att man kan integrera en WPF-vy i ett befintligt system och att det inte blir någon stor skillnad mot att bygga WinForms vyer.
Detta visar på att man kan integrera en WPF-vy i ett befintligt system och att det inte blir någon stor skillnad mot att bygga WinForms vyer.
Databinding mot ITable i ArcGIS Engine
Har jobbat med databinding i CAB mot objektstrukturer för att testa hur CAB och MVC patternet fungerar tillsammans med EventBrokern, då frågan kom upp hur gör vi om vi vill kunna göra databinding direkt mot en ITable i ArcObjects? Hittade ett bra exempel http://edndoc.esri.com/arcobjects/9.2/NET/a6eb84fb-93db-4bc3-82a9-874d8890a8ca.htm på ESRIs EDN site som jag modifierat lite och byggt in i ett CAB projekt. Lösningen som dom gjort bygger på att man wrappar ITable i en BindingList.
Applikationen läser in en shapefil som läggs in i kartan och samma kartlager läggs som en ITable in via databinding in i tabellen. Detta gör att förändringar i tabellen slår igenom i kartan.
Labels:
ArcGIS Engine,
CAB,
DataBinding,
ESRI,
ITable
Bugg i WPF implementationen av CAB ElementHostWorkspace
Hjälpte en kollega igår med ett problem som han brottats med i nästan en vecka. När WPF smartparten stängdes och en Winform smartpart skulle laddas så fick han ett exception InvalidCastException. Eftersom två par ögon ser mer en ett par så gick vi igenom felmeddelandet och stegade fram oss i koden till vi hittade raden som spökade. Vi hittade ett fel i klassen Microsoft.Practices.CompositeUI.WPF.ElementHostWorkspace:
Felet var att variablen activeSmartPart skulle vara smartPart. Såg det genom att man kontrollerar smartPart innan man gör cast och eftersom activeSmartPart är WinForm SmartParten så smäller koden ur vid casten. Vilket innebär att koden ska se ut så här för att fungera:
///
/// Raises the event.
///
/// The smart part that is being closed.
protected WorkspaceCancelEventArgs RaiseSmartPartClosing(object smartPart)
{
if (smartPart is ElementHost)
{
smartPart = elementHosts.Unwrap((ElementHost)activeSmartPart);
}
WorkspaceCancelEventArgs cancelArgs = new WorkspaceCancelEventArgs(smartPart);
RaiseSmartPartClosing(cancelArgs);
return cancelArgs;
}
Felet var att variablen activeSmartPart skulle vara smartPart. Såg det genom att man kontrollerar smartPart innan man gör cast och eftersom activeSmartPart är WinForm SmartParten så smäller koden ur vid casten. Vilket innebär att koden ska se ut så här för att fungera:
///
/// Raises the event.
///
/// The smart part that is being closed.
protected WorkspaceCancelEventArgs RaiseSmartPartClosing(object smartPart)
{
if (smartPart is ElementHost)
{
smartPart = elementHosts.Unwrap((ElementHost)smartPart);
}
WorkspaceCancelEventArgs cancelArgs = new WorkspaceCancelEventArgs(smartPart);
RaiseSmartPartClosing(cancelArgs);
return cancelArgs;
}
Sunday, March 28, 2010
CAB och ArcGIS Engine.
Har varit lite dålig på att blogga på ett tag och det beror på att jag har senaste veckorna förkovrat mig och jobbat åt en kund med att testa Microsoft Pattern&Practicies Composite UI Application Block CAB med ESRIs ArcGIS Engine AGE. Mest för att verifiera hur en tänkbar design skulle kunna se ut, samt när olika delar av CAB vi behöver användas för att lösa så att vi kan skapa en applikation som blir Composite med fristående moduler. Under processens gång så har jag hittat många bra resurser för CAB. Den bästa resursen från Microsoft är en PDF som Designing Applications using CAB & the Smart Client Software Factory som ingående beskriver delarna i CAB, det är lätt att det blir begrepps förvirring med så många nya begrepp. Samma typ av information finns även på MSDN library Composite UI Application Block. När det gäller att ingående beskriva hur man använder CAB så tycker jag att man ska läsa Rich Newman men även Jeremy Miller som beskriver grundläggande vilka design patterns CAB gänget använt och varför man vill använda vissa patterns när man skapar composite applikationer. Vid skapandet av designprototypen så har vi kunnat identifiera att det kommer att gå att isolera karthanteringen i specifika moduler vilket gör att bara vissa utvecklare kommer vara tvungen att ha utvecklarlicener för AGE samt att man enkelt kommer kunna byta ut ArcGIS Engine mot något annat om man skulle vilja det. Känner mig taggad att testa att byta ut Engine mot ESRI WPF API:er mot REST, bara för att visa att det går.
Saturday, February 27, 2010
ArcGIS Engine i CAB.
Saturday, February 20, 2010
Combobox i verktygsfält i ArcGIS Engine eller implementera IToolControl.
När man bygger verktyg för ArcGIS Engines verktygsfält, så kan man utgå från dom templates som installeras i visual studio enligt konceptet som finns beskrivet här: http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/0bf044f6-dbcd-4d04-836e-3b5e47204818.htm.
Men ibland så vill man ju ibland göra lite mer avancerade saker. T.ex så kan man vara i behov av att lägga in en combobox i verktygsfältet. För att få det att fungera så krävs det lite mer kodning, man måste implementerar interfacet ICommand eller ITool (ifall man vill ha ett verktyg med tillgång till displayen) istället för basklasserna. Samt ärva från en System.Windows.Form.Combobox. Utöver detta så krävs det även att man implementerar interfacet IToolControl se http://resources.esri.com/help/9.3/ArcGISEngine/arcobjects/esrisystemui/itoolcontrol.htm. Esri beskriver här hur man måste göra för att knyta kontrollen till verktygsfältet. Handle referensen till comboboxen måste exponeras vid implemenation av interfacet.
Men ibland så vill man ju ibland göra lite mer avancerade saker. T.ex så kan man vara i behov av att lägga in en combobox i verktygsfältet. För att få det att fungera så krävs det lite mer kodning, man måste implementerar interfacet ICommand eller ITool (ifall man vill ha ett verktyg med tillgång till displayen) istället för basklasserna. Samt ärva från en System.Windows.Form.Combobox. Utöver detta så krävs det även att man implementerar interfacet IToolControl se http://resources.esri.com/help/9.3/ArcGISEngine/arcobjects/esrisystemui/itoolcontrol.htm. Esri beskriver här hur man måste göra för att knyta kontrollen till verktygsfältet. Handle referensen till comboboxen måste exponeras vid implemenation av interfacet.
Friday, February 19, 2010
Installera SSRS BIDS 2005 efter 2005 SP1.
Haft problem med att jag efter datorbyte av min stationära maskin på kontoret att jag bara har kunnat redigera mina rapporter på min bärbara dator. Problemet har varit att en senare version som standard är installerad på maskinen (SP1) och vid installation av Business Intelligence komponenterna, så har installation gett ett felmeddelande att den inte kan installera några komponenter. Kändes som att ett sätt att lösa detta hade kunnat vara att avinstallera allt som har med SQL Server 2005 att göra och sen installera på nytt i rätt ordning men det kändes inte speciellt lockande.
Löste detta i vanlig ordning genom att googla lite, hittade till sist ett sätt att lösa detta på som finns beskrivet här: http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/117454be-67c5-4458-8429-08eccd6f82f6
Löste detta i vanlig ordning genom att googla lite, hittade till sist ett sätt att lösa detta på som finns beskrivet här: http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/117454be-67c5-4458-8429-08eccd6f82f6
- Add/Remove Programs Uninstall Microsoft SQL Server 2005
- Select to only remove the client tools (unchecked remove existing instance)
- Start installation (I ran it fine without the SKUUPGRADE switch)
Detta fungerade klockrent!
Wednesday, February 17, 2010
Compress av ArcSDE.
Misslyckad prodläggning igår som berode på att compress jobbet inte flyttade över alla förändringar i delta (add och delete) tabellerna till bas-tabellerna. En bra beskrivning av Compress av ArcSDE geodatabaser finns här: http://resources.esri.com/help/9.3/geodatabase/Blog/GDB_Rep_Compress.pdf det visade sig att vi hade missat att göra reconcile och post på versionerna, så att en version blev hängande med state som inte pekade på samma som den andra vilket gjorde att compressen inte flyttade in dess förändringar. Versionerna ska postas till default ifall man vill vara säker på att delta tabellerna ska tömmas. ESRI har även Batch jobb som kan hjälpa till med detta http://webhelp.esri.com/arcgisdesktop/9.3/body.cfm?tocVisable=1&ID=2579&TopicName=Automating%20reconcile%20and%20post
Saturday, February 13, 2010
Utskriftskommando i ArcGIS Engine.
Hittade en beskrivning av hur man skulle göra ett kommando för att skriva ut activeview i ArcGIS Engine http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/025b5da7-9b10-4623-a51e-c038c348ce29.htm, gjorde en applikation och försökte få igång exemplet, men vänta det ska skickas in en hook-instans till kommandot, http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriControls/HookHelper.htm vad är det?
Jo det är ESRIs sätt att skicka med information om kartkomponenterna till ett kommando. Hittade en kanonbra beskrivning av detta på esri:s developer blogg: http://blogs.esri.com/Dev/blogs/arcgisenginedevelopment/archive/2008/05/05/How-can-I-use-my-custom-command-in-Engine-without-using-the-ToolbarControl_3F00_.aspx, bra att veta hur man använder om man vill skapa sin egen kommandohantering.
Jo det är ESRIs sätt att skicka med information om kartkomponenterna till ett kommando. Hittade en kanonbra beskrivning av detta på esri:s developer blogg: http://blogs.esri.com/Dev/blogs/arcgisenginedevelopment/archive/2008/05/05/How-can-I-use-my-custom-command-in-Engine-without-using-the-ToolbarControl_3F00_.aspx, bra att veta hur man använder om man vill skapa sin egen kommandohantering.
Labels:
ArcGIS,
ArcGIS Engine,
Command,
ESRI,
HookHelper
Wednesday, February 10, 2010
VS2010 och .Net 4.0 RC1 släpptes igår!
Ojoj, Microsoft ligger inte på latsida direkt, känns som att det var igår jag installerade Beta2 men nu är RC1 släppt http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx Dax att installera igen då. Nytt i denna release verkar vara prestanda och det skadar väl inte...
Saturday, February 06, 2010
Sketchflow
Har suttit och labbat lite med Blend 3 och Sketchflow, helt klart en intressant produkt för att skapa prototyper. Här finns en bra genomgång vad man kan göra i sketchflow. http://www.msdev.com/Directory/SeriesDescription.aspx?CourseId=135
Dock ska jag väl nämna att Blend 3 verkar lite instabil gäller att trycka ++S med jämna mellanrum. :)
Monday, February 01, 2010
Debuggning
Såg en bra presentation av verktyg och debuggning som kan vara värd att nämna på bloggen. DnrTV en av mina favorit TV-kanaler har haft ett avsnitt med Tess Ferrandez http://blogs.msdn.com/tess/ där hon går igenom Debug Diagnostics Tool och WinDbg och hur man kan använda dessa för att felsöka krasher och låsningar i .Net kod. http://www.dnrtv.com/default.aspx?showNum=157
Tuesday, January 12, 2010
Verktyg för enhetstestning i Silverlight.
Rockey Lhotka skriver på sin blog om ett verktyg för enhetstestning för silverlight, så går man igång på enhetstestning och silverlight, så är det nog värt att kolla upp StatLight: http://www.lhotka.net/weblog/StatLight.aspx
Subscribe to:
Posts (Atom)