SlideShare a Scribd company logo
Geolocalizzazione e
mappe in Windows
Phone 8
Annalisa Berti
annalisa.berti@studentpartner.com

Microsoft Student Partner
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Grazie a
Sponsor

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Agenda
•

I servizi di geolocalizzazione





•

Come rilevare la posizione dell’utente
Gestire le problematiche che possono sorgere
Uso dell’emulatore
Privacy

I controlli Nokia Maps
 Inserire e personalizzare il controllo
 Mostrare la posizione dell’utente sulla mappa
 Mostrare l’indirizzo come segnaposto

•

Launcher

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Dati di posizione
•

GPS:
 +precisione, +consumo batteria, +tempo fixing, -uso
indor

•

Rete cellulare:
 -precisione, - consumo batteria, - tempo fixing, -zone
isolate

•

Wi-fi:
 +/-precisione, +/- batteria, +/- velocità fixing,
+/-area urbana

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
I servizi di geolocalizzazione
•

API allineate con quelle disponibili in Windows 8
 Classe: Geolocator
 Namespace: Windows.Device.Geolocation

•

Gestione automatica del sistema di rilevamento della posizione in base
alle condizioni necessarie

•

Possibile specificare il grado di precisione (in metri o per tipo)
 DesiredAccuracyInMeters
 DesiredAccuracy = PositionAccuracy.High (posizione + precisa)
 DesiredAccuracy = PositionAccuracy.Default (minimo consumo
batteria)

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Capability: ID_CAP_LOCATION
Per l’utilizzo dei servizi
di geolocalizzazione è
necessario dichiarare
la capability
ID_CAP_LOCATION nel
Manifest
(WMAppManifest.xml)

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Geolocator: LocationStatus


L’utente può aver disabilitato i servizi di
geolocalizzazione



Se LocationStatus (proprietà del geolocator) =
PositionStatus.Disabled, i servizi di
geolocalizzazione sono disablitati



Prima di procedere alla rilevazione delle
posizione verificare che i servizi di
gelocalizzazione non siano disabilitati.



Per mandare l’utente alla schermata di
impostazioni:

Windows.System.Launcher.LaunchUriAsync(n
ew Uri("ms-settings-location:"));

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Modalità di rilevazione
Rilevazione puntuale
•

Metodo asincrono GetGeopositionAsync();

•

Ritorna un Geoposition, contenente le informazioni relative alla
posizione rilevata.

Rilevazione continuativa
•

StatusChanged: scatenato quando lo stato del segnale cambia

•

PositionChanged: scatenato quando la posizione dell’utente cambia

 Restituisce un LocationStatus

 Frequenza: per distanza (MovementThreshold) o tempo (ReportInterval)
 Restituisce la posizione corrente

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Rilevazione puntuale
private async void OneShotLocationButton_Click(object sender, EventArgs e)
{
Geolocator geolocator = new Geolocator(){ DesiredAccuracy = PositionAccuracy.Default };
try
{
Geoposition geoposition = await geolocator.GetGeopositionAsync(
maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10) );
// Do something with position

MessageBox.Show(string.Format("Lat: {0}, Long: {1}", geoposition.Coordinate.Latitude,
geoposition.Coordinate.Longitude));
}
catch (Exception)
{
// the application does not have the right capability or the location switch is off
MessageBox.Show("Location is disabled in phone settings");
}

}

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Rilevazione continuativa
private void trackMyPositionMenuItem_Click(object sender, EventArgs e)
{
Geolocator geolocator = new Geolocator
{
DesiredAccuracy = PositionAccuracy.High,
MovementThreshold = 100,
ReportInterval = 1000
};
geolocator.PositionChanged += geolocator_PositionChanged;
}
void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(string.Format("Lat: {0}, Long: {1}",
args.Position.Coordinate.Latitude, args.Position.Coordinate.Longitude));
});
}

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Location tracking in background


Solo un’applicazione alla volta può essere eseguita in background
• Se l’utente apre un’altra applicazione anch’essa con funzionalità di location
tracking, quest’ultima prende il posto di quella in esecuzione.



L’applicazione può essere terminata se:








L’utente disabilita i servizi di geolocalizzazione
Memoria del dispositivo si sta esaurendo
Se è attiva la modalità per il risparmio della batteria
L’applicazione è attiva in background da più di 4 ore senza essere riaperta

Per abilitare la funzionalità va modificato il Manifest (nodo DefaultTask)
Possibile determinare quando l’app è in esecuzione in background o
meno e agire di conseguenza.

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Uso dell’emulatore

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Privacy



Richiedere all’utente il consenso all’utilizzo della
posizione



Prevedere una schermata all’interno
dell’applicazione in cui dare la possibilità di
revocare il consenso.



#CDays14 – Milano 25, 26 e 27 Febbraio 2014

I dati di posizione dell’utente sono dati sensibili

Specificare all’utente in che modo e a che fini
utilizzate la sua posizione
Il controllo Nokia Maps
<phone:PhoneApplicationPage
...
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.
Controls; assembly=Microsoft.Phone.Maps">
...
<!--ContentPanel - place additional content-->
<Grid x:Name="ContentPanel" Grid.Row="1"
Margin="12,0,12,0">
<maps:Map Name="myMap"/>
</Grid>
</phone:PhoneApplicationPage>

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Capability: ID_CAP_MAP
Per poter utilizzare la
mappa è necessario
selezionare la
capability ID_CAP_MAP
nel Manifest
(WMAppManifest.xml)

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Controllo Nokia Maps: Proprietà


XAML

<maps:Map Name= "myMap"
Center="45.4642, 9.1898"
ZoomLevel="16"/>


Code

private void CenterAndZoomMap()
{
myMap.Center = new GeoCoordinate(45.4642,
9.1898);
myMap.ZoomLevel = 16;
}

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
CartographicMode
Per cambiare la vista della mappa modificare la proprietà CartographicMode

Road (default)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Aerial

Hybrid

Terrain
ColorMode
Per cambiare il tema della mappa impostare la proprietà ColorMode

Light (default)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Dark
Pitch, Heading e LandmarksEnabled
<maps:Map Name= "myMap" LandmarksEnabled="true" Pitch="60"/>

Pitch:

Heading

Angolo
rispetto
all’orizzonte
(0 - 75)

Rotazione della
mappa
0/360: Nord

•

90: Est

•

180: Sud

•

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

•

270: Ovest
PedestrianFeaturesEnabled

Scale
Strade pedonali

Default
#CDays14 – Milano 25, 26 e 27 Febbraio 2014

PedestrianFeaturesEnabled="True"
Mappe e servizi di geolocalizzazione
private async void OneShotLocationButton_Click(object
sender, EventArgs e)
{
...
// Get current position
Geoposition geoposition = await
geolocator.GetGeopositionAsync(
maximumAge: TimeSpan.FromMinutes(5),
timeout: TimeSpan.FromSeconds(10)
);
// Set map center
MyMap.Center = geoposition.Coordinate.ToGeoCoordinate();
// Set zoomLevel
MyMap.ZoomLevel = 11;
...
}

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Mostrare dei segnaposti sulla mappa
•
1.

Non esistono specifici Pushpin in WP8
Possiamo crearlo con i livelli:
 Ogni mappa può contenere uno o più layer (MapLayer)
 Ogni MapLayer può contenere uno o più MapOverlay
 Ogni MapOverlay rappresenta un elemento

2.

Uso Pushpin di Windows Phone Toolkit

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Segnaposto con i livelli
private void DrawEllipsePushPin(GeoCoordinate myPosition)
{
MapOverlay ellipseOverlay = new MapOverlay
{
GeoCoordinate = myPosition,
Content = new Ellipse
{
Fill = new SolidColorBrush(Colors.Red),
Width = 30,
Height = 30
},
PositionOrigin = new Point(0.5, 0.5)
};
MapLayer layer = new MapLayer();
layer.Add(ellipseOverlay);

MyMap.Layers.Add(layer);
}
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Segnaposto con il Toolkit
<phone:PhoneApplicationPage
xmlns:toolkit="clr-namespace:Microsoft.Phone.Maps.Toolk
it;assembly=Microsoft.Phone.Controls.Toolkit"
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1"
Margin="12,0,12,0">
<maps:Map Name="MyMap">
<toolkit:MapExtensions.Children>
<toolkit:Pushpin x:Name="MyPushpin"
Content="Io sono qui"
GeoCoordinate="45.4642, 9.1898"
<toolkit:Pushpin/>
</toolkit:MapExtensions.Children>
</maps:Map>
</Grid>
</phone:PhoneApplicationPage>
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Da coordinata ad indirizzo
private void ReverseGeocoding(Geoposition geoposition)
{
ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery
{
GeoCoordinate = new GeoCoordinate(45.4642, 9.1898)
};
reverseGeocode.QueryCompleted += reverseGeocode_QueryCompleted;
reverseGeocode.QueryAsync();
}
void reverseGeocode_QueryCompleted(object sender,
QueryCompletedEventArgs<IList<MapLocation>> e)
{
MapAddress geoAddress = e.Result[0].Information.Address;
// Set pushpin Content with geoAddress
}
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Pushpin con indirizzo
 XAML
<maps:Map Name="MyMap">
<toolkit:MapExtensions.Children>
<toolkit:Pushpin x:Name="MyPushpin«
GeoCoordinate="45.4642, 9.1898"
<toolkit:Pushpin/>
</toolkit:MapExtensions.Children>
</maps:Map>

 Code
private void SetPushpinContent(MapAddress geoAddress)
{
Pushpin pushpin = (Pushpin)this.FindName("MyPushpin");
pushpin.Content = string.Format("{0}, n{1}",
geoAddress.Street, geoAddress.City);
}

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Interagire con il pushpin
 XAML
<maps:Map Name="MyMap">
<toolkit:MapExtensions.Children>
<toolkit:Pushpin x:Name="MyPushpin"
Tap="MyPushpin_Tap"/>
</toolkit:MapExtensions.Children>
</maps:Map>

 Code
private void MyPushpin_Tap(object sender,
System.Windows.Input.GestureEventArgs e)
{
Pushpin pushpin = sender as Pushpin;
MessageBox.Show(pushpin.Content.ToString());
}
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
I launcher


MapDownloader: permette all’utente di scaricare le mappe da
utilizzare offline.



MapUpdaterTask: permette di aggiornare le mappe che l’utente ha
scaricato per uso in modalità offline.



MapsTask: apre l’applicazione Here Maps mostrando un determinato
punto che possiamo indicare (come coordinata o come indirizzo).



MapsDirectionsTask: apre l’applicazione Here Maps in modalità
«itinerario». Possiamo lanciare il task indicando la posizione di partenza
e/o di arrivo.

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Riferimenti




Sviluppare applicazioni per Windows Phone 8, Matteo Pagani

Microsoft Virtual Academy, corso: Building Apps for Windows Phone 8
Jump Start. http://bit.ly/1jqt4cZ

#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Q&A
Tutto il materiale di questa sessione su
http://www.communitydays.it/
Lascia il feedback su questa sessione,
potrai essere estratto per i nostri premi!
Seguici su

Twitter @CommunityDaysIT
Facebook http://facebook.com/cdaysit

#CDays14

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

More Related Content

Viewers also liked

Hangover Cures for Overzealous Celebrators
Hangover Cures for Overzealous CelebratorsHangover Cures for Overzealous Celebrators
Hangover Cures for Overzealous Celebrators
carolsmagalski
 
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
ゲームインフラと解析基盤 そのものの考え方を変えるAWSゲームインフラと解析基盤 そのものの考え方を変えるAWS
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
Yasuhiro Horiuchi
 
AWSによるソーシャルアプリ運用事例
AWSによるソーシャルアプリ運用事例AWSによるソーシャルアプリ運用事例
AWSによるソーシャルアプリ運用事例
Yasuhiro Horiuchi
 
AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会
AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会
AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会Yasuhiro Horiuchi
 
AWS サービスアップデートまとめ 2013年9月
AWS サービスアップデートまとめ 2013年9月AWS サービスアップデートまとめ 2013年9月
AWS サービスアップデートまとめ 2013年9月Yasuhiro Horiuchi
 
AWS サービスアップデートまとめ 2014年3月
AWS サービスアップデートまとめ 2014年3月AWS サービスアップデートまとめ 2014年3月
AWS サービスアップデートまとめ 2014年3月
Yasuhiro Horiuchi
 
AWS サービスアップデートまとめ 2014年5月
AWS サービスアップデートまとめ 2014年5月AWS サービスアップデートまとめ 2014年5月
AWS サービスアップデートまとめ 2014年5月Yasuhiro Horiuchi
 
Ppt
PptPpt
Leai Investor Deck
Leai Investor DeckLeai Investor Deck
Leai Investor Deck
RedChip Companies, Inc.
 
LEAI Investor Deck
LEAI Investor DeckLEAI Investor Deck
LEAI Investor Deck
RedChip Companies, Inc.
 
Grne investor deck
Grne investor deckGrne investor deck
Grne investor deck
RedChip Companies, Inc.
 

Viewers also liked (12)

Hangover Cures for Overzealous Celebrators
Hangover Cures for Overzealous CelebratorsHangover Cures for Overzealous Celebrators
Hangover Cures for Overzealous Celebrators
 
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
ゲームインフラと解析基盤 そのものの考え方を変えるAWSゲームインフラと解析基盤 そのものの考え方を変えるAWS
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
 
AWSによるソーシャルアプリ運用事例
AWSによるソーシャルアプリ運用事例AWSによるソーシャルアプリ運用事例
AWSによるソーシャルアプリ運用事例
 
AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会
AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会
AWSアップデート (DB縛り) in 第18回 JAWS-UG 東京 勉強会
 
Adorn Mineral Cosmetics CSR Case Study
Adorn Mineral Cosmetics CSR Case StudyAdorn Mineral Cosmetics CSR Case Study
Adorn Mineral Cosmetics CSR Case Study
 
AWS サービスアップデートまとめ 2013年9月
AWS サービスアップデートまとめ 2013年9月AWS サービスアップデートまとめ 2013年9月
AWS サービスアップデートまとめ 2013年9月
 
AWS サービスアップデートまとめ 2014年3月
AWS サービスアップデートまとめ 2014年3月AWS サービスアップデートまとめ 2014年3月
AWS サービスアップデートまとめ 2014年3月
 
AWS サービスアップデートまとめ 2014年5月
AWS サービスアップデートまとめ 2014年5月AWS サービスアップデートまとめ 2014年5月
AWS サービスアップデートまとめ 2014年5月
 
Ppt
PptPpt
Ppt
 
Leai Investor Deck
Leai Investor DeckLeai Investor Deck
Leai Investor Deck
 
LEAI Investor Deck
LEAI Investor DeckLEAI Investor Deck
LEAI Investor Deck
 
Grne investor deck
Grne investor deckGrne investor deck
Grne investor deck
 

Similar to Geolocalizzazione e mappe in Windows Phone 8

Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Massimiliano Leone
 
Sviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhoneSviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhoneEduard Roccatello
 
TravelStory presentation
TravelStory presentationTravelStory presentation
TravelStory presentation
Alessio Ciarrocchi
 
Xamarin.android
Xamarin.androidXamarin.android
Xamarin.android
Beniamino Ferrari
 
Layar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentataLayar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentata
Andrea Piovani
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
Nixmap, mappe di Niscemi e non solo...
Nixmap, mappe di Niscemi e non solo...Nixmap, mappe di Niscemi e non solo...
Nixmap, mappe di Niscemi e non solo...
Gianfranco Di Pietro
 
GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...
GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...
GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...
Planetek Italia Srl
 
geoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello Buono
geoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello BuonogeoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello Buono
geoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello Buono
Informatica e Pianificazione Urbana e Territoriale
 
Ivano brogonzoli why_mca
Ivano brogonzoli why_mcaIvano brogonzoli why_mca
Ivano brogonzoli why_mca
Ivano Brogonzoli
 
Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...
Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...
Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...
TeamDev
 
Sviluppare SPA con Vue
Sviluppare SPA con VueSviluppare SPA con Vue
Sviluppare SPA con Vue
Fabrizio Bernabei
 
Sviluppare SPA con Vue.js
Sviluppare SPA con Vue.jsSviluppare SPA con Vue.js
Sviluppare SPA con Vue.js
Fabrizio Bernabei
 
iOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele GaliottoiOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele Galiottomokapp
 
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Francesco Sciuti
 
Mobile senza frontiere
Mobile senza frontiereMobile senza frontiere
Mobile senza frontiere
Carlo Frinolli Puzzilli
 
TESI-SUPERIORI
TESI-SUPERIORITESI-SUPERIORI
TESI-SUPERIORI
Andrea Bissoli
 
ERDAS 2011 World Tour Slideshow Presentazione
ERDAS 2011 World Tour Slideshow PresentazioneERDAS 2011 World Tour Slideshow Presentazione
ERDAS 2011 World Tour Slideshow Presentazione
Planetek Italia Srl
 
OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro “Come costruire...
OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro  “Come costruire...OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro  “Come costruire...
OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro “Come costruire...giovannibiallo
 
Ardelean phone gap_wp4.
Ardelean phone gap_wp4.Ardelean phone gap_wp4.
Ardelean phone gap_wp4.Dan Ardelean
 

Similar to Geolocalizzazione e mappe in Windows Phone 8 (20)

Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
 
Sviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhoneSviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhone
 
TravelStory presentation
TravelStory presentationTravelStory presentation
TravelStory presentation
 
Xamarin.android
Xamarin.androidXamarin.android
Xamarin.android
 
Layar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentataLayar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentata
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
 
Nixmap, mappe di Niscemi e non solo...
Nixmap, mappe di Niscemi e non solo...Nixmap, mappe di Niscemi e non solo...
Nixmap, mappe di Niscemi e non solo...
 
GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...
GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...
GWT 2014: Emergency Conference - 07 Telerilevamento e geofisica per l'analisi...
 
geoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello Buono
geoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello BuonogeoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello Buono
geoSDI : dal Gis allo Scenario Web Shared, di Dimitri Dello Buono
 
Ivano brogonzoli why_mca
Ivano brogonzoli why_mcaIvano brogonzoli why_mca
Ivano brogonzoli why_mca
 
Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...
Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...
Un’applicazione mobileserver per la mappatura d’informazioni a supporto delle...
 
Sviluppare SPA con Vue
Sviluppare SPA con VueSviluppare SPA con Vue
Sviluppare SPA con Vue
 
Sviluppare SPA con Vue.js
Sviluppare SPA con Vue.jsSviluppare SPA con Vue.js
Sviluppare SPA con Vue.js
 
iOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele GaliottoiOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele Galiotto
 
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
 
Mobile senza frontiere
Mobile senza frontiereMobile senza frontiere
Mobile senza frontiere
 
TESI-SUPERIORI
TESI-SUPERIORITESI-SUPERIORI
TESI-SUPERIORI
 
ERDAS 2011 World Tour Slideshow Presentazione
ERDAS 2011 World Tour Slideshow PresentazioneERDAS 2011 World Tour Slideshow Presentazione
ERDAS 2011 World Tour Slideshow Presentazione
 
OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro “Come costruire...
OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro  “Come costruire...OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro  “Come costruire...
OpenGeoData Italia 2014 Fabio Rinnone e Gianfranco Di Pietro “Come costruire...
 
Ardelean phone gap_wp4.
Ardelean phone gap_wp4.Ardelean phone gap_wp4.
Ardelean phone gap_wp4.
 

Geolocalizzazione e mappe in Windows Phone 8

  • 1. Geolocalizzazione e mappe in Windows Phone 8 Annalisa Berti annalisa.berti@studentpartner.com Microsoft Student Partner #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 2. Grazie a Sponsor #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 3. Agenda • I servizi di geolocalizzazione     • Come rilevare la posizione dell’utente Gestire le problematiche che possono sorgere Uso dell’emulatore Privacy I controlli Nokia Maps  Inserire e personalizzare il controllo  Mostrare la posizione dell’utente sulla mappa  Mostrare l’indirizzo come segnaposto • Launcher #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 4. Dati di posizione • GPS:  +precisione, +consumo batteria, +tempo fixing, -uso indor • Rete cellulare:  -precisione, - consumo batteria, - tempo fixing, -zone isolate • Wi-fi:  +/-precisione, +/- batteria, +/- velocità fixing, +/-area urbana #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 5. I servizi di geolocalizzazione • API allineate con quelle disponibili in Windows 8  Classe: Geolocator  Namespace: Windows.Device.Geolocation • Gestione automatica del sistema di rilevamento della posizione in base alle condizioni necessarie • Possibile specificare il grado di precisione (in metri o per tipo)  DesiredAccuracyInMeters  DesiredAccuracy = PositionAccuracy.High (posizione + precisa)  DesiredAccuracy = PositionAccuracy.Default (minimo consumo batteria) #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 6. Capability: ID_CAP_LOCATION Per l’utilizzo dei servizi di geolocalizzazione è necessario dichiarare la capability ID_CAP_LOCATION nel Manifest (WMAppManifest.xml) #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 7. Geolocator: LocationStatus  L’utente può aver disabilitato i servizi di geolocalizzazione  Se LocationStatus (proprietà del geolocator) = PositionStatus.Disabled, i servizi di geolocalizzazione sono disablitati  Prima di procedere alla rilevazione delle posizione verificare che i servizi di gelocalizzazione non siano disabilitati.  Per mandare l’utente alla schermata di impostazioni: Windows.System.Launcher.LaunchUriAsync(n ew Uri("ms-settings-location:")); #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 8. Modalità di rilevazione Rilevazione puntuale • Metodo asincrono GetGeopositionAsync(); • Ritorna un Geoposition, contenente le informazioni relative alla posizione rilevata. Rilevazione continuativa • StatusChanged: scatenato quando lo stato del segnale cambia • PositionChanged: scatenato quando la posizione dell’utente cambia  Restituisce un LocationStatus  Frequenza: per distanza (MovementThreshold) o tempo (ReportInterval)  Restituisce la posizione corrente #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 9. Rilevazione puntuale private async void OneShotLocationButton_Click(object sender, EventArgs e) { Geolocator geolocator = new Geolocator(){ DesiredAccuracy = PositionAccuracy.Default }; try { Geoposition geoposition = await geolocator.GetGeopositionAsync( maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10) ); // Do something with position MessageBox.Show(string.Format("Lat: {0}, Long: {1}", geoposition.Coordinate.Latitude, geoposition.Coordinate.Longitude)); } catch (Exception) { // the application does not have the right capability or the location switch is off MessageBox.Show("Location is disabled in phone settings"); } } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 10. Rilevazione continuativa private void trackMyPositionMenuItem_Click(object sender, EventArgs e) { Geolocator geolocator = new Geolocator { DesiredAccuracy = PositionAccuracy.High, MovementThreshold = 100, ReportInterval = 1000 }; geolocator.PositionChanged += geolocator_PositionChanged; } void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) { Dispatcher.BeginInvoke(() => { MessageBox.Show(string.Format("Lat: {0}, Long: {1}", args.Position.Coordinate.Latitude, args.Position.Coordinate.Longitude)); }); } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 11. Location tracking in background  Solo un’applicazione alla volta può essere eseguita in background • Se l’utente apre un’altra applicazione anch’essa con funzionalità di location tracking, quest’ultima prende il posto di quella in esecuzione.  L’applicazione può essere terminata se:       L’utente disabilita i servizi di geolocalizzazione Memoria del dispositivo si sta esaurendo Se è attiva la modalità per il risparmio della batteria L’applicazione è attiva in background da più di 4 ore senza essere riaperta Per abilitare la funzionalità va modificato il Manifest (nodo DefaultTask) Possibile determinare quando l’app è in esecuzione in background o meno e agire di conseguenza. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 12. Uso dell’emulatore #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 13. Privacy   Richiedere all’utente il consenso all’utilizzo della posizione  Prevedere una schermata all’interno dell’applicazione in cui dare la possibilità di revocare il consenso.  #CDays14 – Milano 25, 26 e 27 Febbraio 2014 I dati di posizione dell’utente sono dati sensibili Specificare all’utente in che modo e a che fini utilizzate la sua posizione
  • 14. Il controllo Nokia Maps <phone:PhoneApplicationPage ... xmlns:maps="clr-namespace:Microsoft.Phone.Maps. Controls; assembly=Microsoft.Phone.Maps"> ... <!--ContentPanel - place additional content--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <maps:Map Name="myMap"/> </Grid> </phone:PhoneApplicationPage> #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 15. Capability: ID_CAP_MAP Per poter utilizzare la mappa è necessario selezionare la capability ID_CAP_MAP nel Manifest (WMAppManifest.xml) #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 16. Controllo Nokia Maps: Proprietà  XAML <maps:Map Name= "myMap" Center="45.4642, 9.1898" ZoomLevel="16"/>  Code private void CenterAndZoomMap() { myMap.Center = new GeoCoordinate(45.4642, 9.1898); myMap.ZoomLevel = 16; } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 17. CartographicMode Per cambiare la vista della mappa modificare la proprietà CartographicMode Road (default) #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Aerial Hybrid Terrain
  • 18. ColorMode Per cambiare il tema della mappa impostare la proprietà ColorMode Light (default) #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Dark
  • 19. Pitch, Heading e LandmarksEnabled <maps:Map Name= "myMap" LandmarksEnabled="true" Pitch="60"/> Pitch: Heading Angolo rispetto all’orizzonte (0 - 75) Rotazione della mappa 0/360: Nord • 90: Est • 180: Sud • #CDays14 – Milano 25, 26 e 27 Febbraio 2014 • 270: Ovest
  • 20. PedestrianFeaturesEnabled Scale Strade pedonali Default #CDays14 – Milano 25, 26 e 27 Febbraio 2014 PedestrianFeaturesEnabled="True"
  • 21. Mappe e servizi di geolocalizzazione private async void OneShotLocationButton_Click(object sender, EventArgs e) { ... // Get current position Geoposition geoposition = await geolocator.GetGeopositionAsync( maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10) ); // Set map center MyMap.Center = geoposition.Coordinate.ToGeoCoordinate(); // Set zoomLevel MyMap.ZoomLevel = 11; ... } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 22. Mostrare dei segnaposti sulla mappa • 1. Non esistono specifici Pushpin in WP8 Possiamo crearlo con i livelli:  Ogni mappa può contenere uno o più layer (MapLayer)  Ogni MapLayer può contenere uno o più MapOverlay  Ogni MapOverlay rappresenta un elemento 2. Uso Pushpin di Windows Phone Toolkit #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 23. Segnaposto con i livelli private void DrawEllipsePushPin(GeoCoordinate myPosition) { MapOverlay ellipseOverlay = new MapOverlay { GeoCoordinate = myPosition, Content = new Ellipse { Fill = new SolidColorBrush(Colors.Red), Width = 30, Height = 30 }, PositionOrigin = new Point(0.5, 0.5) }; MapLayer layer = new MapLayer(); layer.Add(ellipseOverlay); MyMap.Layers.Add(layer); } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 24. Segnaposto con il Toolkit <phone:PhoneApplicationPage xmlns:toolkit="clr-namespace:Microsoft.Phone.Maps.Toolk it;assembly=Microsoft.Phone.Controls.Toolkit" <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <maps:Map Name="MyMap"> <toolkit:MapExtensions.Children> <toolkit:Pushpin x:Name="MyPushpin" Content="Io sono qui" GeoCoordinate="45.4642, 9.1898" <toolkit:Pushpin/> </toolkit:MapExtensions.Children> </maps:Map> </Grid> </phone:PhoneApplicationPage> #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 25. Da coordinata ad indirizzo private void ReverseGeocoding(Geoposition geoposition) { ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery { GeoCoordinate = new GeoCoordinate(45.4642, 9.1898) }; reverseGeocode.QueryCompleted += reverseGeocode_QueryCompleted; reverseGeocode.QueryAsync(); } void reverseGeocode_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e) { MapAddress geoAddress = e.Result[0].Information.Address; // Set pushpin Content with geoAddress } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 26. Pushpin con indirizzo  XAML <maps:Map Name="MyMap"> <toolkit:MapExtensions.Children> <toolkit:Pushpin x:Name="MyPushpin« GeoCoordinate="45.4642, 9.1898" <toolkit:Pushpin/> </toolkit:MapExtensions.Children> </maps:Map>  Code private void SetPushpinContent(MapAddress geoAddress) { Pushpin pushpin = (Pushpin)this.FindName("MyPushpin"); pushpin.Content = string.Format("{0}, n{1}", geoAddress.Street, geoAddress.City); } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 27. Interagire con il pushpin  XAML <maps:Map Name="MyMap"> <toolkit:MapExtensions.Children> <toolkit:Pushpin x:Name="MyPushpin" Tap="MyPushpin_Tap"/> </toolkit:MapExtensions.Children> </maps:Map>  Code private void MyPushpin_Tap(object sender, System.Windows.Input.GestureEventArgs e) { Pushpin pushpin = sender as Pushpin; MessageBox.Show(pushpin.Content.ToString()); } #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 28. I launcher  MapDownloader: permette all’utente di scaricare le mappe da utilizzare offline.  MapUpdaterTask: permette di aggiornare le mappe che l’utente ha scaricato per uso in modalità offline.  MapsTask: apre l’applicazione Here Maps mostrando un determinato punto che possiamo indicare (come coordinata o come indirizzo).  MapsDirectionsTask: apre l’applicazione Here Maps in modalità «itinerario». Possiamo lanciare il task indicando la posizione di partenza e/o di arrivo. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 29. Riferimenti   Sviluppare applicazioni per Windows Phone 8, Matteo Pagani Microsoft Virtual Academy, corso: Building Apps for Windows Phone 8 Jump Start. http://bit.ly/1jqt4cZ #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 30. Q&A Tutto il materiale di questa sessione su http://www.communitydays.it/ Lascia il feedback su questa sessione, potrai essere estratto per i nostri premi! Seguici su Twitter @CommunityDaysIT Facebook http://facebook.com/cdaysit #CDays14 #CDays14 – Milano 25, 26 e 27 Febbraio 2014