{"id":1026,"date":"2009-09-09T06:58:28","date_gmt":"2009-09-09T05:58:28","guid":{"rendered":"http:\/\/flaven.fr\/?p=1026"},"modified":"2013-09-26T06:04:23","modified_gmt":"2013-09-26T04:04:23","slug":"google-flex-buddyress-et-wordpress-interfacer-buddypress-et-google-map-api-sous-flex","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2009\/09\/google-flex-buddyress-et-wordpress-interfacer-buddypress-et-google-map-api-sous-flex\/","title":{"rendered":"Google, Flex, Buddyress et WordPress &#8211; Interfacer BuddyPress et Google Map API sous Flex"},"content":{"rendered":"<p>\t<!-- Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex --><br \/>\n\t<!--  Google, Flex, Buddyress, WordPress, actionscript, PHP, MySQL --><\/p>\n<p>\tIl s&#8217;agit de cartographier les membres d&#8217;un r\u00e9seau social g\u00e9r\u00e9 sous BuddyPress \u00e0 l&#8217;aide de Flex et de la Google Map API. Voil\u00e0 enfin une affaire s\u00e9rieuse dont il va \u00eatre question&#8230; En effet, tracer, localiser&#8230; (Espionner ?) Les personnes \u00e0 l\u2019aide de l \u2018API Google Maps ! Bref superposer la r\u00e9alit\u00e9 virtuelle \u00e0 une r\u00e9alit\u00e9 physique (forc\u00e9ment plus d\u00e9cevante !) <!--more--> <em>mais les faits sont t\u00eatus a dit L\u00e9nine<\/em>, on ne peut donc d&#8217;un mani\u00e8re ou d&#8217;une autre \u00e9chapper \u00e0 notre condition de bip\u00e9die et de s\u00e9dentarit\u00e9 quoiqu\u2019en dise les chantres de la mobilit\u00e9. Comme la ch\u00e8vre, on laisse toujours des petites crottes derri\u00e8re soi fussent-elles num\u00e9riques !<\/p>\n<p>\t<b>Dans cet article, on va donc voir comment se servir de l&#8217;API Google Maps, l&#8217;interfacer avec une application Flex puis creuser le filon afin de trouver une piste pour brancher le tout sur un r\u00e9seau social g\u00e9r\u00e9 sous BuddyPress en s\u2019appuyant sur le champs <code>base<\/code> du profil de l\u2019utilisateur.<\/b><\/p>\n<p>\t<i>NDLR : Un propos qui n\u2019engage que son auteur, la s\u00e9dentarit\u00e9 n\u2019est-t-elle \u00e0 l\u2019origine de la culture (cf les biblioth\u00e8ques) alors que la mobilit\u00e9 physique et moderne (je ne parle pas de l\u2019errance tsigane ou des bushmen, je pense plut\u00f4t aux migrants chinois de WebDocumenaire de Samuel Bollendorff Cf <a href=\"http:\/\/www.lemonde.fr\/asie-pacifique\/visuel\/2008\/11\/17\/voyage-au-bout-du-charbon_1118477_3216.html\" target=\"_blank\">http:\/\/www.lemonde.fr\/asie-pacifique\/visuel\/2008\/11\/17\/voyage-au-bout-du-charbon_1118477_3216.html<\/a> ou au monde des excit\u00e9s de la mobilit\u00e9, d\u00e9crit par <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Pico_Iyer\" target=\"_blank\">Pico Iyer<\/a> dans The Global Soul: Jet Lag, Shopping Malls, and the Search for Home, qui date un peu d\u00e9sormais). Cette mobilit\u00e9, c&#8217;est bien la barbarie de l\u2019instant pr\u00e9sent :):)<\/i><\/p>\n<h2>Pr\u00e9parer son plan google&#8230;.<\/h2>\n<h4>Obtenir une API KEY pour Google Maps<\/h4>\n<p>\tVous devez vous rendre sur l&#8217;url principal de l&#8217;API Google <code><a href=\"http:\/\/code.google.com\/intl\/fr\/apis\/maps\/\" target=\"_blank\">http:\/\/code.google.com\/intl\/fr\/apis\/maps\/<\/a><\/code>. Il vous suffit de donner d&#8217;ennregistrer un nom de domaine pour obtenir une cl\u00e9 pur faire fonctionner l&#8217;API google sur le site de votre choix. Dans notre exemple, voici la cl\u00e9 <code>ABQIAAAAbr0JY20cqFgvd3EtzjX8xRTp0ByTiBsAuE4XVoEALBVYr6OMDRQpc_PC6mtqjHFWwOLDbePFpwWjAg<\/code> pour <code>API key for<br \/>\n\themedia.net subscribed at info@hecube.net<\/code><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_2.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_3.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<blockquote><p>\n\tThank You for Signing Up for a Google Maps API Key!<\/p>\n<p>\tYour key is:<\/p>\n<p>\tABQIAAAAbr0JY20cqFgvd3EtzjX8xRTp0ByTiBsAuE4XVoEALBVYr6OMDRQpc<br \/>\n\t_PC6mtqjHFWwOLDbePFpwWjAg<\/p>\n<p>\tThis key is good for all URLs consisting of this registered domain (and directory if applicable):<\/p>\n<p>\thttp:\/\/hemedia.net\/\n\t<\/p><\/blockquote>\n<p>\t<em>La cl\u00e9 API a \u00e9t\u00e9 &#8220;scind\u00e9&#8221; afin de pouvoir tenir dans notre article.<\/em><\/p>\n<h4>T\u00e9l\u00e9charger le fichier <code>map_flex_1_16.swc<\/code><\/h4>\n<p>\tIl faut t\u00e9l\u00e9charger le &#8220;couteau suisse&#8221; donn\u00e9e par google pour int\u00e9grer l&#8217;API Google Map dans Flex. <code><a href=\"http:\/\/maps.googleapis.com\/maps\/flash\/release\/sdk.zip\" target=\"_blank\">http:\/\/maps.googleapis.com\/maps\/flash\/release\/sdk.zip<\/a><\/code><br \/>\n\t<b>Ce fichier va permettre de faire appel au sein de Flex  aux propri\u00e9t\u00e9s de l&#8217;API Google<\/b><\/p>\n<h4>Conna\u00eetre les coordonn\u00e9es g\u00e9ographiques  d&#8217;un lieu (latitude et longitude)<\/h4>\n<p>\tAvant d&#8217;interfacer notre application Flex avec la BDD de donn\u00e9es. Celle-ci doit contenir les coordonn\u00e9es g\u00e9ographiques (latitude et longitude) d&#8217;un lieu mais il faut pouvoir d\u00e9terminer ces coordonn\u00e9es.<\/p>\n<p>\t<b>Le code source du fichier pour obtenir les coordonn\u00e9es g\u00e9ographiques d&#8217;un lieu <code>google_api_coord_hecube.html<\/code>. On a plac\u00e9 quelques remarques en commentaires dans le code pour comprendre un peu mieux les \u00e9l\u00e9ments importants du code.<\/b><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_1.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<pre lang=\"html\" escaped=\"true\">\r\n\t\t&lt;!DOCTYPE html PUBLIC &quot;-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN&quot; &quot;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-strict.dtd&quot;&gt;\r\n\t\t&lt;html xmlns=&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;&gt;\r\n\t\t&lt;head&gt;\r\n\t\t\t&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text\/html; charset=UTF-8&quot;\/&gt;\r\n\t\t\t&lt;title&gt;Hecube.net _ Google Map - Trouver les coordonn&eacute;es g&eacute;ographiques (latitude et longitude) d&#x27;un lieu&lt;\/title&gt;\r\n\t\t\t&lt;!-- La Google Maps API Key vient dans la balise script --&gt;\r\n\t\t\t&lt;script src=&quot;http:\/\/maps.google.com\/maps?file=api&amp;amp;v=2.x&amp;amp;key=ABQIAAAAbr0JY20cqFgvd3EtzjX8xRRi_j0U6kJrkFvY4-OX2XYmEAa76BQRTZkoVHkXJUpOizoXkhUFxW1L6Q&quot; type=&quot;text\/javascript&quot;&gt;&lt;\/script&gt;\r\n\t\t\t&lt;script type=&quot;text\/javascript&quot;&gt;\r\n\t\t\t\/\/&lt;![CDATA[\r\n\r\n\t\t\tvar map = null;\r\n\t\t\tvar geocoder = null;\r\n\r\n\t\t\tfunction showAddress(address) {\r\n\t\t\t\tif (geocoder) {\r\n\t\t\t\t\tgeocoder.getLatLng( \r\n\t\t\t\t\t\taddress, \r\n\t\t\t\t\t\tfunction(point) {\r\n\t\t\t\t\t\t\tif (!point) { alert(address + &quot; not found&quot;); } \r\n\t\t\t\t\t\t\telse { \r\n\t\t\t\t\t\t\t\t\/* La valeur setCenter est apparament comprise entre 1 -&gt; 23, ils&#x27;agit du zoom sur la carte *\/\r\n\t\t\t\t\t\t\t\tmap.setCenter(point, 16);\r\n\t\t\t\t\t\t\t\tmap.addControl(new GLargeMapControl());\r\n\t\t\t\t\t\t\t\tmap.addControl(new GMapTypeControl());\r\n\t\t\t\t\t\t\t\t\/* G_HYBRID_MAP =&gt; photo ou G_HYBRID_TYPE =&gt; carte *\/\r\n\t\t\t\t\t\t\t\tmap.setMapType( G_HYBRID_MAP );  \r\n\t\t\t\t\t\t\t\tmap.addControl(new GScaleControl());\r\n\t\t\t\t\t\t\t\tmap.addControl(new GOverviewMapControl());\r\n\t\t\t\t\t\t\t\tmap.enableDoubleClickZoom();\r\n\t\t\t\t\t\t\t\tdocument.getElementById(&quot;latLng&quot;).innerHTML=&quot;&lt;p&gt;Latitude and Longitude: &lt;font color=&quot;red&quot;&gt;&quot; + point + &quot;&lt;\/font&gt;&lt;\/p&gt;&quot;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction load() {\r\n\t\t\t\t\/* Lieu charg&eacute; par d&eacute;faut lors du chargement de la page *\/\r\n\t\t\t\tvar address=&quot;Paris&quot;\r\n\t\t\t\tif (GBrowserIsCompatible()) {\r\n\t\t\t\t\tmap = new GMap2(document.getElementById(&quot;map&quot;));\r\n\t\t\t\t\tgeocoder = new GClientGeocoder();\r\n\t\t\t\t\tshowAddress(address);\r\n\t\t\t\t\tdocument.getElementById(&quot;address&quot;).value=address\r\n\r\n\t\t\t\t\t\/\/ Trigger for moveend event\r\n\t\t\t\t\tGEvent.addListener(\r\n\t\t\t\t\t\tmap, &#x27;moveend&#x27;, \r\n\t\t\t\t\t\tfunction() {\r\n\t\t\t\t\t\t\t\/\/ Display current map center\r\n\t\t\t\t\t\t\tdocument.getElementById(&quot;latLng&quot;).innerHTML=&quot;&lt;p&gt;Latitude and Longitude: &lt;font color=&quot;red&quot;&gt;&quot; + map.getCenter() + &quot;&lt;\/font&gt;&lt;\/p&gt;&quot;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t) \r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t\/\/]]&gt;\r\n\t\t\t&lt;\/script&gt;\r\n\t\t&lt;\/head&gt;\r\n\r\n\t\t&lt;body onload=&quot;load()&quot; onunload=&quot;GUnload()&quot;&gt;\r\n\r\n\t\t\t&lt;form action=&quot;#&quot; onsubmit=&quot;showAddress(this.address.value); return false&quot;&gt;\r\n\t\t\t\t&lt;p&gt;Pour trouver les coordonn&eacute;es g&eacute;ographiques (latitude et longitude) d&#x27;un lieu, il vous suffit de taper le nom du lieu (ville, village...etc.)&lt;\/p&gt;\r\n\t\t\t\t\t\t&lt;p&gt;&lt;i&gt;Il peut exister quelques &quot;rat&eacute;s&quot;, en effet certains lieux peuvent ne pas &ecirc;tre localis&eacute;s !&lt;\/i&gt;&lt;\/p&gt; \r\n\t\t\t\t&lt;p&gt;\r\n\t\t\t\t\t&lt;input type=&quot;text&quot; size=&quot;60&quot; name=&quot;address&quot; id=&quot;address&quot; value=&quot;&quot; \/&gt;\r\n\t\t\t\t\t&lt;input type=&quot;submit&quot; value=&quot;Go!&quot; \/&gt;\r\n\r\n\t\t\t\t&lt;\/p&gt;\r\n\t\t\t\t&lt;div id=&quot;latLng&quot;&gt;&lt;\/div&gt;\r\n\t\t\t\t&lt;div id=&quot;map&quot; style=&quot;width: 800px; height: 480px&quot;&gt;&lt;\/div&gt;\r\n\t\t\t&lt;\/form&gt;\r\n\r\n\r\n\t\t&lt;\/body&gt;\r\n\t\t&lt;\/html&gt;\r\n\t<\/pre>\n<h4>La structure la BDD qui va stocker les coordonn\u00e9es g\u00e9ographiques<\/h4>\n<p>\tLe fichier &#8220;dump&#8221; <code>.sql<\/code> pour la creation de la BDD qui va \u00eatre interfac\u00e9 avec notre application Flex via un fichier de g\u00e9n\u00e9ration de xml \u00e9crit en <code>php<\/code><\/p>\n<p>\t<b>Nous travaillons en local \u00e0 l&#8217;aide d&#8217;un serveur MAMP. Pour installer un environnement similaire reportez-vous aux articles suivants de ce blog :<\/b><\/p>\n<p>\tPour comprendre comment installer cet environnement PHP-MySQL, reportez-vous aux articles de ce blog\u00a0:<\/p>\n<ul>\n<li><a href=\"http:\/\/social.hecube.net\/bruno\/2009\/04\/04\/installer-un-environnement-php-mysql-sur-mac\/\">Installer un environnement php-mysql sur Mac<\/a><\/li>\n<li><a href=\"http:\/\/social.hecube.net\/blog\/2009\/03\/14\/installer-facilement-php-mysql-sur-un-pc-avec-easyphp\/\">Installer un environnement php-mysql sous Windows<\/a><\/li>\n<\/ul>\n<p>\t<b>La structure de la BDD <code>flex_mapgoogle<\/code> dans laquelle a \u00e9t\u00e9 ins\u00e9r\u00e9 quelques lieux.<\/b><\/p>\n<pre lang=\"sql\">\r\n\t-- \r\n\t-- Base de donn\u00e9es: flex_mapgoogle\r\n\t-- \r\n\r\n\tDROP TABLE IF EXISTS maps;\r\n\tCREATE TABLE IF NOT EXISTS maps (\r\n\t id int(11) NOT NULL auto_increment,\r\n\t lat float,\r\n\t lon float,\r\n\t name varchar(255),\r\n\t PRIMARY KEY  (id),\r\n\t FULLTEXT KEY searching (name)\r\n\t) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;\r\n\r\n\t-- \r\n\t-- Contenu de la table movies_list_index\r\n\t-- \r\n\r\n\r\n\t-- Ville\t\t\t\t\t\tLatitude\t\tLongitude\r\n\r\n\t--\tMendoza\t\t\t\t\t\t-32.890183\t\t-68.8440498\r\n\t--\tAlice Springs\t\t\t\t\t-23.700358\t\t133.880889\r\n\t--\tPau\t\t\t\t\t\t43.297521\t\t-0.3743618\r\n\t--\tPlock\t\t\t\t\t\t52.5463446\t\t19.7065364\r\n\t--\tMedina\t\t\t\t\t\t24.460899\t\t39.62019\r\n\t--\tCourbevoie\t\t\t\t\t48.8968248\t\t2.2565154\r\n\t--\tParis\t\t\t\t\t\t48.8566667\t\t2.3509871\r\n\r\n\tINSERT INTO maps VALUES (0, -32.8902, -68.844, 'Mendoza');\r\n\tINSERT INTO maps VALUES (0, -23.7004, 133.881, 'Alice Springs');\r\n\tINSERT INTO maps VALUES (0, 43.2975, -0.374362, 'Pau');\r\n\tINSERT INTO maps VALUES (0, 52.5463, 19.7065, 'Plock');\r\n\tINSERT INTO maps VALUES (0, 24.4609, 39.6202, 'Medina');\r\n\tINSERT INTO maps VALUES (0, 48.8968, 2.25652, 'Courbevoie');\r\n\tINSERT INTO maps VALUES (0, 48.8567, 2.35099, 'Paris');\r\n\t<\/pre>\n<h4>Le fichier <code>map.php<\/code>, source de donn\u00e9es pour Flex<\/h4>\n<p>\t<b>Le fichier <code>map.php<\/code> qui g\u00e9n\u00e8re le fichier xml des lieux et de leurs coordonn\u00e9es g\u00e9ographiques qui constituera la source de donn\u00e9es pour notre application Flex. NB: l&#8217;indication du port n&#8217;est pas indispensable, cela fonctionne aussi avec <code>mysql_connect(\"localhost\", \"root\", \"root\");<\/code><\/b><\/p>\n<pre lang=\"php\">\r\n\r\n\t\tmysql_connect(\"localhost:3306\", \"root\", \"root\");\r\n\t\tmysql_select_db(\"flex_mapgoogle\");\r\n\r\n\t\t$result = mysql_query(\"select * from maps\");\r\n\r\n\t\techo ('');\r\n\r\n\t\t\/* la boucle des localisations *\/\r\n\t\twhile($row = mysql_fetch_assoc($result))\r\n\t\t{\r\n\r\n\t\t\techo ('');\r\n\t\t\techo (''. $row[\"lat\"].'');\r\n\t\t\techo (''. $row[\"lon\"].'');\r\n\t\t\techo (''. $row[\"name\"].'');\r\n\t\t\techo ('');\r\n\t\t}\r\n\t\techo ('');\r\n\r\n\t<\/pre>\n<p>\t<i>NB : Attention les fichiers <code>square_hecube.png<\/code> et <code>map.php<\/code> doivent \u00eatre attach\u00e9s \u00e0 votre projet sous Flex.<\/i><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"265\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_17.jpg\"><\/p>\n<p>\t<b>CONCLUSION : Nous avons tout l&#8217;environnement susceptible de faire fonctionner notre application Flex et surtout de l&#8217;interfacer \u00e0 la BDD <code>flex_mapgoogle<\/code><\/b><\/p>\n<h2>L&#8217;application Flex<\/h2>\n<p>\tPour comprendre de manire plus d\u00e9taill\u00e9e comment adosser un projet Flex \u00e0 une serveur local sous MAMP, reportez-vous \u00e0 cet article de ce blog\u00a0:<\/p>\n<ul>\n<li><a href=\"http:\/\/social.hecube.net\/blog\/2009\/05\/05\/flex-amfphp-connecter-un-service-amfphp-a-une-application-flex\/\">Flex &#8211; AMFPHP &#8211; connecter un service amfphp \u00e0 une application Flex<\/a><\/li>\n<\/ul>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_4.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_5.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_6.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_7.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_8.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_9.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<b>Une fois le <code>map_flex_1_16.swc<\/code> ins\u00e9r\u00e9 dans le projet Flex, on acc\u00e9de \u00e0 tous les <code>class<\/code> de l&#8217;application Google Maps<\/b><br \/>\n\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_10.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_11.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<b>Sans la cl\u00e9 API dument ins\u00e9r\u00e9e dans le <code>map_google.mxml<\/code><\/b><br \/>\n\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_12.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<b>Avec la cl\u00e9 API dument ins\u00e9r\u00e9e dans le <code>map_google.mxml<\/code><\/b><br \/>\n\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_13.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\tLe code source du fichier <code>map_google.mxml<\/code><\/p>\n<pre lang=\"xml\" escaped=\"true\">\r\n\r\n\t\t&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n\t\t&lt;mx:Application xmlns:mx=&quot;http:\/\/www.adobe.com\/2006\/mxml&quot; layout=&quot;absolute&quot; \r\n\t\t\txmlns:maps=&quot;com.google.maps.*&quot;&gt;\r\n\r\n\t\t\t&lt;mx:Script&gt;\r\n\t\t\t\t&lt;![CDATA[\r\n\t\t\t\t\timport com.google.maps.overlays.MarkerOptions;\r\n\t\t\t\t\timport com.google.maps.overlays.Marker;\r\n\t\t\t\t\timport mx.collections.ArrayCollection;\r\n\t\t\t\t\timport mx.rpc.events.ResultEvent;\r\n\t\t\t\t\timport com.google.maps.controls.MapTypeControl;\r\n\t\t\t\t\timport com.google.maps.controls.ZoomControl;\r\n\t\t\t\t\timport com.google.maps.MapType;\r\n\t\t\t\t\timport com.google.maps.LatLng;\r\n\t\t\t\t\timport com.google.maps.MapEvent;\r\n\r\n\r\n\t\t\t\t\t\/* On choisit le carr\u00e9 de hecube comme ic\u00f4ne \u00e0 placer sur les points de la carte *\/\r\n\t\t\t\t\t[Embed(source=&quot;square_hecube.png&quot;)]\r\n\t\t\t\t\tprivate var ak:Class;\r\n\r\n\t\t\t\t\tprivate function onReady(e:MapEvent):void\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/* On choisit Paris comme centre de notre carte *\/\r\n\r\n\t\t\t\t\t\t\/* \r\n\r\n\t\t\t\t\t\t--\tParis\t\t\t\t\t\t\r\n\t\t\t\t\t\tLatitude 48.8566667\r\n\t\t\t\t\t\tLongitude 2.3509871\r\n\t\t\t\t\t\t*\/\r\n\t\t\t\t\t\tmap.setCenter(new LatLng(48.8566667, 2.3509871), 10, MapType.PHYSICAL_MAP_TYPE);\r\n\t\t\t\t\t\tmap.addControl(new ZoomControl());\r\n\t\t\t\t\t\tmap.addControl(new MapTypeControl());\r\n\t\t\t\t\t\tservice.send();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tprivate function onResult(e:ResultEvent):void\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar list:ArrayCollection = e.result.map.loc;\r\n\t\t\t\t\t\tfor(var i:int=0; i&lt;list.length; i++)\r\n\t\t\t\t\t\t{\r\n\r\n\r\n\t\t\t\t\t\t\tvar bm:Bitmap = new ak() as Bitmap;\r\n\t\t\t\t\t\t\tvar m:Marker = new Marker(new LatLng(list[i].lat, list[i].lon),\r\n\t\t\t\t\t\t\tnew MarkerOptions({tooltip:list[i].name, icon:bm, iconOffset:new Point(-59, -31)}));\r\n\t\t\t\t\t\t\tmap.addOverlay(m);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]]&gt;\r\n\t\t\t&lt;\/mx:Script&gt;\r\n\r\n\t\t\t&lt;!-- l'API Key vient ci-dessous --&gt;\r\n\r\n\t\t\t&lt;mx:HTTPService id=&quot;service&quot; url=&quot;map.php&quot; result=&quot;onResult(event)&quot;\/&gt;\r\n\t\t\t&lt;maps:Map width=&quot;100%&quot; height=&quot;100%&quot; id=&quot;map&quot; mapevent_mapready=&quot;onReady(event)&quot;\r\n\t\t\t\tkey=&quot;ABQIAAAAbr0JY20cqFgvd3EtzjX8xRTp0ByTiBsAuE4XVoEALBVYr6OMDRQpc_PC6mtqjHFWwOLDbePFpwWjAg&quot;\/&gt;\r\n\r\n\t\t&lt;\/mx:Application&gt;\r\n\r\n\r\n\t<\/pre>\n<p>\t<b>L&#8217;ic\u00f4ne pour mat\u00e9rialiser un point sur une carte Google<\/b><br \/>\n\tFaute d&#8217;imagination, on choisit le carr\u00e9 symbole de Hecube :):) <\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/square_hecube.png\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"99\" height=\"44\" \/><\/p>\n<p>\t<b>L&#8217;exportation de notre projet Flex <code>map_google.mxml<\/code> avec sa vue par d\u00e9faut et la cl\u00e9 API<\/b><br \/>\n\tGrosso modo, l\u2019essentiel de cette vue est d\u00e9termin\u00e9e par la ligne suivante <code>map.setCenter(new LatLng(48.8566667, 2.3509871), 10, MapType.PHYSICAL_MAP_TYPE);<\/code><\/p>\n<p>\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_14.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<p>\t<b>A l&#8217;aide de la fonction de zoom arri\u00e8re, on d\u00e9couvre les autres lieux<\/b><br \/>\n\tLes deux premiers insertions <code>INSERT INTO maps VALUES (0, -32.8902, -68.844, 'Mendoza');<\/code>, <code>INSERT INTO maps VALUES (0, -23.7004, 133.881, 'Alice Springs');<\/code> snt respectivement en Argentine et en Australie.<br \/>\n\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_15.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<h2>Dans BuddyPress<\/h2>\n<p>\t<b>On va montrer o\u00f9 se trouve pour le moment les principaux \u00e9l\u00e9ments pour interfacer cette application Flex ci-dessus et notre reseau sous BuddyPress.<\/b><\/p>\n<h4>Qui joue en <code>base<\/code> ? Le num\u00e9ro 14 <\/h4>\n<p>\tLe <code>field_id<\/code> num\u00e9ro <code>14<\/code> correspond au champs <code>base<\/code>. Ce dernier est d\u00e9fini dans le profile de chaque utilisateur.<\/p>\n<p>\t<b>Le champs base dans a processus d&#8217;inscription de BuddyPress<\/b><br \/>\n\tIl n&#8217;y a aucune routine qui permette par d\u00e9faut de s&#8217;assurer d&#8217;une part que ce champ soit rempli et d\u2019autre part compl\u00e9ter de mani\u00e8re ad\u00e9quate pour l\u2019utilisation de Google Map sans parler m\u00eame de l\u2019obtention des valeurs longitude et latitude.<\/p>\n<pre lang=\"html\" escaped=\"true\">\r\n\t\t&lt;div class=&quot;signup-field&quot;&gt;\r\n\t&lt;label for=&quot;field_14&quot; class=&quot;signup-label&quot;&gt;* Localisation g\u00e9ographique:&lt;\/label&gt;\r\n\t&lt;input type=&quot;text&quot; value=&quot;Paris&quot; id=&quot;field_14&quot; name=&quot;field_14&quot;\/&gt;\r\n\t&lt;span class=&quot;signup-description&quot;&gt;   &lt;\/span&gt;\r\n\t&lt;\/div&gt;\r\n\t<\/pre>\n<h4>Trouver la table contenant ce champs et la requ\u00eate SQL ad\u00e9quate<\/h4>\n<p>\tVoici la structure de la table qui renseigne le champs <code>base<\/code> ainsi que la requ\u00eate qui permet de s\u00e9lectionner les valeurs remplies par les inscrits \u00e0 votre r\u00e9seau. <\/p>\n<pre lang=\"sql\">\r\n\tCREATE TABLE IF NOT EXISTS wp_bp_xprofile_data (\r\n\t  id bigint(20) unsigned NOT NULL auto_increment,\r\n\t  field_id bigint(20) unsigned NOT NULL,\r\n\t  user_id bigint(20) unsigned NOT NULL,\r\n\t  value longtext NOT NULL,\r\n\t  last_updated datetime NOT NULL,\r\n\t  PRIMARY KEY  (id),\r\n\t  KEY field_id (field_id),\r\n\t  KEY user_id (user_id)\r\n\t) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;\r\n\t<\/pre>\n<p>\t<b>La requ\u00eate SQL qui permet de sortir les localisations des membres du r\u00e9seau<\/b><br \/>\n\tPour des raisons de commodit\u00e9 et \u00e9viter de publier l&#8217;int\u00e9gralit\u00e9 des localisation des membres, nous avons r\u00e9duit \u00e0 20, le r\u00e9sultat de la requ\u00eate. Bien sur pour g\u00e9n\u00e9rer une liste int\u00e9grale, il ne reste qu&#8217;\u00e0 retirer la partie <code>LIMIT 0,20<\/code> <\/p>\n<pre lang=\"sql\">\r\n\tSELECT value FROM wp_bp_xprofile_data WHERE field_id='14' LIMIT 0,20;\r\n\t<\/pre>\n<p>\t<b>Le r\u00e9sultat de la requ\u00eate ci-dessus donne les \u00e9l\u00e9ments saisis dans le champs <code>base<\/code><\/b><br \/>\n\tOn reconnait le caract\u00e8re prot\u00e9iformes des donn\u00e9es saisies, il faut donc indiquer quelques recommandation aux futurs membres du r\u00e9seau sur comment remplir ce champs <code>base<\/code>. C&#8217;est indispensable pour effectuer la jointure avec les coordonn\u00e9es g\u00e9ographiques d&#8217;un lieu (latitude et longitude).<\/p>\n<p>\t\t<b>Quelques r\u00e8gles pratiques de saisie du lieu de localisation<\/b><\/p>\n<ol>\n<li>Bannir les doubles localisations <code>Bourgogne\/Ile de France<\/code>, Google Map va vous envoyer \u00e0 &#8220;P\u00e9taouchnock&#8221;<\/li>\n<li>Bannir les localisations avec un d\u00e9but de code postale ou d\u2019arrondissement <code>paris 20<\/code>, Google Map va vous envoyer \u00e0 &#8220;P\u00e9taouchnock&#8221;. Le format normalis\u00e9 <code>Saint Egr\u00e8ve (38)<\/code> convient par contre \u00e0 Google<\/li>\n<li>Google Map reconnait n\u00e9anmoins certaines abr\u00e9viations type BCN (pour Barcelone) ou BXL (pour Bruxelles) ou BLN  (pour Berlin). Ce qui est d&#8217;un usage courant sur le courrier postal.<\/li>\n<\/ol>\n<p>\t\t<b>Une fois ces r\u00e8gles de saisie \u00e9tablies, vous pourrez alors \u00e9tendre les champs de saisie du champs <code>base<\/code> avec deux champs suppl\u00e9mentaires <code>lat<\/code> pour Latitude et <code>long<\/code> pour Longitude afin que l&#8217;utilisateur saisisse lui-m\u00eame sa localisation et les coordonn\u00e9es g\u00e9ographiques qui lui sont attach\u00e9es<\/b><\/p>\n<p>\t\tSans nous \u00e9tendre sur le comment, l&#8217;id\u00e9e est de modifier le processus d&#8217;inscription de sorte que lors de l&#8217;inscription \u00e0 BP, l&#8217;enregistrement se fasse simultan\u00e9ment dans cette table <code>wp_bp_xprofile_data<\/code> et <code>maps<\/code>. la table pourrait \u00eatre ajout\u00e9e \u00e0 la BDD de votre r\u00e9seau social sous BP, il n&#8217;est pas n\u00e9cessaire de cr\u00e9er une BDD ad hoc. Il faut aussi \u00e9viter de \u00ab tordre \u00bb une table existante de BP en rajoutant les champs <code>lat<\/code> et <code>long<\/code> directement dans la table <code>wp_bp_xprofile_data<\/code>.<\/p>\n<p>\t\t<b><code>P\u00e9taouchnock<\/code> inconnu au bataillon<\/b><br \/>\n\t\t<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_16.jpg\" alt=\"Google, Flex, Buddyress et WordPress - Interfacer BuddyPress et Google Map API sous Flex\" width=\"500\" height=\"265\" \/><\/p>\n<pre lang=\"sql\">\r\n\r\n\t\t+-------------------------+\r\n\t\t| value                   |\r\n\t\t+-------------------------+\r\n\t\t| new-york                |\r\n\t\t| Paris                   |\r\n\t\t| Paris                   |\r\n\t\t| paris 20                |\r\n\t\t| Paris                   |\r\n\t\t| Saint Egr\u00e8ve (38)       |\r\n\t\t| Montpellier             |\r\n\t\t| Paris                   |\r\n\t\t| Bourgogne\/Ile de France |\r\n\t\t| london                  |\r\n\t\t| Olympus                 |\r\n\t\t| casablanca              |\r\n\t\t| rouen                   |\r\n\t\t| Gonesse (95)            |\r\n\t\t| Madrid                  |\r\n\t\t| Paris                   |\r\n\t\t| BCN\t\t  \t  |\r\n\t\t| Toulouse                |\r\n\t\t| Toulouse                |\r\n\t\t| Kaboul\t\t  |\r\n\t\t+-------------------------+\r\n\t<\/pre>\n<p>\t<b>CONCLUSION : L\u00e0 encore, voici les pi\u00e8ces disparates mais indispensables pour monter la cartographie dans Google API via Flex des membres de votre r\u00e9seau social. On a d\u00e9fini rapidement les principes fonctionnels et les bonnes directions dans lesquelles chercher. Dans un futur article, on verra comment mettre en musique l\u2019ensemble et le mettre de mani\u00e8re op\u00e9rationnelle en ligne au sein de BuddyPress sous forme de plugin, qui sait ? <\/b><\/p>\n<h2>Pour aller plus loin<\/h2>\n<ul>\n<li>Installing and Using Google Maps in Flex<br \/>\n\t<a href=\"http:\/\/scriptplayground.com\/tutorials\/as\/Installing-and-Using-Google-Maps-in-Flex\/\" target=\"_blank\">http:\/\/scriptplayground.com\/tutorials\/as\/Installing-and-Using-Google-Maps-in-Flex\/<\/a><\/li>\n<li>Google Maps API for Flash &#8211; FlexBuilder Tutorial<br \/>\n\t<a href=\"http:\/\/code.google.com\/intl\/fr\/apis\/maps\/documentation\/flash\/tutorial-flexbuilder.html\" target=\"_blank\">http:\/\/code.google.com\/intl\/fr\/apis\/maps\/documentation\/flash\/tutorial-flexbuilder.html<\/a><\/li>\n<li>Google Maps API for Flash Developer Guide<br \/>\n\t<a href=\"http:\/\/code.google.com\/intl\/fr\/apis\/maps\/documentation\/flash\/intro.html\" target=\"_blank\">http:\/\/code.google.com\/intl\/fr\/apis\/maps\/documentation\/flash\/intro.html<\/a><\/li>\n<li>Coding with MXML and ActionScript<br \/>\n\t<a href=\"http:\/\/www.adobe.com\/devnet\/flex\/quickstart\/coding_with_mxml_and_actionscript\/\" target=\"_blank\">http:\/\/www.adobe.com\/devnet\/flex\/quickstart\/coding_with_mxml_and_actionscript\/<\/a><\/li>\n<li>Google Maps API for Flash Basics<br \/>\n\t<a href=\"http:\/\/code.google.com\/intl\/fr\/apis\/maps\/documentation\/flash\/basics.html\" target=\"_blank\">http:\/\/code.google.com\/intl\/fr\/apis\/maps\/documentation\/flash\/basics.html<\/a><\/li>\n<li>Des exemples donn\u00e9es par Big G (gmaps-samples-flash)<br \/>\n\t<a href=\"http:\/\/code.google.com\/p\/gmaps-samples-flash\/source\/browse\/trunk\/samplecode\/\" target=\"_blank\">http:\/\/code.google.com\/p\/gmaps-samples-flash\/source\/browse\/trunk\/samplecode\/<\/a><\/li>\n<li>Using PHP\/MySQL with the Google Maps API for Flash<br \/>\n\t<a href=\"http:\/\/code.google.com\/intl\/fr\/apis\/maps\/articles\/phpsqlflex.html#outputxml\" target=\"_blank\">http:\/\/code.google.com\/intl\/fr\/apis\/maps\/articles\/phpsqlflex.html#outputxml<\/a><\/li>\n<\/ul>\n<p>\t<i>A cet \u00e9gard, un autre titre de PI, &quot;The Lady and the Monk&quot;, un des titres de Pico Iyer, qui semble faire clairement r\u00e9f\u00e9rence pour des raisons de succ\u00e8s \u00e9ditorial au titre  &quot;The monk and the philosopher&quot; de Matthieu Ricard (fils) et Jean-Fran\u00e7ois Revel (p\u00e8re), vous savez sur l&#8217;air de la chanson &quot;Father and son&quot; !<\/i><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il s&#8217;agit de cartographier les membres d&#8217;un r\u00e9seau social g\u00e9r\u00e9 sous BuddyPress \u00e0 l&#8217;aide de Flex et de la Google Map API. Voil\u00e0 enfin une&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2009\/09\/google-flex-buddyress-et-wordpress-interfacer-buddypress-et-google-map-api-sous-flex\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">Google, Flex, Buddyress et WordPress &#8211; Interfacer BuddyPress et Google Map API sous Flex<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":9514,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"Interfacer BuddyPress et Google Map API sous Flex pour cartographier membres r\u00e9seau social. Utilisez outils sp\u00e9cifiques pour localiser utilisateurs.","bf_ai_og_title":"Interfacer BuddyPress et Google Map API","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3441,3444,3446,3447,3449,3452],"tags":[166,241,2228,2214,2211,20,2223],"class_list":["post-1026","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-analytics","category-programming-databases","category-social-media-community","category-technology-trends","category-tutorials-how-to","category-wordpress-cms","tag-actionscript","tag-buddyress","tag-flex","tag-google","tag-mysql","tag-php","tag-wordpress"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-gy","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/09\/googlemap_buddypress_flex_b_2_g_bf.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/1026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=1026"}],"version-history":[{"count":1,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/1026\/revisions"}],"predecessor-version":[{"id":9515,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/1026\/revisions\/9515"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/9514"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=1026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=1026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=1026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}