<?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</title>
	<atom:link href="http://www.havlena.net/blog/tag/php/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>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>
	</channel>
</rss>

