<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HavlenaBlog &#187; PHP 5</title>
	<atom:link href="http://www.havlena.net/blog/category/php-5/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.havlena.net/blog</link>
	<description>... o všem a všelijak</description>
	<lastBuildDate>Wed, 26 May 2010 00:18:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>cs</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hledání vzdálenosti GPS souřadnic v MySQL a PHP</title>
		<link>http://www.havlena.net/blog/hledani-vzdalenosti-gps-souradnic-v-mysql-a-php/</link>
		<comments>http://www.havlena.net/blog/hledani-vzdalenosti-gps-souradnic-v-mysql-a-php/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 14:01:09 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[Tipy a triky]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=860</guid>
		<description><![CDATA[Máte v DB uložené objekty s GPS souřadnicemi (pokud ne, GPS souřadnice můžete získat jednoduše) a chcete mezi němi vyhledávat na základě vzájemných vzdáleností? Tak právě vám by se mohla hodit následující MySQL procedura, kterou jsem upravil/opravil a připravil na použití s metrickým systémem.

Tak jdeme na to&#8230;
Ukázka bude pracovat s nádledující tabulkou:
CREATE &#160;TABLE IF NOT [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-917" title="GPS souřadnice - ukázka na Google Maps" src="http://www.havlena.net/blog/wp-content/2009/11/gps-coordinates.jpg" alt="GPS souřadnice - ukázka na Google Maps" width="199" height="164" />Máte v DB uložené <strong>objekty s GPS souřadnicemi</strong> (pokud ne, <a href="http://www.havlena.net/blog/php-a-google-maps-jak-ziskat-gps-souradnice-pro-adresu/">GPS souřadnice můžete získat jednoduše</a>) a chcete mezi němi <strong>vyhledávat na základě vzájemných vzdáleností</strong>? Tak právě vám by se mohla hodit následující <strong>MySQL procedura</strong>, kterou jsem upravil/opravil a připravil na použití s metrickým systémem.</p>
<p><span id="more-860"></span></p>
<h3>Tak jdeme na to&#8230;</h3>
<p>Ukázka bude pracovat s nádledující tabulkou:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> &nbsp;<span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">EXISTS</span> <span style="color: #ff0000;">`buildings`</span> <span style="color: #66cc66;">&#40;</span><br />
<span style="color: #ff0000;">`building_id`</span> INT <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`building_street`</span> VARCHAR<span style="color: #66cc66;">&#40;</span>200<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`building_street_nr`</span> VARCHAR<span style="color: #66cc66;">&#40;</span>20<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`building_city`</span> VARCHAR<span style="color: #66cc66;">&#40;</span>200<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`building_latitude`</span> VARCHAR<span style="color: #66cc66;">&#40;</span>30<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`building_longitude`</span> VARCHAR<span style="color: #66cc66;">&#40;</span>30<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span><br />
<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`building_id`</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span></div></div>
<p>Vytvoříme si proceduru s názvem <code class="codecolorer text default"><span class="text">gpsdistance</span></code> a dvěma vstupními čísly <code class="codecolorer text default"><span class="text">mybuilding_id</span></code> a <code class="codecolorer text default"><span class="text">mydistance</span></code>.</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> PROCEDURE <span style="color: #ff0000;">`gpsdistance`</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">IN</span> mybuilding_id int<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">IN</span> mydistance int<span style="color: #66cc66;">&#41;</span></div></div>
<p><code class="codecolorer text default"><span class="text">mybuilding_id</span></code> představuje ID číslo výchozí budovy, v jejímž okolí budeme hlegpdat další budovy, které se k ní nacházejí ve vzdálenosti předávané v druhém parametru <code class="codecolorer text default"><span class="text">mydistance</span></code> (v kilometrech!).</p>
<p>Následně si deklarujeme tyto vnitřní proměnné:</p>
<ul>
<li><code class="codecolorer text default"><span class="text">mylon</span></code> &#8211; zeměpisná délka naší výchozí budovy (longitude)</li>
<li><code class="codecolorer text default"><span class="text">mylat</span></code> &#8211; zeměpisná šířka naší výchozí budovy (latitude)</li>
<li><code class="codecolorer text default"><span class="text">lon1</span></code> &#8211; 1. hranice zeměpisné délky</li>
<li><code class="codecolorer text default"><span class="text">lon2</span></code> &#8211; 2. hranice zeměpisné délky</li>
<li><code class="codecolorer text default"><span class="text">lat1</span></code> &#8211; 1. hranice zeměpisné šířky</li>
<li><code class="codecolorer text default"><span class="text">lat2</span></code> &#8211; 2. hranice zeměpisné šířky</li>
</ul>
<p>Další příkaz načítá aktuální hodnoty naší výchozí budovy do proměnných <code class="codecolorer text default"><span class="text">mylon</span></code> a <code class="codecolorer text default"><span class="text">mylat</span></code>:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> building_latitude<span style="color: #66cc66;">,</span> building_longitude <span style="color: #993333; font-weight: bold;">INTO</span> mylat<span style="color: #66cc66;">,</span> mylon <span style="color: #993333; font-weight: bold;">FROM</span> buildings <span style="color: #993333; font-weight: bold;">WHERE</span> building_id <span style="color: #66cc66;">=</span> mybuilding_id;</div></div>
<p>A následuje vypočítání hraničních souřadnic na základě vzdálenosti zadané v kilometrech ve vstupní hodnotě <code class="codecolorer text default"><span class="text">mydistance</span></code>. Číslo 111 představuje kolik kilometrů měří přibližně jeden stupeň (1°) zeměpisné šířky (pro míle je to 69). Význam vzorců si můžete dohledat v originálním anglickém dokumentu (odkaz níže).</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SET</span> lon1 <span style="color: #66cc66;">=</span> mylon<span style="color: #66cc66;">-</span>mydistance<span style="color: #66cc66;">/</span>abs<span style="color: #66cc66;">&#40;</span>cos<span style="color: #66cc66;">&#40;</span>radians<span style="color: #66cc66;">&#40;</span>mylat<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">SET</span> lon2 <span style="color: #66cc66;">=</span> mylon<span style="color: #66cc66;">+</span>mydistance<span style="color: #66cc66;">/</span>abs<span style="color: #66cc66;">&#40;</span>cos<span style="color: #66cc66;">&#40;</span>radians<span style="color: #66cc66;">&#40;</span>mylat<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">SET</span> lat1 <span style="color: #66cc66;">=</span> mylat<span style="color: #66cc66;">-</span><span style="color: #66cc66;">&#40;</span>mydistance<span style="color: #66cc66;">/</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">SET</span> lat2 <span style="color: #66cc66;">=</span> mylat<span style="color: #66cc66;">+</span><span style="color: #66cc66;">&#40;</span>mydistance<span style="color: #66cc66;">/</span>111<span style="color: #66cc66;">&#41;</span>;</div></div>
<p>A motorem celého příkladu je hlavní select vyhledávající budovy, které se nacházejí od výchozí budovy ve vzdálenosti do hodnoty <code class="codecolorer text default"><span class="text">mydistance</span></code>. Tento skript navíc vrací sloupec s názvem <code class="codecolorer text default"><span class="text">distance</span></code>, který představuje skutečnou vzdálenost (v kilometrech) od výchozí budovy. Číslo 6372.795 je poloměr země (pro míle by to bylo 3956). Pokud vás zajímá podrobnější význam použitých vzorců, opět vás odkáži na originální dokument (odkaz níže).</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> buildings<span style="color: #66cc66;">.*,</span> 6372<span style="color: #66cc66;">.</span>795 <span style="color: #66cc66;">*</span> 2 <span style="color: #66cc66;">*</span> ASIN<span style="color: #66cc66;">&#40;</span>SQRT<span style="color: #66cc66;">&#40;</span>POWER<span style="color: #66cc66;">&#40;</span>SIN<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>mylat<span style="color: #66cc66;">-</span>ABS<span style="color: #66cc66;">&#40;</span>building_latitude<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180<span style="color: #66cc66;">/</span>2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> 2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span><br />
COS<span style="color: #66cc66;">&#40;</span>mylat <span style="color: #66cc66;">*</span> pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> COS<span style="color: #66cc66;">&#40;</span>ABS<span style="color: #66cc66;">&#40;</span>building_latitude<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> POWER<span style="color: #66cc66;">&#40;</span>SIN<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>mylon <span style="color: #66cc66;">-</span> building_longitude<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180 <span style="color: #66cc66;">/</span> 2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> 2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> distance<br />
<span style="color: #993333; font-weight: bold;">FROM</span> buildings <span style="color: #993333; font-weight: bold;">WHERE</span> building_latitude <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AND</span> building_longitude <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AND</span><br />
building_longitude <span style="color: #993333; font-weight: bold;">BETWEEN</span> lon1 <span style="color: #993333; font-weight: bold;">AND</span> lon2 <span style="color: #993333; font-weight: bold;">AND</span> building_latitude <span style="color: #993333; font-weight: bold;">BETWEEN</span> lat1 <span style="color: #993333; font-weight: bold;">AND</span> lat2 <span style="color: #993333; font-weight: bold;">HAVING</span> distance <span style="color: #66cc66;">&lt;</span> mydistance <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> distance <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;">50</span>;</div></div>
<h3>Hotová MySQL procedura</h3>
<p>Příkaz <code class="codecolorer text default"><span class="text">DELIMITER //</span></code> nastavuje oddělovač SQL příkazů na dvě lomítka. Děje se tak proto, že implicitně je jako oddělovač nastaven středník. Středníky se však objevují uvnitř procedury, což by způsobilo chybu při vytváření procedury. Proto pozor, pokud budete vytvářet proceduru v phpMyAdmin (budete si muset pod polem pro SQL příkaz nastavit jiný oddělovač než právě defaultní středník).</p>
<pre>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">DELIMITER <span style="color: #66cc66;">//</span><br />
<span style="color: #993333; font-weight: bold;">CREATE</span> PROCEDURE <span style="color: #ff0000;">`gpsdistance`</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">IN</span> mybuilding_id int<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">IN</span> mydistance int<span style="color: #66cc66;">&#41;</span><br />
BEGIN<br />
declare mylon double;<br />
declare mylat double;<br />
declare lon1 float;<br />
declare lon2 float;<br />
declare lat1 float;<br />
declare lat2 float;<br />
<br />
<span style="color: #993333; font-weight: bold;">SELECT</span> building_latitude<span style="color: #66cc66;">,</span> building_longitude <span style="color: #993333; font-weight: bold;">INTO</span> mylat<span style="color: #66cc66;">,</span> mylon <span style="color: #993333; font-weight: bold;">FROM</span> buildings <span style="color: #993333; font-weight: bold;">WHERE</span> building_id <span style="color: #66cc66;">=</span> mybuilding_id;<br />
<br />
<span style="color: #993333; font-weight: bold;">SET</span> lon1 <span style="color: #66cc66;">=</span> mylon<span style="color: #66cc66;">-</span>mydistance<span style="color: #66cc66;">/</span>abs<span style="color: #66cc66;">&#40;</span>cos<span style="color: #66cc66;">&#40;</span>radians<span style="color: #66cc66;">&#40;</span>mylat<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">SET</span> lon2 <span style="color: #66cc66;">=</span> mylon<span style="color: #66cc66;">+</span>mydistance<span style="color: #66cc66;">/</span>abs<span style="color: #66cc66;">&#40;</span>cos<span style="color: #66cc66;">&#40;</span>radians<span style="color: #66cc66;">&#40;</span>mylat<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">SET</span> lat1 <span style="color: #66cc66;">=</span> mylat<span style="color: #66cc66;">-</span><span style="color: #66cc66;">&#40;</span>mydistance<span style="color: #66cc66;">/</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">SET</span> lat2 <span style="color: #66cc66;">=</span> mylat<span style="color: #66cc66;">+</span><span style="color: #66cc66;">&#40;</span>mydistance<span style="color: #66cc66;">/</span>111<span style="color: #66cc66;">&#41;</span>;<br />
<br />
<span style="color: #993333; font-weight: bold;">SELECT</span> buildings<span style="color: #66cc66;">.*,</span> 6372<span style="color: #66cc66;">.</span>795 <span style="color: #66cc66;">*</span> 2 <span style="color: #66cc66;">*</span> ASIN<span style="color: #66cc66;">&#40;</span>SQRT<span style="color: #66cc66;">&#40;</span>POWER<span style="color: #66cc66;">&#40;</span>SIN<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>mylat<span style="color: #66cc66;">-</span>ABS<span style="color: #66cc66;">&#40;</span>building_latitude<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180<span style="color: #66cc66;">/</span>2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> 2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span><br />
COS<span style="color: #66cc66;">&#40;</span>mylat <span style="color: #66cc66;">*</span> pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> COS<span style="color: #66cc66;">&#40;</span>ABS<span style="color: #66cc66;">&#40;</span>building_latitude<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> POWER<span style="color: #66cc66;">&#40;</span>SIN<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>mylon <span style="color: #66cc66;">-</span> building_longitude<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> pi<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>180 <span style="color: #66cc66;">/</span> 2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> 2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> distance<br />
<span style="color: #993333; font-weight: bold;">FROM</span> buildings <span style="color: #993333; font-weight: bold;">WHERE</span> building_latitude <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AND</span> building_longitude <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AND</span><br />
building_longitude <span style="color: #993333; font-weight: bold;">BETWEEN</span> lon1 <span style="color: #993333; font-weight: bold;">AND</span> lon2 <span style="color: #993333; font-weight: bold;">AND</span> building_latitude <span style="color: #993333; font-weight: bold;">BETWEEN</span> lat1 <span style="color: #993333; font-weight: bold;">AND</span> lat2 <span style="color: #993333; font-weight: bold;">HAVING</span> distance <span style="color: #66cc66;">&lt;</span> mydistance <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> distance <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;">50</span>;<br />
<br />
END<span style="color: #66cc66;">//</span></div></td></tr></tbody></table></div>
</pre>
<h3>Volání procedury v PHP</h3>
<p><strong>Velmi důležité</strong> je vědět, že volat procedury můžete <strong>pouze přes vrstvu MySQLi</strong> (která je již objektově orientovaná). Samotná procedura se volá SQL příkazem <code class="codecolorer sql default"><span class="sql">call gpsdistance<span style="color: #66cc66;">&#40;</span>$mybuilding_id<span style="color: #66cc66;">,</span> $mydistance<span style="color: #66cc66;">&#41;</span></span></code>. Zde je krátká ukázka:</p>
<pre>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysqli_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'passwd'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Can't connect to MySQL Server. Errorcode: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">mysqli_connect_error</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">exit</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysqli_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;call gpsdistance(<span style="color: #006699; font-weight: bold;">$mybuilding_id</span>, 5)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysqli_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">...</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">mysqli_free_result</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">mysqli_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
</pre>
<p>A to je vše, snad vám článek byl k nečemu užitečný <img src='http://www.havlena.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Použitá literatura</h3>
<ul>
<li>RUBIN, Alexander. Geo/Spatial Search with MySQL. Scribd [online]. 2008 [cit. 2009-11-04]. Dostupný z WWW: &lt;<a href="http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL">http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL</a>&gt;.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/hledani-vzdalenosti-gps-souradnic-v-mysql-a-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP a Google Maps: Jak získat GPS souřadnice pro adresu</title>
		<link>http://www.havlena.net/blog/php-a-google-maps-jak-ziskat-gps-souradnice-pro-adresu/</link>
		<comments>http://www.havlena.net/blog/php-a-google-maps-jak-ziskat-gps-souradnice-pro-adresu/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 22:43:39 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=807</guid>
		<description><![CDATA[Článek ukazuje příklad kódu, který k adresám uloženým v databázi dohledá jejich GPS souřadnice. K tomuto účelu nám výborně poslouží Google Maps API a jeho Geocoding Service (Geocoding je proces převádění adres do zeměpisných souřadnic).
Upozorňuji, že využívat geocoding je povolené pouze v případě, že získané výsledky zobrazíte zpět na Google mapě.
Geocoding Service
Geocoding Service je služba, [...]]]></description>
			<content:encoded><![CDATA[<p>Článek ukazuje příklad kódu, který k <strong>adresám uloženým v databázi dohledá jejich GPS souřadnice</strong>. K tomuto účelu nám výborně poslouží <a href="http://code.google.com/apis/maps/">Google Maps API</a> a jeho <strong><a href="http://code.google.com/apis/maps/documentation/geocoding/">Geocoding Service</a></strong> (Geocoding je proces převádění adres do zeměpisných souřadnic).<span id="more-807"></span></p>
<p>Upozorňuji, že využívat geocoding je povolené pouze v případě, že získané výsledky zobrazíte zpět na Google mapě.</p>
<h3>Geocoding Service</h3>
<p>Geocoding Service je služba, které pošleme HTTP požadavek a ona nám vrátí (ve zvoleném formátu) příslušná zeměpisná data. Požadavek se zasílá na adresu <a href="http://maps.google.com/maps/geo?">http://maps.google.com/maps/geo?</a> s několika parametry. Nás zajímají pouze některé:</p>
<ul>
<li><code class="codecolorer text default"><span class="text">q</span></code> (povinný) &#8211; adresa, ke které chceme zjistit zeměpisné souřadnice</li>
<li><code class="codecolorer text default"><span class="text">key</span></code> (povinný) &#8211; váš API klíč, který vygenerujete speciálně pro vaší doménu na stránkách <a href="http://code.google.com/apis/maps/">Google Maps API</a></li>
<li><code class="codecolorer text default"><span class="text">sensor</span></code> (povinný) &#8211; nastavujeme na hodnotu <code class="codecolorer text default"><span class="text">true</span></code> nebo <code class="codecolorer text default"><span class="text">false</span></code> podle toho, zda byl požadavek zaslán ze zařízení se senzorem polohy</li>
<li><code class="codecolorer text default"><span class="text">output</span></code> (povinný) &#8211; formát výstupních dat (na výběr je <code class="codecolorer text default"><span class="text">xml</span></code>, <code class="codecolorer text default"><span class="text">kml</span></code>, <code class="codecolorer text default"><span class="text">csv</span></code> nebo <code class="codecolorer text default"><span class="text">json</span></code>)</li>
<li><code class="codecolorer text default"><span class="text">oe</span></code> (nepovinný) &#8211; kodování výstupních dat (doporučuji nastavit na <code class="codecolorer text default"><span class="text">utf8</span></code>)</li>
<li><a href="http://code.google.com/intl/cs-CZ/apis/maps/documentation/geocoding/#GeocodingRequests">&#8230;a další</a></li>
</ul>
<p>Vstupní data by měla být generována v <code class="codecolorer text default"><span class="text">utf-8</span></code>.</p>
<h4>Formát výstupních dat v CSV</h4>
<p>Výstupní data je možné si nechat zaslat v následujích formátech:</p>
<ul>
<li><code class="codecolorer text default"><span class="text">json</span></code> (defaultní)</li>
<li><code class="codecolorer text default"><span class="text">kml</span></code></li>
<li><code class="codecolorer text default"><span class="text">xml</span></code></li>
<li><code class="codecolorer text default"><span class="text">csv</span></code> &#8211; data jsou oddělená středníkem</li>
</ul>
<p>Pro náš případ se ideálně hodí CSV, protože vrací pouze čtyří údaje (narozdíl od ostatních formátu) oddělená středníkem:</p>
<ol>
<li><strong>HTTP stavový kód</strong>
<ul>
<li><code class="codecolorer text default"><span class="text">200</span></code><strong> </strong>- úspěšné</li>
<li><code class="codecolorer text default"><span class="text">500</span></code> &#8211; chyba serveru</li>
<li><code class="codecolorer text default"><span class="text">602</span></code> &#8211; neznámá adresa</li>
<li><code class="codecolorer text default"><span class="text">610</span></code> &#8211; špatný API klíč</li>
<li><code class="codecolorer text default"><span class="text">620</span></code> &#8211; příliš mnoho dotazů (&gt;5000 na den nebo příliš mnoho v krátkém obobí za sebou)</li>
<li>a další&#8230;</li>
</ul>
</li>
<li><strong>Přesnost zaměření</strong>
<ul>
<li><code class="codecolorer text default"><span class="text">0</span></code> &#8211; neznámá</li>
<li><code class="codecolorer text default"><span class="text">1</span></code> &#8211; na úrovni státu</li>
<li>&#8230;</li>
<li><code class="codecolorer text default"><span class="text">4</span></code> &#8211; na úrovni města (obce)</li>
<li><code class="codecolorer text default"><span class="text">5</span></code> &#8211; na úrovni PSČ</li>
<li><code class="codecolorer text default"><span class="text">6</span></code> &#8211; na úrovni ulice</li>
<li><code class="codecolorer text default"><span class="text">7</span></code> &#8211; na úrovni uzlu</li>
<li><code class="codecolorer text default"><span class="text">8</span></code> &#8211; na úrovni adresy</li>
<li><code class="codecolorer text default"><span class="text">9</span></code> &#8211; na úrovni konkrétní budovy</li>
</ul>
</li>
<li><strong>Zeměpisná šířka</strong> (latitude)</li>
<li><strong>Zeměpísná délka</strong> (longitude)</li>
</ol>
<p>Například:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">200,6,42.730070,-73.90570</div></div>
<h3>PHP: příklad získávání GPS souřadnic z CSV souboru</h3>
<p>Předpokládejme, že máme  v databázi uloženy adresy, ke kterým chceme dohledat GPS souřadnice.  Tabulka v databázi by mohla vypadat například takto:</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #990099; font-weight: bold;">CREATE</span>  <span style="color: #990099; font-weight: bold;">TABLE</span> <span style="color: #990099; font-weight: bold;">IF <span style="color: #CC0099; font-weight: bold;">NOT</span> EXISTS</span> <span style="color: #008000;">`buildings`</span> <span style="color: #FF00FF;">&#40;</span><br />
<span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>id`</span> <span style="color: #999900; font-weight: bold;">INT</span> <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #FF9900; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #000033;">,</span><br />
<span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>street`</span> <span style="color: #999900; font-weight: bold;">VARCHAR</span><span style="color: #FF00FF;">&#40;</span>200<span style="color: #FF00FF;">&#41;</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #000033;">,</span><br />
<span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>street<span style="color: #008080; font-weight: bold;">_</span>nr`</span> <span style="color: #999900; font-weight: bold;">VARCHAR</span><span style="color: #FF00FF;">&#40;</span>20<span style="color: #FF00FF;">&#41;</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #000033;">,</span><br />
<span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>city`</span> <span style="color: #999900; font-weight: bold;">VARCHAR</span><span style="color: #FF00FF;">&#40;</span>200<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099; font-weight: bold;">NOT</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #000033;">,</span><br />
<span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>latitude`</span> <span style="color: #999900; font-weight: bold;">VARCHAR</span><span style="color: #FF00FF;">&#40;</span>30<span style="color: #FF00FF;">&#41;</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #000033;">,</span><br />
<span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>longitude`</span> <span style="color: #999900; font-weight: bold;">VARCHAR</span><span style="color: #FF00FF;">&#40;</span>30<span style="color: #FF00FF;">&#41;</span> <span style="color: #9900FF; font-weight: bold;">NULL</span> <span style="color: #000033;">,</span><br />
<span style="color: #990099; font-weight: bold;">PRIMARY KEY</span> <span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">`building<span style="color: #008080; font-weight: bold;">_</span>id`</span><span style="color: #FF00FF;">&#41;</span> <span style="color: #FF00FF;">&#41;</span></div></div>
<p>Pak by PHP skript na doplnění GPS souřadnic mohl vypadat takto:</p>
<pre>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;localhost&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;user&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;passwd&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Could not connect: &quot;</span><span style="color: #339933;">.</span> <span style="color: #990000;">mysql_error</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;database&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Could select db: &quot;</span><span style="color: #339933;">.</span> <span style="color: #990000;">mysql_error</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// YOUR DOMAIN API KEY</span><br />
<span style="color: #000088;">$api_key</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;ABCDEFGHIJK&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;select * from buildings where building_latitude is null and building_longitude is null order by building_id&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">// SET ADDRESS</span><br />
&nbsp; <span style="color: #000088;">$address</span> <span style="color: #339933;">=</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;building_street&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;building_street_nr&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;building_city&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; Czech republic&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">// URL TO HTTP REQUEST</span><br />
&nbsp; <span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://maps.google.com/maps/geo?q=&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$address</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&amp;key=&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$api_key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&amp;sensor=false&amp;output=csv&amp;oe=utf8&quot;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">// WE GET FILE CONTENT</span><br />
&nbsp; <span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">// WE OBTAIN DATA FROM GIVEN CSV</span><br />
&nbsp; <span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$status</span><span style="color: #339933;">,</span> <span style="color: #000088;">$accuracy</span><span style="color: #339933;">,</span> <span style="color: #000088;">$latitude</span><span style="color: #339933;">,</span> <span style="color: #000088;">$longitude</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">// IF EVERYTHING OK AND ACCURANCY GREATER THEN 3 WE SAVE COORDINATES</span><br />
&nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$status</span> <span style="color: #339933;">==</span> 200<span style="color: #009900;">&#41;</span> and <span style="color: #009900;">&#40;</span><span style="color: #000088;">$accuracy</span><span style="color: #339933;">&gt;=</span>4<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$query_edit</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;update buildings set building_latitude = '&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$latitude</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;',<br />
&nbsp; &nbsp; building_longitude = '&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$longitude</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;'<br />
&nbsp; &nbsp; where building_id = '&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;building_id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;'&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$result_edit</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query_edit</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;building_id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; - OK&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;building_id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; - ERROR&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #666666; font-style: italic;">// TIMER BECAUSE GOOGLE DOESN'T LIKE TO BE QUERIED IN SHORT TIME</span><br />
&nbsp; <span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span>3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #990000;">mysql_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
</pre>
<p>V následujícím článku vám představím MySQL proceduru, která vrací seznam nejbližších budov v okolí vypočítaný na základě GPS souřadnic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/php-a-google-maps-jak-ziskat-gps-souradnice-pro-adresu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Objektově orientované programování (OOP) v PHP &#8211; Mentální mapa</title>
		<link>http://www.havlena.net/blog/objektove-orientovane-programovani-oop-v-php-mentalni-mapa/</link>
		<comments>http://www.havlena.net/blog/objektove-orientovane-programovani-oop-v-php-mentalni-mapa/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 13:45:38 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[Mentální mapování]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[destruktory]]></category>
		<category><![CDATA[konstruktory]]></category>
		<category><![CDATA[mind map]]></category>
		<category><![CDATA[myšlenkové mapy]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[XMind]]></category>
		<category><![CDATA[__autoload]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=735</guid>
		<description><![CDATA[Stáhněte si myšlenkovou mapu o objektově orientovaném programování v PHP. Obsahuje shrnutí základních pojmů a informací o konstruktorech, destruktorech, vlastnostech a užitečných funkcích jako je například __autoload().

Webová verze přes XMind Share

Mentální mapa ke stažení

[Textová verze] 

Mentální mapu si můžete stáhnout hned v několika formátech:

jako obrázek JPEG
ve formátu XMap
ve formátu XMind pro aplikaci XMind
ve formátu MM [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-750" title="OOP v PHP - Mentální mapa" src="http://www.havlena.net/blog/wp-content/2009/06/oop-v-php-300x125.jpg" alt="OOP v PHP - Mentální mapa" width="300" height="125" />Stáhněte si myšlenkovou mapu o <strong>objektově orientovaném programování v PHP</strong>. Obsahuje shrnutí základních pojmů a informací o konstruktorech, destruktorech, vlastnostech a užitečných funkcích jako je například <samp>__autoload()</samp>.<br />
<span id="more-735"></span></p>
<h3>Webová verze přes XMind Share</h3>
<p><iframe id='xmindshare_embedviewer' src='http://share.xmind.net/_embed/havlenma/object-oriented-programming-(oop)-in-php/' width='580px' height='400px' frameborder='0' scrolling='no'></iframe></p>
<h3>Mentální mapa ke stažení</h3>
<dl id="attachment_249" class="wp-caption alignright" style="width: 300px;">
<dt class="wp-caption-dt"><a href="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.jpg"><img class="alignnone size-medium wp-image-737" title="Objektově orientované programování (OOP) v PHP - Mentální mapa" longdesc="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.html" src="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php-300x255.jpg" alt="Objektově orientované programování (OOP) - Mentální mapa" width="300" height="255" /></a>[<a href="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.html">Textová verze</a>] </dt>
</dl>
<p>Mentální mapu si můžete stáhnout hned v několika formátech:</p>
<ul>
<li><a href="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.jpg">jako <strong>obrázek JPEG</strong></a></li>
<li><a href="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.xmap">ve <strong>formátu XMap</strong></a></li>
<li><a href="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.xmind">ve <strong>formátu XMind</strong></a> pro aplikaci XMind</li>
<li><a href="/blog/wp-content/2009/06/objektove-orientovane-programovani-oop-v-php.mm">ve <strong>formátu MM</strong></a> pro aplikaci FreeMind</li>
</ul>
<p>Nebo si můžete vytvořit on-line účet na stránkách aplikace XMind <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.xmind.net');" href="http://www.xmind.net/" target="_blank">http://www.xmind.net/</a> a prohlížet si mapu zde, přes adresu <a onclick="javascript:pageTracker._trackPageview('/outbound/article/share.xmind.net');" href="http://share.xmind.net/havlenma/object-oriented-programming-(oop)-in-php/">http://share.xmind.net/havlenma/object-oriented-programming-(oop)-in-php/</a> (můžete si ji např. přidat k oblíbeným a lehce k ní přistupovat on-line přes váš účet).</p>
<h3>Použitá literatura</h3>
<ul>
<li>Velká kniha PHP a MySQL 5 : kompendium znalostí pro začátečníky i profesionály / W. Jason Gilmore ; [překlad Jan Pokorný].. – Vyd. 1.. – Brno : Zoner Press, 2007.. – 864 s. : il. ; 23 cm.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/objektove-orientovane-programovani-oop-v-php-mentalni-mapa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pole v PHP &#8211; Mentální mapa</title>
		<link>http://www.havlena.net/blog/pole-v-php-mentalni-mapa/</link>
		<comments>http://www.havlena.net/blog/pole-v-php-mentalni-mapa/#comments</comments>
		<pubDate>Wed, 06 May 2009 11:48:54 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[Mentální mapování]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[FreeMind]]></category>
		<category><![CDATA[mind map]]></category>
		<category><![CDATA[myšlenkové mapy]]></category>
		<category><![CDATA[pole]]></category>
		<category><![CDATA[XMind]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=330</guid>
		<description><![CDATA[Dnes nabízím mentální mapu k polím v PHP 5. Obsahuje řadu užitečných funkcích, které se rychle zapomínají. Právě proto se mapa hodí k rychlému nahlédnutí. Navíc jsem přidal ke stažení i verzi pro program FreeMind.
Webová verze přes XMind Share

Mentální mapa ke stažení

[Textová verze] 

Mentální mapu si můžete stáhnout hned v několika formátech:

jako obrázek JPEG
ve formátu [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-356" title="Pole v PHP" src="http://www.havlena.net/blog/wp-content/2009/05/pole-v-php-maly.jpg" alt="Pole v PHP" width="184" height="65" />Dnes nabízím mentální mapu k polím v PHP 5. Obsahuje řadu užitečných funkcích, které se rychle zapomínají. Právě proto se mapa hodí k rychlému nahlédnutí. Navíc jsem přidal ke stažení i verzi pro program FreeMind.<span id="more-330"></span></p>
<h3>Webová verze přes XMind Share</h3>
<p><iframe id='xmindshare_embedviewer' src='http://share.xmind.net/_embed/havlenma/box-in-php-2/' width='580px' height='400px' frameborder='0' scrolling='no'></iframe></p>
<h3>Mentální mapa ke stažení</h3>
<dl id="attachment_249" class="wp-caption alignright" style="width: 286px;">
<dt class="wp-caption-dt"><a href="http://www.havlena.net/blog/wp-content/2009/05/pole-v-php.jpg"><img class="alignnone size-medium wp-image-333" title="Pole v PHP - Mentální mapa" longdesc="http://www.havlena.net/blog/wp-content/2009/05/pole-v-php.html" src="http://www.havlena.net/blog/wp-content/2009/05/pole-v-php-276x300.jpg" alt="Pole v PHP - Mentální mapa" width="276" height="300" /></a>[<a href="http://www.havlena.net/blog/wp-content/2009/05/pole-v-php.html">Textová verze</a>] </dt>
</dl>
<p>Mentální mapu si můžete stáhnout hned v několika formátech:</p>
<ul>
<li><a href="/blog/wp-content/2009/05/pole-v-php.jpg">jako <strong>obrázek JPEG</strong></a></li>
<li><a href="/blog/wp-content/2009/05/pole-v-php.xmap">ve <strong>formátu XMap</strong></a></li>
<li><a href="/blog/wp-content/2009/05/pole-v-php.xmind">ve <strong>formátu XMind</strong></a> pro aplikaci XMind</li>
<li><a href="/blog/wp-content/2009/05/pole-v-php.mm">ve <strong>formátu MM</strong></a> pro aplikaci FreeMind</li>
</ul>
<p>Nebo si můžete vytvořit on-line účet na stránkách aplikace XMind <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.xmind.net');" href="http://www.xmind.net/" target="_blank">http://www.xmind.net/</a> a prohlížet si mapu zde, přes adresu <a href="http://share.xmind.net/havlenma/box-in-php-2/">http://share.xmind.net/havlenma/box-in-php-2/</a> (můžete si ji např. přidat k oblíbeným a lehce k ní přistupovat on-line přes váš účet).</p>
<h3>Použitá literatura</h3>
<ul>
<li>Velká kniha PHP a MySQL 5 : kompendium znalostí pro začátečníky i profesionály / W. Jason Gilmore ; [překlad Jan Pokorný].. – Vyd. 1.. – Brno : Zoner Press, 2007.. – 864 s. : il. ; 23 cm.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/pole-v-php-mentalni-mapa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funkce v PHP &#8211; Mentální mapa</title>
		<link>http://www.havlena.net/blog/funkce-v-php-mentalni-mapa/</link>
		<comments>http://www.havlena.net/blog/funkce-v-php-mentalni-mapa/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 21:31:58 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[Mentální mapování]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[FreeMind]]></category>
		<category><![CDATA[mind map]]></category>
		<category><![CDATA[myšlenkové mapy]]></category>
		<category><![CDATA[XMind]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=295</guid>
		<description><![CDATA[Tak jsem zde s další mapou, tentokrát o funkcích v PHP. Znovu nabízím mapu ke stažení v několika formátech nebo pro sdílení on-line z XMind Share. Snad vám bude přínosem 

Webová verze přes XMind Share

Mentální mapa ke stažení

[Textová verze] 

Mentální mapu si můžete stáhnout hned v několika formátech:

jako obrázek JPEG
ve formátu XMap
ve formátu XMind pro [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-296" title="Funkce v PHP" src="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php_maly.jpg" alt="Funkce v PHP" width="223" height="71" />Tak jsem zde s další mapou, tentokrát o <strong>funkcích v PHP</strong>. Znovu nabízím mapu ke stažení v několika formátech nebo pro sdílení on-line z XMind Share. Snad vám bude přínosem <img src='http://www.havlena.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-295"></span><br />
<h3>Webová verze přes XMind Share</h3>
<p><iframe id='xmindshare_embedviewer' src='http://share.xmind.net/_embed/havlenma/function-in-php/' width='590px' height='400px' frameborder='0' scrolling='no'></iframe></p>
<h3>Mentální mapa ke stažení</h3>
<dl id="attachment_249" class="wp-caption alignright" style="width: 229px;">
<dt class="wp-caption-dt"><a href="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php.jpg"><img class="size-medium wp-image-302" title="Funkce v PHP - Mentální mapa" longdesc="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php.html" src="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php-300x154.jpg" alt="Funkce v PHP - Mentální mapa" width="300" height="154" /></a>[<a href="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php.html">Textová verze</a>] </dt>
</dl>
<p>Mentální mapu si můžete stáhnout hned v několika formátech:</p>
<ul>
<li><a href="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php.jpg">jako <strong>obrázek JPEG</strong></a></li>
<li><a href="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php.xmap">ve <strong>formátu XMap</strong></a></li>
<li><a href="http://www.havlena.net/blog/wp-content/2009/04/funkce-v-php.xmind">ve <strong>formátu XMind</strong></a> pro aplikaci XMind</li>
</ul>
<p>Nebo si můžete vytvořit on-line účet na stránkách aplikace XMind <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.xmind.net');" href="http://www.xmind.net/" target="_blank">http://www.xmind.net/</a> a prohlížet si mapu zde, přes adresu <a onclick="javascript:pageTracker._trackPageview('/outbound/article/share.xmind.net');" href="http://share.xmind.net/havlenma/function-in-php/">http://share.xmind.net/havlenma/function-in-php/</a> (můžete si ji např. přidat k oblíbeným a lehce k ní přistupovat on-line přes váš účet).</p>
<h3>Použitá literatura</h3>
<ul>
<li>Velká kniha PHP a MySQL 5 : kompendium znalostí pro začátečníky i profesionály / W. Jason Gilmore ; [překlad Jan Pokorný].. – Vyd. 1.. – Brno : Zoner Press, 2007.. – 864 s. : il. ; 23 cm.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/funkce-v-php-mentalni-mapa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Základy PHP &#8211; Mentální mapa</title>
		<link>http://www.havlena.net/blog/zaklady-php-mentalni-mapa/</link>
		<comments>http://www.havlena.net/blog/zaklady-php-mentalni-mapa/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 13:32:43 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[Mentální mapování]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[FreeMind]]></category>
		<category><![CDATA[mind map]]></category>
		<category><![CDATA[myšlenkové mapy]]></category>
		<category><![CDATA[XMind]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=225</guid>
		<description><![CDATA[Asi každý z nás někdy zapomíná. A jde-li přímo o nějaký programovací jazyk, asi sebou každý den netaháte osmiset stránkovou knihu nebo manuál. Proto se mohou velmi hodit mentální mapy, které nám dokáží zapomenuté věci velice rychle připomenout. Tímto začínám menší blok článků, ve kterých budu uveřejňovat mentální mapy týkajících se především PHP a MySQL [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-241 alignleft" title="Základy PHP - Mentální mapa" src="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php_maly-300x225.jpg" alt="Základy PHP - Mentální mapa" width="300" height="225" />Asi každý z nás někdy zapomíná. A jde-li přímo o nějaký programovací jazyk, asi sebou každý den netaháte osmiset stránkovou knihu nebo manuál. Proto se mohou velmi hodit mentální mapy, které nám dokáží zapomenuté věci velice rychle připomenout. Tímto začínám menší blok článků, ve kterých budu uveřejňovat mentální mapy týkajících se především PHP a MySQL verze 5.<span id="more-225"></span></p>
<h3>Webová verze přes XMind Share</h3>
<p><iframe id='xmindshare_embedviewer' src='http://share.xmind.net/_embed/havlenma/php-basics/' width='590px' height='400px' frameborder='0' scrolling='no'></iframe></p>
<h3>Mentální mapa ke stažení</h3>
<dl id="attachment_249" class="wp-caption alignright" style="width: 229px;">
<dt class="wp-caption-dt"><a href="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php.jpg"><img class="size-medium wp-image-249" title="Základy PHP - Mentální mapa" longdesc="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php.html" src="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php-219x300.jpg" alt="Základy PHP - Mentální mapa" width="219" height="300" /></a>[<a href="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php.html">Textová verze</a>] </dt>
</dl>
<p style="text-align: left;">Mentální mapu si můžete stáhnout hned v několika formátech:</p>
<ul>
<li><a title="Základy PHP - Mentální mapa jako obrázek JPEG" href="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php.jpg">jako <strong>obrázek JPEG</strong></a></li>
<li><a href="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php.xmap">ve <strong>formátu XMAP</strong></a></li>
<li><a href="http://www.havlena.net/blog/wp-content/2009/04/zaklady-php.xmind">ve <strong>formátu XMIND</strong></a> pro aplikaci XMind</li>
</ul>
<p>Nebo si můžete vytvořit on-line účet na stránkách aplikace XMind <a href="http://www.xmind.net/" target="_blank">http://www.xmind.net/</a> a prohlížet si mapu zde přes adresu <a href="http://share.xmind.net/havlenma/php-basics/">http://share.xmind.net/havlenma/php-basics/</a> (můžete si ji např. přidat k oblíbeným a lehce k ní přistupovat on-line přes váš účet).</p>
<h3>Použitá literatura</h3>
<ul>
<li>Velká kniha PHP a MySQL 5 : kompendium znalostí pro začátečníky i profesionály / W. Jason Gilmore ; [překlad Jan Pokorný].. &#8211; Vyd. 1.. &#8211; Brno : Zoner Press, 2007.. &#8211; 864 s. : il. ; 23 cm.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/zaklady-php-mentalni-mapa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
