<?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; Tipy a triky</title>
	<atom:link href="http://www.havlena.net/blog/category/tipy-a-triky/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>5</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>Taskix &#8211; Jak změnit pořadí spuštěných aplikací na hlavním panelu</title>
		<link>http://www.havlena.net/blog/taskix-jak-zmenit-poradi-spustenych-aplikaci-na-hlavnim-panelu/</link>
		<comments>http://www.havlena.net/blog/taskix-jak-zmenit-poradi-spustenych-aplikaci-na-hlavnim-panelu/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 12:33:33 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[hlavní panel]]></category>
		<category><![CDATA[taskix]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=40</guid>
		<description><![CDATA[Malá utilitka do Windows o velikosti cca 60 KiB vám umožní volně pohybovat se záložkami spuštěných programů na hlavním panelu. Velmi užitečné, pokud máte puštěných více programů a jste naučení mít je na panelu v určitém pořadí. Více informací o programu se dozvíte na stránkách utilitky. Instalace je velice jednoduchá, stačí stáhnout Taskix (pro 32-bitové [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-41" title="Jak vypadá výměna právě spuštěných programů pomocí Taskix" src="http://www.havlena.net/blog/wp-content/2009/01/taskix.jpg" alt="Jak vypadá výměna právě spuštěných programů pomocí Taskix" width="350" height="153" />Malá utilitka do Windows o velikosti cca 60 KiB vám <strong>umožní volně pohybovat se záložkami spuštěných programů na hlavním panelu</strong>. Velmi užitečné, pokud máte puštěných více programů a jste naučení mít je na panelu v určitém pořadí. Více informací o programu se dozvíte na <a href="http://taskix.robustit.com/">stránkách utilitky</a>. Instalace je velice jednoduchá, stačí <strong><a href="http://taskix.robustit.com/">stáhnout Taskix</a></strong> (pro 32-bitové nebo 64-bitové Windowsy), <strong>rozbalit</strong> do jakékoliv složky (např. <samp>C:\Program Files\Taskix</samp>), <strong>spustit</strong> program <samp>Taskix.exe</samp>, <strong>zaškrtnout Autostart with Windows</strong> a kliknout v něm na tlačitko <strong>Active</strong>. Nyní můžete tažením přemisťovat jakoukoliv záložku spuštěných programů.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/taskix-jak-zmenit-poradi-spustenych-aplikaci-na-hlavnim-panelu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Přípona .cdr (CorelDraw) &#8211; v čem konvertovat nebo otevřít?</title>
		<link>http://www.havlena.net/blog/pripona-cdr-coreldraw-v-cem-konvertovat-nebo-otevrit/</link>
		<comments>http://www.havlena.net/blog/pripona-cdr-coreldraw-v-cem-konvertovat-nebo-otevrit/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 16:35:23 +0000</pubDate>
		<dc:creator>Matouš Havlena</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[adobe illustrator]]></category>
		<category><![CDATA[cdr]]></category>
		<category><![CDATA[coreldraw]]></category>
		<category><![CDATA[vektor]]></category>

		<guid isPermaLink="false">http://www.havlena.net/blog/?p=30</guid>
		<description><![CDATA[Jednou za čas mi přijde nějaký návrh logotypu apod. ve formátu cdr programu CorelDraw. Bohužel mi tento program na disku chybí, proto jsem hledal jiné možnosti jak ho konvertovat do něčeho &#8222;otevřeného&#8220; nebo &#8222;adobáckého&#8220;. Četl jsem různá fóra, instaloval různé konvertory, které na svých stránkách podporu formátu cdr slibovaly. Nic však nefungovalo.
Někde jsem narazil na [...]]]></description>
			<content:encoded><![CDATA[<p>Jednou za čas mi přijde nějaký návrh logotypu apod. <strong>ve formátu cdr</strong> programu CorelDraw. Bohužel mi tento program na disku chybí, proto jsem hledal jiné možnosti jak ho konvertovat do něčeho &#8222;otevřeného&#8220; nebo &#8222;adobáckého&#8220;. Četl jsem různá fóra, instaloval různé konvertory, které na svých stránkách podporu formátu cdr slibovaly. Nic však nefungovalo.</p>
<p><span id="more-30"></span>Někde jsem narazil na článek, kde to týpek otvírá v <strong>IrfanView</strong> a posléze uloží do <strong>jpg</strong>. Sice se mi v něm podařilo soubor otevřít, ale byl malý a jemně deformovaný. Tudy cesta nevedla.</p>
<p>Po této zkušenosti jsem <strong>zkusil soubor otevřít v Adobe Illustrator a byl jsem velice mile překvapen</strong>, poněvadž to bez problému <strong>fungovalo</strong> a soubor šlo i bezchybně vyexportovat do jiných formátů. Pokud vlastníte jiný vektorový editor (jako je Zoner Callisto, freewarový Inkscape apod.), pokuste se v nich soubor otevřít (i když třeba nemají koncovku cdr v možnostech). A pokud žádný vektorový program nemáte a neplánujete s cdr soubory pracovat pravidelně, stáhněte si <a title="Trial verze programů od Corelu" href="http://www.corel.com/servlet/Satellite/us/en/Content/1152796555406">trial verzi CorelDraw</a> a otevřte to v ní.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.havlena.net/blog/pripona-cdr-coreldraw-v-cem-konvertovat-nebo-otevrit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

