{"id":228911,"date":"2022-11-06T16:56:00","date_gmt":"2022-11-06T13:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228911"},"modified":"2022-11-09T04:45:50","modified_gmt":"2022-11-09T01:45:50","slug":"latitud-och-longitud-i-php-naagra-anvaendbara-metoder","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/latitud-och-longitud-i-php-naagra-anvaendbara-metoder\/","title":{"rendered":"Latitud och longitud i PHP: N\u00e5gra anv\u00e4ndbara metoder"},"content":{"rendered":"\n<p>I tidigare inl\u00e4gg skrev jag en bra bit om att arbeta med <a href=\"https:\/\/tommcfarlin.com\/tag\/google-maps-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Google Maps API<\/a>. \u00c4rligt talat har jag inte jobbat med det sedan det inl\u00e4gget.<\/p>\n<p>Jag har dock varit tvungen att arbeta med latitud och longitud i PHP, och det finns n\u00e5gra metoder som jag har b\u00f6rjat anv\u00e4nda som jag tror kan tj\u00e4na oss v\u00e4l n\u00e4r vi arbetar med koordinater eller flyttalsv\u00e4rden i allm\u00e4nhet.<\/p>\n<p>I f\u00f6ljande kodbit kommer jag att bryta ner tillv\u00e4gag\u00e5ngss\u00e4ttet jag har anv\u00e4nt och varf\u00f6r jag har gjort det. Men jag vill vara tydlig med att om du l\u00e4ser detta i f\u00f6rh\u00e5llande till Google Maps API, s\u00e5 finns det inte mycket jag kan erbjuda i v\u00e4gen f\u00f6r hur detta fungerar och den nuvarande versionen av deras API.<\/p>\n<h2>Latitud och Longitud i PHP<\/h2>\n<p>N\u00e4rhelst du arbetar med latitud och longitud i PHP, arbetar du med flyttalsv\u00e4rden, eller hur? S\u00e5 du vill aldrig analysera dem till n\u00e5got mindre \u00e4n s\u00e5; annars f\u00f6rlorar du data och du kommer inte att kunna hitta vad det \u00e4n \u00e4r du f\u00f6rs\u00f6ker hitta.<\/p>\n<p>S\u00e5 f\u00f6r all del, l\u00e5t oss anta att du har information som kommer in i servern och att du m\u00e5ste arbeta med den med PHP.<\/p>\n<p>De tv\u00e5 saker du vill komma ih\u00e5g \u00e4r:<\/p>\n<ol>\n<li>sanera inkommande data,<\/li>\n<li>se till att det omvandlas till ett flyttal.<\/li>\n<\/ol>\n<p>Detta kan g\u00f6ras genom att anv\u00e4nda PHP:s <a href=\"https:\/\/php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filter_var<\/a> och <a href=\"https:\/\/php.net\/manual\/en\/function.floatval.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">floatval<\/a> -funktioner som jag kommer att prata om ett \u00f6gonblick. Observera dock att om resultatet av <strong>floatval<\/strong> inte returnerar en flyttal, m\u00e5ste du ha ett graci\u00f6st s\u00e4tt att hantera det.<\/p>\n<p>Enligt manualen kan <strong>floatval<\/strong> returnera f\u00f6ljande:<\/p>\n<blockquote>\n<p>Flytv\u00e4rdet f\u00f6r den givna variabeln. Tomma arrayer returnerar 0, icke-tomma arrayer returnerar 1. Str\u00e4ngar kommer med st\u00f6rsta sannolikhet att returnera 0 \u00e4ven om detta beror p\u00e5 tecknen l\u00e4ngst till v\u00e4nster i str\u00e4ngen. De vanliga reglerna f\u00f6r flytgjutning g\u00e4ller.<\/p>\n<\/blockquote>\n<p>Vi ska titta p\u00e5 hur vi hanterar detta mer graci\u00f6st senare i inl\u00e4gget.<\/p>\n<h3>Analysera inkommande latitud och longitud<\/h3>\n<p>L\u00e5t oss anta att de inkommande v\u00e4rdena finns i PHP:s <a href=\"https:\/\/php.net\/manual\/en\/reserved.variables.request.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_REQUEST-<\/a> samling (som h\u00e4nvisar till HTTP-f\u00f6rfr\u00e5gningar som kommer in till servern) inskrivna som <strong>acme-demo-latitude<\/strong> och <strong>acme-demo-longitude.\u00a0<\/strong><\/p>\n<p>Vi kan h\u00e4mta dem <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-00-retrieving-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = $_REQUEST['acme-demo-latitude'];\n$longitude = $_REQUEST['acme-demo-longitude'];<\/code><\/pre>\n<p>Men det h\u00e4r r\u00e4cker inte. F\u00f6rst m\u00e5ste vi anv\u00e4nda <strong>filter_var<\/strong> f\u00f6r att se till att data \u00e4r sanerade och f\u00f6ljer <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-01-filtering-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">flyttalsschemat<\/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>D\u00e4refter tycker jag att det \u00e4r anv\u00e4ndbart att anv\u00e4nda <strong>floatval<\/strong> f\u00f6r att analysera resultatet som ett flyttalv\u00e4rde. Detta g\u00f6r att f\u00f6ljande kodblock ser <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\">ut s\u00e5 h\u00e4r<\/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>D\u00e4refter \u00e4r du fri att anv\u00e4nda den. Men kom ih\u00e5g att vi fortfarande m\u00e5ste se till att v\u00e4rdena som returneras \u00e4r flyttalsv\u00e4rden.<\/p>\n<h3>Validera data<\/h3>\n<p>Nu n\u00e4r vi har informationen m\u00e5ste vi se till att det ser bra ut. Och om det inte g\u00f6r det m\u00e5ste vi hantera det p\u00e5 r\u00e4tt s\u00e4tt. Om det inte \u00e4r det kan vi helt enkelt:<\/p>\n<ol>\n<li>returnera false fr\u00e5n funktionen som den inneh\u00e5ller,<\/li>\n<li>kasta ett undantag och l\u00e5t den som ringer hantera det som den vill.<\/li>\n<\/ol>\n<p>Vart och ett av dessa exempel kan se <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-03-validating-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/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>Men i slut\u00e4ndan \u00e4r beslutet ditt om hur du ska hantera v\u00e4rdena n\u00e4r de inte \u00e4r i r\u00e4tt format n\u00e4r du analyserar dem.<\/p>\n<h2>\u00c4r dessa b\u00e4sta praxis?<\/h2>\n<p>F\u00f6r att vara \u00e4rlig tvivlar jag p\u00e5 det. Jag vet att det h\u00e4r \u00e4r de saker jag har anv\u00e4nt och som jag har funnit anv\u00e4ndbara. Det ger ocks\u00e5 ett defensivt, motst\u00e5ndskraftigt s\u00e4tt att se till att dina v\u00e4rderingar \u00e4r korrekta.<\/p>\n<p>Men om det finns b\u00e4ttre s\u00e4tt att g\u00f6ra detta s\u00e5 \u00e4r jag \u00f6ppen f\u00f6r att h\u00f6ra dem i kommentarerna.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jag har arbetat med latitud och longitud i PHP. Det finns metoder som jag tror tj\u00e4nar oss v\u00e4l n\u00e4r vi arbetar med eller flyttalsv\u00e4rden.<\/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":[848,922,868],"tags":[1173],"class_list":["post-228911","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-oevrig","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228911"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228911\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/166466"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}