-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



domenica 28 dicembre 2008

What's Coming in ArcGIS 9.3.1

- High-Performance Dynamic Map Publishing

- Better Sharing of Geographic Information

- Enhanced Support for Java Developers

- Easy to Migrate

ArcGIS 9.3.1 is scheduled to be available in Q2 2009.

For details

ArcPad 8

COSA C'E' DI NUOVO IN ARCPAD 8

ArcPad 8 comprenderà nuove funzionalità, miglioramenti nelle performace e nella qualità. ArcPad Application Builder, il framework di sviluppo per customizzare ArcPad, sarà compreso in ogni licenza di ArcPad 8. Nella versione 8, ArcPad diventerà un prodotto basato sulla manutenzione ed i clienti potranno sottoscrivere una manutenzione annuale per avere gli aggiornamenti di ArcPad ed il supporto tecnico.


Le novità di ArcPad 8 comprenderanno:

SINCRONIZZARE LE MODIFICHE CON ARCGIS SERVER

La nuova estensione ArcGIS Server ArcPad permetterà agli utenti di pubblicare un progetto ArcPad in ArcGIS Server. Qualsiasi dispositivo che possa collegarsi ad Internet (cradle, USB, WIFI o connessione telefonica) può sincronizzare le modifiche di ArcPad direttamente con un geodatabase enterprise tramite ArcGIS Server.

NUOVA INTERFACCIA UTENTE

ArcPad 8 avrà un nuovo aspetto grazie ad icone moderne e barre degli strumenti che occuperanno meno spazio rispetto alle versioni precedenti.
L'utente potrà agganciare, minimizzare e massimizzare le barre degli strumenti e un nuovo strumento del desktop chiamato ArcPad Toolbar Manager potrà essere utilizzato o per modificare le toolbar predefinite o per crearne una propria.

MIGLIORAMENTO DELL'INTERFACCIA UTENTE GPS

La maschera di posizione GPS verrà sostituita da una nuova barra di stato GPS, cioè una barra degli strumenti luminosa che compare in fondo alla mappa. Essa mostra la maggior parte dei dettagli della precedente maschera, ma adesso usa colori atti ad indicare la qualità del segnale GPS.

MIGLIORAMENTO DELL'ESTENSIONE ARCPAD DATA MANAGER

L'estensione ArcPad Data Manager darà agli utenti più opzioni quando preparano i dati per ArcPad. Gli utenti saranno abilitati a configurare un progetto ArcPad per usi ripetuti con strumenti di geoprocessing, o a comporre un progetto ArcPad per pubblicarlo in ArcGIS Server e successivamente utilizzarlo in ArcPad.

MIGLIORAMENTI IN STREETMAP

ArcPad 8 StreetMap fornirà un metodo più facile per trovare indirizzi e località usando un nuovo indice di lookup. ArcPad 8 sarà venduto insieme ai dati di Tele Atlas Premium Western Europe Street Map senza costi aggiuntivi.


Presumibilmente ArcPad 8 uscirà nel primo quadrimestre del 2009.

ArcPad 8

mercoledì 24 dicembre 2008

ComReleaser - gestione del ciclo di vita dei cursori

I cursori del geodatabase dovrebbero sempre venire esplicitamente distrutti in un ambiente che utilizza la garbage collection. La regola è sempre rilasciare un oggetto COM non appena l'applicazione ha finito di utilizzare il suo riferimento. Questo è particolarmente importante con i cursori del geodatabase poichè fallire il rilascio dei cursori può mettere in uno stato di lock il sistema e le risorse dbms; un sintomo comune è il blocco di una tabella per un tempo indeterminato dopo
aver finito di ciclare sulle righe con un search cursor.
Questo articolo è una lettura fondamentale per gli sviluppatori che usano il geodatabase API: dimostra l'importanza di rilasciare gli oggetti COM (e specialmente i cursori) e di utilizzare un approccio diverso.
Molti sviluppatori .NET che hanno lavorato con il COM interop conosceranno già il metodo statico Marshal.ReleaseComObject, ma c'è anche una sezione dedicata ad una classe nell'ADF chiamata ComReleaser che è veramente utile quando si lavora con i cursori.

Ecco un esempio dell'uso del ComReleaser per assicurarsi che il cursore sia propriamente rilasciato:


using (ComReleaser comReleaser = new ComReleaser())

        {

 

            // Istanzia un cursore e gestisci il ciclo di vita con il ComReleaser.

 

            IFeatureCursor featureCursor = featureClass.Search(null, true);

 

            comReleaser.ManageLifetime(featureCursor);

 

 

 

            // Cicla attraverso le features.

 

            IFeature feature = null;

 

            while ((feature = featureCursor.NextFeature()) != null)

            {

 

                // Fai qualcosa

 

            }

 

        }



Indipendentemente da come il codice lascia questo blocco using (se un valore è restituito, se viene gettata un'eccezione o esce) il
cursore comunque avrà il proprio reference count correttamente decrementato.

Vedi articolo

lunedì 15 dicembre 2008

EMAB (Logger)

I have used EMAB for simplification ( EMAB download )
for this project.

Nevertheless now it has been overcome by Enterprise Library 4.1 ( Enterprise Library 4.1 download )

For details see Best practises Microsoft


App.Config:


<?xml version="1.0"?>

<configuration>

 

 

 

 

  <configSections>

    <section name="exceptionManagement" type="Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManagerSectionHandler,Microsoft.ApplicationBlocks.ExceptionManagement" />

  </configSections>

 

 

  <exceptionManagement mode="on">

    <publisher assembly="MapControlEMAB" type="Studioat.ArcEngine.AppBase.Classes.EM" fileName="LogError.txt" sendEMail="off" operatorMail="xxxx@gmail.it" operatorFrom="xxxx@yahoo.it" subject="Logger MapControlEMAB"  host="smtp.mail.yahoo.it" user="" password=""/>

  </exceptionManagement>

 

</configuration>




mode="on|off" enable/disable log
assembly="MapControlEMAB" assembly which holds the custom class to manage log
type="Studioat.ArcEngine.AppBase.Classes.EM" custom class to manage log
fileName="LogError.txt" name of the log file created in bin

sendEMail="on|off" enable/disable log on email
operatorMail="xxxx@gmail.it" mail to
operatorFrom="xxxx@yahoo.it" mail from
subject="Logger MapControlEMAB" subject
host="smtp.mail.yahoo.it" smtp
user="" authentication user mail
password="" authentication password mail


From menu select 'Demo Log':

In this sample the error is in the log:

try

            {

                int a = 1, b = 0, c;

 

                c = a / b;

 

            }

            catch (Exception ex)

            {

 

                ExceptionManager.Publish(ex);

 

            }

            finally

            {

 

                MessageBox.Show("See new entry in LogError.txt", "Logger");

 

            }




In this sample the error is in the log plus your extra information:

try

            {

                int a = 1, b = 0, c;

 

                c = a / b;

 

            }

            catch (Exception ex)

            {

 

                NameValueCollection nvc = new NameValueCollection();

                nvc.Add("Info", "My comments bla bla bla:\n\n");

                ExceptionManager.Publish(ex, nvc);

 

 

            }

            finally

            {

 

                MessageBox.Show("See new entry in LogError.txt", "Logger");

 

            }




In this sample the error without handling Exception (remember that to see this error you can't be in debug but you must run directly exe.)


int a = 1, b = 0, c;

 

            c = a / b;





In form main we set UnhandledException for unhandling errors

/// <summary>

    /// The main entry point for the application.

    /// </summary>

    [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]

    [STAThread]

    static void Main()

    {

 

 

        #region manager error

        Application.ThreadException += new ThreadExceptionEventHandler(frmMain.UIThreadException);

        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

 

 

        AppDomain.CurrentDomain.UnhandledException +=

            new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

        #endregion manager error

 

 

        Application.Run(new frmMain());

    }

    #region manager error

    private static void UIThreadException(object sender, ThreadExceptionEventArgs t)

    {

        DialogResult result = DialogResult.Cancel;

        try

        {

            result = ShowThreadExceptionDialog("Error", t.Exception);

        }

        catch (Exception ex)

        {

            try

            {

                MessageBox.Show("Error", "Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);

                ExceptionManager.Publish(ex);

            }

            finally

            {

                Application.Exit();

            }

        }

 

 

        if (result == DialogResult.Abort)

            Application.Exit();

    }

    private static DialogResult ShowThreadExceptionDialog(string title, Exception e)

    {

        string errorMsg = "Contact admin with following info:\n\n";

        errorMsg += e.Message + "\n\nStack Trace:\n" + e.StackTrace;

        return MessageBox.Show(errorMsg, title, MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);

    }

    private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)

    {

        try

        {

            Exception ex = (Exception)e.ExceptionObject;

 

 

            NameValueCollection nvc = new NameValueCollection();

            nvc.Add("Info", "Contact admin with these info errors:\n\n");

            ExceptionManager.Publish(ex, nvc);

 

 

        }

        catch (Exception exc)

        {

            try

            {

 

                ExceptionManager.Publish(exc);

            }

            finally

            {

                Application.Exit();

            }

        }

    }

    #endregion manager error





class EM inherits from IExceptionPublisher and is the custom class used for the logger.



Here you can download the soluzion VS2008 Logger Error

venerdì 5 dicembre 2008

Linq to XML

Con linq è semplice interrogare un element: in questo esempio ho copiato una parte di file GML.

XElement gml = XElement.Parse(

        @"<features><feature fid=""142"" featuretype=""school"" description=""A middle school"">

        <polygon name=""extent"" srsname=""epsg:27354"">

        <linestring name=""extent"" srsname=""epsg:27354"">

        <cdata>

        491888.999999459,5458045.99963358 491904.999999458,5458044.99963358

        491908.999999462,5458064.99963358 491924.999999461,5458064.99963358

        491925.999999462,5458079.99963359 491977.999999466,5458120.9996336

        491953.999999466,5458017.99963357 </cdata>

        </linestring>

        </polygon>

        </feature><feature fid=""143"" featuretype=""house"" description=""a house"">

        <polygon name=""extent"" srsname=""epsg:27354"">

        <linestring name=""extent"" srsname=""epsg:27354"">

        <cdata>

        491888.999999459,5458045.99963358 491904.999999458,5458044.99963358

        491908.999999462,5458064.99963358 491924.999999461,5458064.99963358

        491925.999999462,5458079.99963359 491977.999999466,5458120.9996336

        491953.999999466,5458017.99963357 </cdata>

        </linestring>

        </polygon>

        </feature></features>");

 

 

        //Seleziono la feature con fid = 143

 

        var query = from p in gml.Elements("feature") where (int)p.Attribute("fid") == 143 select p;

 

        //visualizzo i suoi attributi

        foreach (var rec in query)

            Console.WriteLine("Feature: type:{0} - description: {1}", rec.Attribute("featureType").Value, rec.Attribute("Description").Value);