{"id":229610,"date":"2022-11-06T16:43:00","date_gmt":"2022-11-06T13:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229610"},"modified":"2022-11-09T08:41:17","modified_gmt":"2022-11-09T05:41:17","slug":"leveys-ja-pituusaste-php-ssae-muutamia-hyoedyllisiae-kaeytaentoejae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/leveys-ja-pituusaste-php-ssae-muutamia-hyoedyllisiae-kaeytaentoejae\/","title":{"rendered":"Leveys- ja pituusaste PHP:ss\u00e4: muutamia hy\u00f6dyllisi\u00e4 k\u00e4yt\u00e4nt\u00f6j\u00e4"},"content":{"rendered":"\n<p>Aiemmissa viesteiss\u00e4 kirjoitin hyv\u00e4n osan <a href=\"https:\/\/tommcfarlin.com\/tag\/google-maps-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Google Mapsin sovellusliittym\u00e4n<\/a> kanssa ty\u00f6skentelyst\u00e4. Todellisuudessa en ole ty\u00f6skennellyt sen kanssa sen viestin j\u00e4lkeen.<\/p>\n<p>Olen kuitenkin joutunut ty\u00f6skentelem\u00e4\u00e4n leveys- ja pituusasteiden kanssa PHP:ss\u00e4, ja joitain k\u00e4yt\u00e4nt\u00f6j\u00e4, joita olen alkanut k\u00e4ytt\u00e4\u00e4, uskon voivan palvella meit\u00e4 hyvin ty\u00f6skennelt\u00e4ess\u00e4 koordinaattien tai liukulukujen kanssa yleens\u00e4.<\/p>\n<p>Seuraavassa koodiosassa kerron k\u00e4ytt\u00e4m\u00e4ni l\u00e4hestymistavan ja miksi olen tehnyt niin. Haluan kuitenkin tehd\u00e4 selv\u00e4ksi, ett\u00e4 jos luet t\u00e4t\u00e4 suhteessa Google Mapsin sovellusliittym\u00e4\u00e4n, en voi tarjota paljoakaan sen toimivuudelle ja heid\u00e4n API:n nykyiselle versiolle.<\/p>\n<h2>Leveys- ja pituusaste PHP:ss\u00e4<\/h2>\n<p>Aina kun ty\u00f6skentelet leveys- ja pituusasteiden kanssa PHP:ss\u00e4, k\u00e4yt\u00e4t liukulukuarvoja, eik\u00f6 niin? Joten et koskaan halua j\u00e4sent\u00e4\u00e4 niit\u00e4 millek\u00e4\u00e4n pienemm\u00e4ksi; Muuten menet\u00e4t tietoja etk\u00e4 pysty paikantamaan mit\u00e4 tahansa, mit\u00e4 yrit\u00e4t paikantaa.<\/p>\n<p>Oletetaan siis, ett\u00e4 palvelimelle tulee tietoa ja sinun on ty\u00f6skennelt\u00e4v\u00e4 sen kanssa PHP:n avulla.<\/p>\n<p>Kaksi asiaa, jotka haluat muistaa, ovat:<\/p>\n<ol>\n<li>puhdistaa saapuvat tiedot,<\/li>\n<li>varmista, ett\u00e4 se on muunnettu liukulukuksi.<\/li>\n<\/ol>\n<p>T\u00e4m\u00e4 voidaan tehd\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4 PHP:n <a href=\"https:\/\/php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filter_var-<\/a> ja <a href=\"https:\/\/php.net\/manual\/en\/function.floatval.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">floatval<\/a> -funktioita, joista puhun hetken. Huomaa kuitenkin, ett\u00e4 jos <strong>floatvalin<\/strong> tulos ei palauta liukulukua, sinulla on oltava siro tapa k\u00e4sitell\u00e4 se.<\/p>\n<p>K\u00e4sikirjan mukaan <strong>floatval<\/strong> voi palauttaa seuraavat:<\/p>\n<blockquote>\n<p>Annetun muuttujan kelluva arvo. Tyhj\u00e4t taulukot palauttavat 0, ei-tyhj\u00e4t taulukot 1. Strings palauttavat todenn\u00e4k\u00f6isesti 0, vaikka t\u00e4m\u00e4 riippuu merkkijonon vasemmanpuoleisista merkeist\u00e4. Float-heiton yleiset s\u00e4\u00e4nn\u00f6t ovat voimassa.<\/p>\n<\/blockquote>\n<p>Katsotaan kuinka k\u00e4sitell\u00e4 t\u00e4t\u00e4 sulavammin my\u00f6hemmin postauksessa.<\/p>\n<h3>J\u00e4sent\u00e4\u00e4 saapuvan leveysasteen ja pituusasteen<\/h3>\n<p>Oletetaan, ett\u00e4 saapuvat arvot ovat PHP:n <a href=\"https:\/\/php.net\/manual\/en\/reserved.variables.request.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_REQUEST<\/a> &#8211; kokoelmassa (jotka viittaavat palvelimelle tuleviin HTTP-pyynt\u00f6ihin) n\u00e4pp\u00e4imill\u00e4 <strong>acme-demo-latitude<\/strong> ja <strong>acme-demo-longitude.\u00a0<\/strong><\/p>\n<p>Voimme hakea ne <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-00-retrieving-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4in<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = $_REQUEST['acme-demo-latitude'];\n$longitude = $_REQUEST['acme-demo-longitude'];<\/code><\/pre>\n<p>Mutta t\u00e4m\u00e4 ei riit\u00e4. Ensin meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 <strong>filter_var<\/strong> -toimintoa varmistaaksemme, ett\u00e4 tiedot on puhdistettu ja ett\u00e4 ne noudattavat <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-01-filtering-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">liukulukukaaviota<\/a> :<\/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>Seuraavaksi minusta on hy\u00f6dyllist\u00e4 k\u00e4ytt\u00e4\u00e4 <strong>floatvalia<\/strong> tuloksen j\u00e4sent\u00e4miseen liukulukuarvona. T\u00e4m\u00e4 j\u00e4tt\u00e4\u00e4 seuraavan koodilohkon n\u00e4ytt\u00e4m\u00e4\u00e4n <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\">t\u00e4lt\u00e4<\/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>Sen j\u00e4lkeen voit vapaasti k\u00e4ytt\u00e4\u00e4 sit\u00e4. Muista kuitenkin, ett\u00e4 meid\u00e4n on silti varmistettava, ett\u00e4 palautetut arvot ovat liukulukuarvoja.<\/p>\n<h3>Tietojen vahvistaminen<\/h3>\n<p>Nyt kun meill\u00e4 on tiedot, meid\u00e4n on varmistettava, ett\u00e4 se n\u00e4ytt\u00e4\u00e4 hyv\u00e4lt\u00e4. Ja jos ei, meid\u00e4n on k\u00e4sitelt\u00e4v\u00e4 se asianmukaisesti. Jos ei, voimme yksinkertaisesti:<\/p>\n<ol>\n<li>palauttaa false funktiosta, josta se sis\u00e4ltyy,<\/li>\n<li>tehd\u00e4 poikkeus ja antaa soittajan k\u00e4sitell\u00e4 sit\u00e4 parhaaksi katsomallaan tavalla.<\/li>\n<\/ol>\n<p>Jokainen n\u00e4ist\u00e4 esimerkeist\u00e4 voi n\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-03-validating-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/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>Viime k\u00e4dess\u00e4 p\u00e4\u00e4t\u00e4t kuitenkin, kuinka arvot k\u00e4sitell\u00e4\u00e4n, kun ne eiv\u00e4t ole oikeassa muodossa j\u00e4sennytty\u00e4si ne.<\/p>\n<h2>Ovatko n\u00e4m\u00e4 parhaita k\u00e4yt\u00e4nt\u00f6j\u00e4?<\/h2>\n<p>Rehellisesti sanottuna ep\u00e4ilen. Tied\u00e4n, ett\u00e4 n\u00e4m\u00e4 ovat asioita, joita olen k\u00e4ytt\u00e4nyt ja joista olen l\u00f6yt\u00e4nyt hy\u00f6ty\u00e4. Se tarjoaa my\u00f6s puolustavan, joustavan tavan varmistaa, ett\u00e4 arvosi ovat oikeat.<\/p>\n<p>Mutta jos on olemassa parempia tapoja tehd\u00e4 t\u00e4m\u00e4, olen avoin kuulemaan ne kommenteissa.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Olen ty\u00f6skennellyt leveys- ja pituusasteiden kanssa PHP:ss\u00e4. On k\u00e4yt\u00e4nt\u00f6j\u00e4, jotka mielest\u00e4ni palvelevat meit\u00e4 hyvin, kun ty\u00f6skentelemme liukulukujen kanssa.<\/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":[917,843,864],"tags":[1166],"class_list":["post-229610","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-muut","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229610"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229610\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166466"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}