{"id":229499,"date":"2022-11-06T16:48:00","date_gmt":"2022-11-06T13:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229499"},"modified":"2022-11-09T08:11:53","modified_gmt":"2022-11-09T05:11:53","slug":"latitude-et-longitude-en-php-quelques-pratiques-utiles","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/latitude-et-longitude-en-php-quelques-pratiques-utiles\/","title":{"rendered":"Latitude et longitude en PHP : quelques pratiques utiles"},"content":{"rendered":"\n<p>Dans les articles pr\u00e9c\u00e9dents, j&rsquo;ai beaucoup \u00e9crit sur l&rsquo;utilisation de l&rsquo; <a href=\"https:\/\/tommcfarlin.com\/tag\/google-maps-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API Google Maps<\/a>. Honn\u00eatement, je n&rsquo;ai pas travaill\u00e9 avec depuis ce poste.<\/p>\n<p>Cependant, j&rsquo;ai d\u00fb travailler avec la latitude et la longitude en PHP, et j&rsquo;ai commenc\u00e9 \u00e0 utiliser certaines pratiques qui, je pense, peuvent bien nous servir lorsque nous travaillons avec des coordonn\u00e9es ou des valeurs \u00e0 virgule flottante, en g\u00e9n\u00e9ral.<\/p>\n<p>Dans le morceau de code suivant, je d\u00e9composerai l&rsquo;approche que j&rsquo;ai utilis\u00e9e et pourquoi je l&rsquo;ai fait. Mais je tiens \u00e0 pr\u00e9ciser que si vous lisez ceci en relation avec l&rsquo;API Google Maps, je ne peux pas vous proposer grand-chose sur la mani\u00e8re dont cela fonctionne et la version actuelle de leur API.<\/p>\n<h2>Latitude et longitude en PHP<\/h2>\n<p>Chaque fois que vous travaillez avec la latitude et la longitude en PHP, vous travaillez avec des valeurs \u00e0 virgule flottante, n&rsquo;est-ce pas\u00a0? Donc, vous ne voulez jamais les analyser en rien de moins que cela; sinon, vous perdez des donn\u00e9es et vous ne pourrez pas localiser ce que vous essayez de localiser.<\/p>\n<p>Donc, \u00e0 toutes fins utiles, supposons que vous ayez des informations entrant dans le serveur et que vous deviez les utiliser en utilisant PHP.<\/p>\n<p>Les deux choses dont vous voulez vous souvenir sont :<\/p>\n<ol>\n<li>assainir les donn\u00e9es entrantes,<\/li>\n<li>assurez-vous qu&rsquo;il est converti en une valeur \u00e0 virgule flottante.<\/li>\n<\/ol>\n<p>Cela peut \u00eatre fait en utilisant les fonctions PHP <a href=\"https:\/\/php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filter_var<\/a> et <a href=\"https:\/\/php.net\/manual\/en\/function.floatval.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">floatval<\/a> dont je parlerai dans un instant. Notez cependant que si le r\u00e9sultat de <strong>floatval<\/strong> ne renvoie pas de virgule flottante, vous devez disposer d&rsquo;une mani\u00e8re \u00e9l\u00e9gante de g\u00e9rer cela.<\/p>\n<p>Selon le manuel, <strong>floatval<\/strong> peut renvoyer ce qui suit\u00a0:<\/p>\n<blockquote>\n<p>La valeur flottante de la variable donn\u00e9e. Les tableaux vides renvoient 0, les tableaux non vides renvoient 1. Les cha\u00eenes renverront tr\u00e8s probablement 0, bien que cela d\u00e9pende des caract\u00e8res les plus \u00e0 gauche de la cha\u00eene. Les r\u00e8gles communes du lancer au flotteur s&rsquo;appliquent.<\/p>\n<\/blockquote>\n<p>Nous verrons comment g\u00e9rer cela plus gracieusement plus tard dans le post.<\/p>\n<h3>Analyse de la latitude et de la longitude entrantes<\/h3>\n<p>Supposons que les valeurs entrantes se trouvent dans la collection <a href=\"https:\/\/php.net\/manual\/en\/reserved.variables.request.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_REQUEST de<\/a> PHP (qui fait r\u00e9f\u00e9rence aux requ\u00eates HTTP entrant dans le serveur) sous la forme <strong>acme-demo-latitude<\/strong> et <strong>acme-demo-longitude.\u00a0<\/strong><\/p>\n<p>On peut les r\u00e9cup\u00e9rer <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-00-retrieving-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = $_REQUEST['acme-demo-latitude'];\n$longitude = $_REQUEST['acme-demo-longitude'];<\/code><\/pre>\n<p>Mais cela ne suffit pas. Tout d&rsquo;abord, nous devons utiliser <strong>filter_var<\/strong> pour nous assurer que les donn\u00e9es sont nettoy\u00e9es et suivent <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-01-filtering-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le sch\u00e9ma \u00e0 virgule flottante<\/a>\u00a0:<\/p>\n<pre><code>&lt;?php\n\n$latitude  = filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT\n);\n\n$longitude = filter_var(\n    $_REQUEST['acme-demo-longitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT\n);<\/code><\/pre>\n<p>Ensuite, je trouve utile d&rsquo;utiliser <strong>floatval<\/strong> pour analyser le r\u00e9sultat en tant que valeur \u00e0 virgule flottante. Cela laisse le bloc de code suivant ressemblant <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-02-parse-the-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = floatval(\n  filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT) );\n\n$longitude = floatval(\n  filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT) );<\/code><\/pre>\n<p>Apr\u00e8s quoi, vous \u00eates libre de l&rsquo;utiliser. Mais rappelez-vous, nous devons toujours nous assurer que les valeurs renvoy\u00e9es sont des valeurs \u00e0 virgule flottante.<\/p>\n<h3>Validation des donn\u00e9es<\/h3>\n<p>Maintenant que nous avons l&rsquo;information, nous devons nous assurer qu&rsquo;elle semble bonne. Et si ce n&rsquo;est pas le cas, nous devons le g\u00e9rer de mani\u00e8re appropri\u00e9e. Si ce n&rsquo;est pas le cas, nous pouvons simplement\u00a0:<\/p>\n<ol>\n<li>renvoie false de la fonction dont il est contenu,<\/li>\n<li>l\u00e8ve une exception et permet \u00e0 l&rsquo;appelant de la g\u00e9rer comme bon lui semble.<\/li>\n<\/ol>\n<p>Chacun de ces exemples peut ressembler <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-03-validating-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Return false...\nif (! (is_float( $latitude) &amp;&amp; is_float( $longitude) )) {\n  return false;\n}\n\n\/\/ Or throw an exception...\nif (! (is_float( $latitude) &amp;&amp; is_float( $longitude) )) {\n  throw new Exception('Latitude and longitude are not valid floating point values.');\n}\n<\/code><\/pre>\n<p>En fin de compte, cependant, la d\u00e9cision vous appartient sur la fa\u00e7on de g\u00e9rer les valeurs lorsqu&rsquo;elles ne sont pas dans le bon format une fois les avoir analys\u00e9es.<\/p>\n<h2>S&rsquo;agit-il de meilleures pratiques\u00a0?<\/h2>\n<p>Pour \u00eatre honn\u00eate, j&rsquo;en doute. Je sais que ce sont les choses que j&rsquo;ai utilis\u00e9es et que j&rsquo;ai trouv\u00e9es utiles. Il fournit \u00e9galement un moyen d\u00e9fensif et r\u00e9silient de vous assurer que vos valeurs sont correctes.<\/p>\n<p>Mais s&rsquo;il existe de meilleures fa\u00e7ons de le faire, je suis pr\u00eat \u00e0 les entendre dans les commentaires.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai travaill\u00e9 avec la latitude et la longitude en PHP. Je pense que certaines pratiques nous servent bien lorsque nous travaillons avec ou avec des valeurs \u00e0 virgule flottante.<\/p>\n","protected":false},"author":1,"featured_media":166466,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,841,862],"tags":[1167],"class_list":["post-229499","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229499"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229499\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/166466"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}