Voici une méthode permettant de calculer la distance entre 2 coordonnées (Latitude & Longitude) placées sur la carte affichée sur l’application mobile comme vu précédemment :
public double GetDistance(double pLat1, double pLong1, double pLat2, double pLong2)
{
double DEGTORAD = Math.PI / 180.0;
double RADTODEG = 180.0 / Math.PI;
double theta = pLat1 – pLat2;
double d = Math.sin(pLat1 * DEGTORAD) * Math.sin(pLat2 * DEGTORAD) + Math.cos(pLat1 * DEGTORAD) * Math.cos(pLat2 * DEGTORAD) * Math.cos(theta * DEGTORAD);
d = Math.acos(d);
d *= RADTODEG;
d *= 60 * 1.1515;
d *= 1.609344;
return d;
}
Cette méthode se trouve dans le service web dans la partie JEE.
Changement de programme …
6 février 2010
Nous devions utiliser la plate forme Azure de Microsoft pour héberger le site Internet et la base de données. Nous avons abandonné cette option et nous avons choisi d’utiliser les solutions libres GlassFish (Site Internet) et PhpMyAdmin (Base de données). Pour utiliser le serveur GlassFish nous avons créé une application Web en JEE sous NetBeans et utilisé le Framework JavaServerFace.
Afin de faire communiquer l’application sur le mobile avec le site Internet nous décidons d’utiliser les “Services Web” qui nous permet donc d’envoyer des données, de traiter ces données, de récupérer certaines données de la base de données et de les retourner à l’application sur le mobile.
Si vous souhaitez connaître les bases afin de créer un service web sous JAVA et l’interroger à partir d’une application mobile en C#, veuillez consulter ce lien :
http://epsimobiledev.blogspot.com/
Ce lien vous redirige sur le blog d’une des équipes de l’EPSI qui travaille aussi sur ce projet défini dans un article précédent.
Détaillons tout de même notre méthode pour mettre en place le Web Service et faire en sorte que les applications communiquent entre elles grâce à ce dernier :
Afin de faire communiquer l’application sur le mobile avec le site Internet nous décidons d’utiliser les « Web Services » qui nous permet donc d’envoyer des données, de les traiter, d’en récupérer certaines provenant de la base de données et de les retourner à l’application sur le mobile.
Notre Web Service est implémenté dans l’application web hébergée sur Glassfish. L’application mobile envoie au Web Service ses propres coordonnées GPS (latitude & longitude) ainsi que son numéro de téléphone. Grâce à ces informations, le Web Service récupère la liste des contacts (contenue dans notre smart phone), puis vérifie la distance qui nous sépare des positions de nos contacts contenues dans la base de données MySql. Lorsque la position d’un ou plusieurs contacts est assez proche de la notre, le Web Service renvoie au mobile les coordonnées et le numéro de téléphone de ces contacts. L’application mobile peut alors affichée la carte avec le marquage des différentes positions des contacts proches.
Création du Web Service :
Faites un clique droit soit sur votre application web soit sur la partie EJB (si vous en utilisez pour faire la persistance des données avec votre base de données). Puis cliquez sur Web Service, saisissez le nom que vous souhaitez lui attribuer et choisissez le package dans lequel vous voulez qu’il apparaisse et enfin cliquez sur “Terminer”.
Votre Web Service est alors créé. Il ne reste donc plus qu’à implémenter les méthodes que vous désirez.
Implémentation du Web Service du côté JEE :
package <votre nom de package>;
import javax.jws.WebMethod;
import javax.jws.WebService;@WebService()
public class WebService1 {}
// Constructeur du Web Service : WebService1
public WebService1() {
}
// Déclaration d’une méthode : ici la méthode classique permettant d’afficher “Hello World”.
// L’operationName est le nom qui sera utilisé pour accéder à cette méthode depuis votre application mobile par exemple.
@WebMethod(operationName = “hello”)
public String hello() {
return “Hello World”;
}
Communication avec le Web Service à partir de l’application mobile :
// Permet d’utiliser le Web Service : “NomDeLAppli.NomDeLaRéférenceWeb”
using AppliEPSI.WebReference1;
namespace AppliEPSI
{
public partial class Form1 : Form
{//Service1 ws;
WebReference1.WebService1Service ws;}
public Form1()
{
InitializeComponent();ws = new WebReference1.WebService1Service(); // Instanciation du Web Service
}
private void Form1_Load(object sender, EventArgs e)
{LabelMsg.Text = ws.hello(); // Appel de la méthode “hello” présente dans le Web Service et assignation du résultat (Hello World) dans le Label “LabelMsg” présent dans le Form1.
}
Voila, vous avez toutes les billes en main pour faire communiquer une application développée sur un mobile avec une application web par l’intermédiaire d’un Web Service.
Afficher un itinéraire avec l’API Google Map
6 février 2010
Lorsqu’un contact est proche de notre position, l’application doit afficher une carte par l’intermédiaire de l’API Google Maps en plaçant sur la carte un point qui représente sa propre position et un autre qui représente la position du contact à proximité. La carte s’affiche dans une pictureBox (ici : pictureBox2) présente sur la Form de notre application Smart Device.
Voici une méthode qui permet de réaliser cette fonctionnalité :
private Bitmap GetItineraire(string lat1, string long1, string lat2, string long2)
{
Bitmap myMap = null;#region Construction des arguments de l’URL
StringBuilder args = new StringBuilder();
args.Append(“center=” + lat1 + “,” + long1);
args.Append(“&zoom=8″); //Le zoom peut être modifié selon si l’on définie la “proximité” plus ou moins grande.
args.Append(“&size=” + 512 + “x” + 512);
args.Append(“&maptype=mobile”); // satellite, terrain, hybrid, mobile
args.Append(“&markers=color:blue|label:O|”+lat1+”,”+long1+”");
args.Append(“&markers=color:red|label:H|” + lat2 + “,” + long2 + “”);
args.Append(“&sensor=false”); // true if my app uses GPS sensor
args.Append(“&key=” + Properties.Resources.GoogleMapsApiKey);#endregion
try
{
WebRequest myRequest = WebRequest.Create(Properties.Resources.GoogleMapsBaseUrlItineraire + args.ToString());
WebResponse myResponse = myRequest.GetResponse();
myMap = new Bitmap(myResponse.GetResponseStream());
myResponse.Close();
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
}pictureBox2.Image = myMap;
return myMap;
}
Plan d’action!!
21 janvier 2010
Voici comment nous allons nous y prendre afin de réaliser cette application.
Tout d’abord, il faut définir l’architecture de l’application c’est à dire, définir les modules étant en interactions :
- La base de données.
- L’application qui tourne en tâche de fond sur le Windows Phone et qui notifie à l’utilisateur lorsqu’un ami est à proximité.
- L’application web qui est hébergé sur la plate-forme Azure.
- Les services web qui permet à l’application web de communiquer avec l’application sur le Windows Phone et vice et versa.
Ensuite, il faut définir les risques technologiques. Nous les verrons dans un prochain article.
Puis, il faut donc faire la conception de tous ces modules. La base de données est terminée et a été réalisée sous Microsoft Sql. Il ne reste donc plus qu’à l’importer sur Sql Azure.
Comme je vous l’ai dit dans l’article précédent, nous sommes en train de développer quelques prototypes :
- Récupération de la latitude et de la longitude où l’utilisateur se trouve.
- Géolocalisation par l’intermédiaire de l’API Bing Maps.
- Géolocalisation par l’intermédiaire de l’API Google Maps.
- Service web permettant la communication des 2 applications entre elles.
- Application web permettant aux utilisateurs de s’inscrire ou de créer des groupes afin d’être alerté de leur proximité.
Une fois ces prototypes terminés, nous pourrons développer tous ces modules, sachant que la base sera faite, il ne nous restera donc plus qu’à bien étoffer chaque fonctionnalité et à les faire interagir entre elles.
Enfin, si nous avons le temps, nous essayerons de développer plus de fonctionnalités autour du réseaux social car cette première application (localiser les amis à proximité de l’utilisateur est une excellente idée et pourrait intéresser beaucoup de personnes). Donc si nous développons un réseau social digne de ce nom avec d’autres fonctionnalités toutes aussi originales, le portail web pourrait connaître un franc succès.
A bientôt pour découvrir les codes-sources des prototypes!!
Réception de 4 Windows Phones
21 janvier 2010
Microsoft nous a fait parvenir 4 Windows Phones afin de pouvoir tester l’application sur l’environnement réel. Un émulateur est tout de même disponible sur Visual Studio 2008 grâce à “Windows Mobile 6.5 Professional Developer Tool Kit”.
Nous sommes actuellement en train de développer des prototypes autour de la fonctionnalité de géolocalisation des API Google et de Bing Maps. Ces API permettent l’accès aux applications de géolocalisation de ces 2 moteurs de recherche.
Nous posterons les codes-sources dans les prochains articles!!
Mise en bouche… (2)
9 janvier 2010
Vendredi 8 janvier, Pierre Caussy de la société Microsoft, nous a donné une conférence sur la plateforme Windows Azure, suivi d’un TP.
Mise en bouche…
9 janvier 2010
Vendredi 18 décembre, Pierre Cauchois de la société Microsoft nous a donné une conférence à propos de Windows Phone 6.5. Puis nous avons fait un TP sur cette technologie afin de la prendre en main. L’établissement d’un projet a découlé de cette journée très instructrice.
Le projet choisit est très intéressant en termes de compétences que nous allons développé :
- Windows Phone
- Plate forme Azure
- Java / JEE
- Intéropérabilité en CSharp et Java
Lancement du Blog !
9 janvier 2010
Bonjour à tous, ce Blog propose des informations sur le projet que nous sommes en train de réaliser.
Le projet consiste à développer un réseaux social fonctionnant sur Windows Phone et Google Androïde permettant :
- Créer des groupes pouvant accueillir plusieurs contacts.
- de repérer les contacts, inscrits sur l’application, lorsqu’ils sont proches de l’endroit duquel l’utilisateur se trouve. L’application notifie la proximité de ce contact en affichant un message. Le repérage se fait grâce à la puce GPS présent dans les smartphones.