<?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>Flying memes &#187; Google Map</title>
	<atom:link href="http://sandropaganotti.com/tag/google-map/feed/" rel="self" type="application/rss+xml" />
	<link>http://sandropaganotti.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 08 Jan 2012 16:00:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Isocrono e Google Map API</title>
		<link>http://sandropaganotti.com/2010/01/18/isocrono-e-google-map-api/</link>
		<comments>http://sandropaganotti.com/2010/01/18/isocrono-e-google-map-api/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 22:23:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Algoritmi]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Google Map]]></category>
		<category><![CDATA[isocrono]]></category>

		<guid isPermaLink="false">http://sandropaganotti.com/?p=287</guid>
		<description><![CDATA[Un isocrono non è nient&#8217;altro che una curva che unisce su di una mappai punti che distano uno stesso intervallo temporale (a piedi, o con un mezzo di trasporto) da un punto dato. In questo articolo, che funge da approfondimento della homepage del progetto, vorrei entrare un pò nel merito del piccolo script da utilizzare [...]]]></description>
			<content:encoded><![CDATA[<p>Un <a href="http://it.wikipedia.org/wiki/Isoclina#Scienze_Sociali" target="_blank">isocrono</a> non è nient&#8217;altro che una curva che unisce su di una mappai punti che distano uno stesso intervallo temporale (a piedi, o con un mezzo di trasporto) da un punto dato. In questo articolo, che funge da approfondimento <a href="http://sandropaganotti.com/generate-an-isochrone-map-using-google-maps-api/" target="_blank">della homepage del progetto</a>, vorrei entrare un pò nel merito del piccolo script da utilizzare per calcolare un&#8217;approssimazione di isocrono usando le API di Google Maps.</p>
<p><span id="more-287"></span>Lo script si compone di tre parti, una (classica) funzione di inizializzazione,  una funzione che effettua il <a href="http://code.google.com/intl/it/apis/maps/documentation/services.html#Geocoding" target="_blank">GeoCoding</a> della località della quale si vuole calcolare l&#8217;isocrono e la funzione chiave, che cicla su ognuno dei raggi (il numero di raggi è impostabile, di default 10) della circonferenza costruita intorno a tale località e per ogni raggio si muove verso l&#8217;esterno misurando la distanza in minuti dal centro, quando trova un punto che sorpassa il tempo limite dato lo script mette un marker.</p>
<p>Lo script passa al raggio successivo quando rileva una misurazione che supera del 50% il tempo limite dato.</p>
<pre><code class="javascript">
    function crawlpoint(px,py,mins){
        var point      = new GPoint(px,py);
        var destpoint  = new GPoint(px + x,py + y);   

        directions.loadFromWaypoints(new Array(point.y + "," + point.x ,destpoint.y + "," + destpoint.x),{preserveViewport:true});
        x = x + (inc_x * Math.sin(start_s));
        y = y + (inc_y * Math.cos(start_s));
        m = m + 1;

        if (directions.getNumRoutes() &gt; 0){
            document.getElementById('txt1').value = 'y' + document.getElementById('txt1').value
            var curr_meas = directions.getDuration().seconds/60;
            if (prev_meas &lt;= mins &amp;&amp; curr_meas &gt; mins ){
                map.addOverlay(new GMarker(prev_dest,{title:'Distance: ' + directions.getDuration().html}));
                found     = 1;
            }else{
                prev_dest = destpoint;
                prev_meas = curr_meas;
            }

            if(curr_meas &gt; (mins + (mins * 0.4)) || (m &gt; 20 &amp;&amp; found ==1) || m &gt; 50){
                points.push(new GLatLng(prev_dest.y, prev_dest.x));
                start_s = start_s + slice;
                x = inc_x;
                y = inc_y;
                m = 0;
                found = 0;
                prev_meas = 0;
                curr_meas = 0;
                prev_dest = point;
                directions.clear();

                if(start_s &gt;= (2*Math.PI)){
                    start_s = 0;
                    $('#loader').hide();
                    clearInterval(intval);
                }
            }

        }else{
            document.getElementById('txt1').value = 'n' + document.getElementById('txt1').value
        }
    }
</code></pre>
<p>Possiamo spezzare la funzione in tre punti distinti, la prima parte invoca le <a href="http://code.google.com/intl/it/apis/maps/documentation/services.html#Directions" target="_blank">Directions API</a>, per calcolare la distanza tra il centro e un punto (destpoint) posizionato sul raggio attivo (il cui angolo è memorizzato in start_s, inizialmente a 0) ad una distanza espressa da due variabili x e y. Una volta calcolato il percorso x e y vengono incrementate in modo che al prossimo giro puntino ad un punto sullo stesso raggio un poco più avanti.</p>
<p>La seconda parte aggiunge un marker se tra la durata del percorso attuale supera per la prima volta il limite di tempo inserito.</p>
<p>La terza parte resetta tutti i contatori e avanza al raggio successivo se la misurazione temporale corrente eccede del 50% il tempo limite inserito o se sono state effettuate più di venti misurazioni con l&#8217;identificazione di un marker o più di 50 misurazioni.</p>
<p>Trovate il codice nella sua interezza sul mio account di <a href="http://github.com/sandropaganotti/isochrone-with-google-map" target="_blank">github</a>, potete inoltre testare il tutto su di una <a href="http://sandropaganotti.com/wp-content/goodies/demos/isochrone/index.html" target="_blank">pagina di demo</a>.</p>
<p>PS: credo che l&#8217;algoritmo sia altamente perfezionabile, ad esempio introducendo alcuni concetti di reinforcement learning per la ricerca degli zeri della funzione T(R(p1,p2)) &#8211; t dove T(R(p1,p2)) è il tempo di percorrenza del percorso tra p1 e p2 e t è il tempo limite dell&#8217;isocrono.</p>
]]></content:encoded>
			<wfw:commentRss>http://sandropaganotti.com/2010/01/18/isocrono-e-google-map-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un nuovo tile engine per google map</title>
		<link>http://sandropaganotti.com/2009/04/26/un-nuovo-tile-engine-per-google-map/</link>
		<comments>http://sandropaganotti.com/2009/04/26/un-nuovo-tile-engine-per-google-map/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 22:27:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Algoritmi]]></category>
		<category><![CDATA[Interfaccie]]></category>
		<category><![CDATA[Google Map]]></category>
		<category><![CDATA[Tiles]]></category>

		<guid isPermaLink="false">http://sandropaganotti.com/?p=152</guid>
		<description><![CDATA[Conoscevo Google Map e le sue fantastiche API ma solo di recente ho deciso di spulciare un pò più a fondo la sua documentazione e ho scoperto la notevole possibilità di modificare i tiles visualizzati da Google Map trasformando questo strumento da strettamente cartografico a ZUI (zoomable user interface). Come funziona? Bisogna istanziare un nuovo [...]]]></description>
			<content:encoded><![CDATA[<p>Conoscevo <a href="http://www.google.com/maps">Google Map</a> e le sue fantastiche <a href="http://code.google.com/apis/maps/">API</a> ma solo di recente ho deciso di spulciare un pò più a fondo la sua <a href="http://code.google.com/apis/maps/documentation/">documentazione</a> e ho scoperto la notevole possibilità di modificare i tiles visualizzati da Google Map trasformando questo strumento da strettamente cartografico a ZUI (zoomable user interface).</p>
<p>Come funziona? Bisogna istanziare un nuovo oggetto della classe <a href="http://code.google.com/apis/maps/documentation/reference.html#GTileLayer">GTileLayer</a> e specificarne all&#8217;interno una funzione che, ricevuti due parametri (un oggetto <a href="http://code.google.com/apis/maps/documentation/reference.html#GPoint">GPoint </a>e un numero indicativo del livello di zoom) sappia ritornarne l&#8217;immagine appropriata.</p>
<p>Nel prossimo articolo andrò un pò più nel dettaglio, per il momento <a href="http://www.sandropaganotti.com/wp-content/map/mappa.html">vi lascio a questa proof-of-concept</a> che potrebbe trasformarsi, a breve, nella gallery ufficiale del sito.</p>
]]></content:encoded>
			<wfw:commentRss>http://sandropaganotti.com/2009/04/26/un-nuovo-tile-engine-per-google-map/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

