Il blog di Giuseppe Marchi - SharePoint MVP
NAVIGATION - SEARCH

Leggere e scrivere punti geografici in campo GeoLocation di SharePoint 2013

Bene, nei precedenti post abbiamo capito quali vie abbiamo per poter inserire un campo di tipo GeoLocation all'interno di una lista SharePoint 2013. 
Vi ricordo che possiamo farlo tramite:
Vediamo ora come possiamo leggere o scrivere informazioni geografiche (longitudine e latitudine) all'interno di elementi che hanno un campo di tipo GeoLocation tra i campi che ne definiscono la struttura, sfruttando il Server Object Model e il Client Object Model di SharePoint 2013. 

Abbiamo due modi differenti. 
 Il primo vede l'utilizzo di una classe apposita per gestire valori di questo tipo, che è stata aggiunta in entrambi i modelli: la classe SPFieldGeoLocationValue (o la relativa FieldGeoLocationValue del Client Object Model). 

Scrittura
SPWeb web = SPContext.Current.Web;
SPList list = web.Lists.TryGetList("YOUR LIST NAME");
SPListItem item = list.AddItem();
item[list.Fields.GetFieldByInternalName("YOUR FIELD NAME").Id] = new SPFieldGeolocationValue(42, 42); 
item.Update();

Lettura
SPWeb web = SPContext.Current.Web;
SPList list = web.Lists.TryGetList("YOUR LIST NAME");
SPListItem item = list.GetItemById(1);
SPFieldGeolocationValue geoValue = item["YOUR FIELD NAME"] as SPFieldGeolocationValue;
if (geoValue != null)
{
    var lat = geoValue.Latitude;
    var lon = geoValue.Longitude;
    var mes = geoValue.Measure;
    var alt = geoValue.Altitude;
}

Il secondo modo è quello di utilizzare la "POINT syntax". Una particolare notazione che vi permette di inserire coordinate geografiche in formato stringa.
Vi consiglio di utilizzare questa sintassi solo in scrittura e utilizzare la classe SPFieldGeoLocationValue per leggere.

Scrittura  
using (ClientContext context = new ClientContext("http://URL"))
{
   List list = context.Web.Lists.GetByTitle("YOUR LIST NAME");
   ListItem item = list.AddItem(new ListItemCreationInformation());
   item["YOUR FIELD NAME"] = "POINT (42 42)"; //sample location
   item.Update();
   context.ExecuteQuery();
}

Spero vi sia utile.
blog comments powered by Disqus