lundi 29 novembre 2010

SQL Server 2008 spatial – WP7 - Bing Maps I

Utilisation du GeoSpatial dans SQL SERVER 2008 et interaction avec WP7 et Bing Maps – Partie1

Introduction

Avec l’amélioration des technologies et les nouvelles Interfaces Homme/Machine, il est intéressant de pouvoir présenter l’information sous une autre forme que la forme, historique, textuelle.

Dans cet article, l’objectif sera de présenter, de bout en bout, comment localiser géographiquement des données sur une carte à partir d’un mobile Windows Phone 7. Pour ce faire, nous utiliserons l’API Bing Maps pour Windows Phone 7.

En début d’année scolaire, j’ai rédigé un petit article. Et je n’ai jamais pris le temps de le publier. Voici chose faite avec cette première partie.

 

Où se trouvent les données géographiques ?

Pour les données géographiques, il existe plusieurs possibilités dépendantes en partie de votre besoin:

· Soit il s’agit d’une base de données métier, dans laquelle vous avez déjà des données géographiques au format texte. La plupart du temps, il s’agit de deux colonnes (Latitude et longitude) au format varchar. Il vous suffira donc de créer une colonne de type geography et de renseigner celle-ci à l’aide des colonnes textes en faisant une conversion. Les étapes nécessaires pour effectuer cette conversion sont présentées au chapitre Comment convertir ses latitudes/longitudes en type geography

· Soit il s’agit d’une base dans laquelle vous avez déjà des données géographiques, mais vous souhaitez pouvoir superposer à ces données des territoires par exemple. Ceci afin de mieux visualiser vos données sur des fonds de cartes notamment. Les étapes nécessaires pour réaliser ce besoin sont présentées au chapitre Comment importer des données géographiques externes?

Comment convertir ses latitudes/longitudes en type geography

Le système géodésique le plus utilisé dans le monde est le WGS 84 (World Geodesic System of 1984). Ce système permet de placer des coordonnées sur le globe terrestre. Pour qu’un point puisse être placé de façon présente en utilisant ce système, il doit avoir un format bien particulier.

L’exemple suivant part du principe que les coordonnées géographiques qui sont à notre disposition sont au format dit « décimal ».

Etape1 : Ajouter la colonne de type geography

ALTER TABLE [dbo].[AGENCE] ADD [Position_Geo] GEOGRAPHY

Etape 2 : Alimenter cette colonne

Dans la vraie vie, les latitudes et longitudes ne sont jamais toutes renseignées correctement. Il faut donc faire attention à ne pas prendre les champs NULL par exemple. Au-delà des données NULL, il faudra faire attention à tous les enregistrements pour lesquels il y a une faute de frappe, etc.…

Exemple de données telles qu’on peut les voir chez un client :

image

Pour cet exemple la requête permettant d’alimenter la colonne Position_Geo sera la suivante :

UPDATE [dbo].[AGENCE]

SET [POSITION_GEO] = geography::STPointFromText('POINT(' + CAST([LONGITUDE] AS VARCHAR(20)) + ' ' + CAST([LATITUDE] AS VARCHAR(20)) + ')', 4326)

where LONGITUDE is not null

and LONGITUDE <> ''

and LATITUDE is not null

and LATITUDE <> ''

and LATITUDE like '%.%'

and LONGITUDE like '%.%'

and LONGITUDE not like '%E9%'

and LONGITUDE not like '%''%'

and LONGITUDE not like '%°%'

and LATITUDE not like '%:%'

Dans cette requête la clause WHERE nous permet de ne sélectionner que les lignes dont les coordonnées sont:

· Différentes de NULL

· Différentes de vide

· Notées sous forme décimales et non DMS (Degrés Minutes Secondes). Si vous avez des coordonnées sous cette forme 43°16'56.70"N , 5°36'7.45"E, il faut alors les convertir préalablement au format « décimal » en appliquant la règle de calcul suivante :
Degrés + (Minutes / 60) + (Secondes / 3600) = Degrés sous forme décimale

Etape 3 : Le résultat

image

Notez que le format geography stocke les données sous forme binaire.

 

Comment importer des données géographiques externes?

Il existe un certain nombre de sources qui mettent à disposition des données géographiques sous forme de shapefile. Un shapefile est un format de fichier issu du monde des Systèmes d'Informations Géographiques (SIG) contenant toute l'information liée à la géométrie des objets décrits, qui peuvent être des points, des lignes ou des polygones.

Shape2SQL est un outil gratuit permettant d’importer facilement dans une base MS SQL Server 2008 ce type d’information géographique : http://www.sharpgis.net/page/Shape2SQL.aspx .

image

Pour réaliser cet article nous nous sommes basés sur un shapefile contenant des points d’intérêts (parc, zoo, restaurant,…). Ce shapefile peut être téléchargé depuis la page suivante : http://www.mapcruzin.com/free-france-arcgis-maps-shapefiles.htm. Les données ont été importées en utilisant l’outil Shape2SQL. La table issue de cet import est la suivante :

image

Une autre table a été créée pour les besoins de l’article : une table Type, qui contient l’ensemble des types de point d’intérêt possible.

CREATE TABLE [dbo].[Type](

[ID] [int] IDENTITY(1,1) NOT NULL,

[Libelle] [varchar](100) NULL

) ON [PRIMARY]

INSERT INTO [dbo].[Type]

select distinct Type from dbo.PointInteret order by Type

Plusieurs sites mettent à disposition des ressources contenant différent type de données (géographiques, topographiques, etc…), parfois gratuitement. Mais ce n’est pas l’objet de cet article.

Autre exemple de ressource disponible, la carte du monde représentant les frontières des pays du globe : http://www.beginningspatial.com/world_borders_dataset . Cette fois-ci, c’est un fichier plat contenant les instructions SQL permettant de générer une table représentant les frontières de tous les pays du monde. Nous nous servirons de ces données dans notre exemple au chapitre Comment requêter les données géographiques ?

Comment requêter les données géographiques ?

Les types de données (lignes, points, polygones…)

Point : Un point est une représentation exacte, définie grâce à un X et un Y. Il peut également y avoir une élévation Z et une mesure M.

LineString : Segment représentant le chemin le plus court entre deux ou plusieurs points. Si le point de départ est le même que le point d’arrivée, on parle de « ring ».

Polygon : Forme géométrique fermée, possédant une aire. Un polygon peut être « creux » en son centre grâce au retranchement d’un autre polygone en son sein.

Collection : C’est similaire à une collection en .Net. Cela contient plusieurs instances des objets précités. Les collections MultiPolygon, MultiLineString et MultiPoint, elles, comme leur nom l’indique, ne peuvent contenir que des objets d’un type bien particulier.

Requêter

La requête suivante ramène tous les points d’intérêt de type zoo. On constate que les données géographiques sont stockées sous forme binaire et qu’on doit les convertir grâce aux fonctions existantes pour les rendre lisible.

select *, Position_Geo.STAsText() as WKT from PointInteret where type = 'zoo'

image

Outre la vue tabulaire, SSMS propose une vue du résultat sous forme spatiale. L’onglet « Spatial Results » permet donc de visualiser le résultat sous un rendu beaucoup plus fun et sexy qu’un tableau.

On peut également combiner les résultats de requêtes pour faire se superposer plusieurs résultats, à la manière de calques. Prenons par exemple la requête suivante, qui va permettre de visualiser les points d’intérêts de type zoo sur une carte géographique du monde délimitant les frontières.

SELECT Position_Geo.STAsText() AS WKT FROM PointInteret WHERE type = 'zoo'

UNION ALL

SELECT geog FROM World_Borders

image

Les fonctions natives

Nous ne pouvons pas toutes les citer et ce n’est pas le but, mais il existe nativement des fonctions permettant de manipuler ces données géographiques afin de réaliser des opérations de :

· Conversion (ex : STAsText())

· Agrégation (ex: STDijoint(),STContains())

· Mesure (ex: STDistance(), STLength())

Par exemple la requête suivante permet de récupérer la liste des cinq zoos les plus proches du zoo de la Barben :

SELECT top 5 *, Position_Geo.STAsText()AS WKT,

Position_Geo.STDistance((select Position_Geo.STAsText() from PointInteret where name = 'Zoo de la Barben')) AS Distance

FROM PointInteret

WHERE type = 'zoo'

and name <> 'Zoo de la Barben'

order by 7

Pour aller plus loin…

Bibliographie

Beginning Spatial with SQL Server 2008

Webographie

http://msdn.microsoft.com/en-us/library/bb933790.aspx

http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

http://207.46.19.254/france/serveur/sql/donnees-geospatiales/donnees-geospatiales.mspx

http://technet.microsoft.com/en-us/library/bb933917.aspx

mardi 19 octobre 2010

jeudi 17 juin 2010

SSRS – Paramètres Dynamiques Code Custom

Reporting Services -Paramètres dynamiques issus d’un Code Custom

Pour définir les valeurs disponibles d’un paramètre dans un rapport, Reporting Services 2008 ne vous propose que de définir des valeurs fixes ou de récupérer le résultat d’une requête sur une source de données.

Néanmoins, si vous avez du code métier un peu “touchy” qui lui seul serait capable de remonter la liste des paramètres disponibles, grâce aux expressions, vous pouvez le faire.

Pour ce faire:

Votre méthode .Net de votre code custom doit renvoyer une chaine de caractère correctement formatée pour pouvoir être “splittée” par la suite.

public string GetListeAgence()
{
      return "test,test1,test2";
}

Ensuite via les propriétés du paramètre ciblé, il vous suffit de créé une expression qui appelle votre méthode et split la chaine obtenue.

image

=Split(Code.MyCustomCodeNonSigne.GetListeAgence(),",")

Et voila le résultat:

image

mercredi 19 mai 2010

SSRS – DLL Custom Code : Référencer et Utiliser

Reporting Services – Référencer et utiliser une DLL de code custom

A partir des propriétés d’un rapport, Reporting Services vous permet d’écrire des fonctions, en VB.NET uniquement pour le moment.

image

Mais Reporting Services, permet aussi, fort heureusement, de référencer des assemblys métier afin d’en exploiter les fonctionnalités.

Pour ce faire, il suffit de référencer une dll dans le rapport que vous ciblez.

image

Il vous faut également instancier un objet de votre classe que vous souhaitez utiliser. Si c’est une classe instanciable bien évidemment: pas besoin d’objet dans le cas de méthodes statiques.

Attention : “Class Name” = Namespace.NomDeLaClasse

image

Pensez à ajouter votre DLL ou dans les répertoires suivants pour pouvoir tester votre rapport sous Visual Studio et utiliser votre rapport dans Report Manager:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies

C:\Program Files\Microsoft SQL Server\MSRS10.SQLSERVER2008\Reporting Services\ReportServer\bin

Vous pouvez également déployer votre DLL dans le GAC en la signant, mais vous aurez certainement un problème droit.

Il suffit ensuite d’appeler vos méthodes en utilisant les expressions (Code.MonObjet.MaMethode()):

image

La colonne CustomCode contient l’expression suivante :
=Code.MaClasseInstanciee.Addition(Fields!ID1.Value ,Fields!ID2.Value)

On additionne les colonnes ID1 et ID2. Bien entendu votre code métier sera certainement bien plus compliqué et fera certainement appel plus en profondeur aux capacité du Framework .NET.

Le résultat (mes colonnes ID1 et ID2 ont des valeurs fixes. Il est donc normal que le résultat se répète) :

image

samedi 1 mai 2010

Project could not be opened because Microsoft Visual C# 2008 compiler could not be created

Si vous avez ce message d’erreur sous Visual Studio 2008 lorsque vous ouvrez une solution, il faut modifier des clés de registre pour pouvoir à nouveau ouvrir votre solution sans embuche:

Il suffit de modifier toutes les clés “SkipLoading” situé dans le répertoire suivant : HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Packages

Passez leur valeur de 1 à 0.

Source : http://social.msdn.microsoft.com/forums/en-US/Vsexpressinstall/thread/04be49aa-de6b-4f45-9a27-86e3f214a0fe/

jeudi 22 avril 2010

SQL Server 2008 R2 RTM

Microsoft a annoncé le 21 Avril le lancement en version RTM de SQL Server 2008 R2. Néanmoins, cette nouvelle mouture ne devrait être réellement disponible via les canaux habituels de distribution Microsoft que dans quelques jours.

Pour patienter : http://www.sqlserverlaunch.com/

Pour télécharger la version Trial de SQL Server 2008 R2 RTM : Ici

SQL Server 2008 R2

mercredi 7 avril 2010

Bewise Day Conference 2010

Evénement Bewise Sud Est !

Après bientôt trois ans d'existence, Bewise Sud Est organise la première BDC sur Aix-en-Provence.

Les innovations technologiques Microsoft pour les développeurs et les IT pro présentées par les meilleurs experts de Bewise et Microsoft ! Evénement gratuit destiné aux professionnels du développement et de l'IT, aux enseignants et étudiants, venez découvrir:

  • 1 Session Plénière
  • 8 Sessions dédiées par technologie
  • 10 Espaces de démonstration et de discussion avec des Experts
  • 20 Experts Bewise & Microsoft à votre service
  • Présentation de la table Surface de Microsoft

Inscrivez-vous vite !


>> S'inscrire <<

MSdays_480x323


Mots clés : Microsoft Days 2010, MS Days 2010, BDC 2010 Aix-en-Provence

lundi 15 février 2010

Windows Phone 7 Series

Au Mobile World Congress de Barcelone, Microsoft vient de lever le voile sur son prochain OS pour téléphone mobile : Windows Phone 7. L'innovation principale de cette nouvelle version de l'OS pour téléphone mobile est le fait de proposer l'agrégation d'information depuis plusieurs source (applications, web, services...) pour les présenter sous forme de "Hub":People, Images, Jeux, Musique, Video...

Pour plus d'information: http://www.windowsphone7series.com/