<?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>GIS &#38; Chips &#187; Eclipse</title>
	<atom:link href="http://www.gisandchips.org/tag/eclipse/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gisandchips.org</link>
	<description>Geografía útil para llevar</description>
	<lastBuildDate>Tue, 29 Nov 2011 10:38:56 +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>Integración de un servicio WMS en GoogleMaps usando GWT</title>
		<link>http://www.gisandchips.org/2010/01/18/integracion-de-un-servicio-wms-en-googlemaps-usando-gwt/</link>
		<comments>http://www.gisandchips.org/2010/01/18/integracion-de-un-servicio-wms-en-googlemaps-usando-gwt/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 22:26:00 +0000</pubDate>
		<dc:creator>jpiera</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[GoogleMaps]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[WMS]]></category>

		<guid isPermaLink="false">http://www.gisandchips.org/?p=1192</guid>
		<description><![CDATA[Este artículo es una continuación del artículo &#8220;Google Web Toolkit &#38; Google Maps&#8221; que se publicó en este mismo blog hace un par de meses. La idea de escribirlo surgió debido a una pregunta que nos hizo una lectora en la que preguntaba cómo se podía integrar un servidor WMS propio en Google Maps utilizando [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Este artículo es una continuación del artículo &#8220;<a href="http://www.gisandchips.org/?p=1034">Google Web Toolkit &amp; Google Maps</a>&#8221; que se publicó en este mismo blog hace un par de meses. La idea de escribirlo surgió debido a una pregunta que nos hizo una lectora en la que preguntaba cómo se podía integrar un servidor <a href="http://es.wikipedia.org/wiki/WMS">WMS</a> propio en Google Maps utilizando GWT.</p>
<p style="text-align: justify">Este artículo explica paso a paso cómo hacerlo y para ello se ha tomado como servidor de ejemplo un <a href="http://wms.jpl.nasa.gov/wms.cgi">WMS de la NASA,</a> pero se ha escrito el código de forma que haciendo unas pocas modificaciones se puede integrar cualquier otro servidor WMS.</p>
<p style="text-align: center"><a href="http://www.gisandchips.org/wp-content/wms1.png"><img class="size-full wp-image-1196 alignnone" src="http://www.gisandchips.org/wp-content/wms1.png" alt="wms" width="300" height="200" /></a></p>
<p style="text-align: justify">Se parte de un entorno en el que se ha creado un proyecto de GWT llamado GoogleMaps-WMS utilizando para ello el entorno de desarrollo Eclipse. Además se ha creado una página de inicio y se ha añadido un mapa de GoogleMaps en el centro. Cómo crear el proyecto y cómo crear la página de inicio es algo que ya se explicó en el <a href="http://www.gisandchips.org/?p=1034">artículo anterior</a>.</p>
<p style="text-align: justify"><span id="more-1192"></span></p>
<p style="text-align: justify">Antes de empezar a ver código es necesario entender cómo funciona el sistema de tileado de GoogleMaps basado en un <a href="http://es.wikipedia.org/wiki/Quadtree">QuadTree</a>, que no es más que una estructura de datos muy utilizada para crear índices espaciales. El QuadTree  se aplica sobre un área concreta y en el caso de GoogleMaps se aplica sobre toda la superficie terrestre que varía entre la longitud  -180º a 180º y la latitud -90º a 90º (estas cifras no son del todo exactas, ya que la latitud se &#8220;acorta&#8221; unos grados en los polos)</p>
<p style="text-align: justify">El QuadTree divide  esta superficie en 4 áreas en forma rectangular de tamaño fijo, que en su conjunto pueden ser vistas como una matriz de 2&#215;2 y se les pueden dar nombres según la fila y la columna en la que están. De aquí en adelante  a esas áreas rectangulares las vamos a llamar tiles. La nomenclatura de Google es numérica y crece de Oeste a Este y de Norte a sur de forma que el tile de la parte superior izquierda es el (0,0), el tile de la parte superior derecha es el (1,0), el de la parte inferior izquierda es el (0,1) y el de la parte inferior derecha es el (1,1). Esta matriz de 2&#215;2 es la matriz de tiles para un nivel de zoom 1.</p>
<p style="text-align: justify">Cada una de esos tiles se puede descomponer a su vez en 4 partes iguales de área constante. Si dividimos los 4 tiles que hay inicialmente en 4 partes iguales obtendremos una matriz de 4&#215;4 tiles, que nombraremos matriz de tiles de nivel 2. Podemos utilizar la misma nomenclatura que hemos utilizado para los tiles de nivel de zoom 1, siendo el tile de la esquina superior izquierda el (0,0) y el tile de la esquina inferior derecha el (3,3).</p>
<p style="text-align: justify">Este proceso de descomposición de tiles en 4 tiles de un nivel inferior lo podemos realizar N veces de forma que al final tendremos una estructura de datos de N niveles en los que en cada nivel habrá 4 veces más tiles que en el nivel predecesor. En el caso de GoogleMaps cada uno de estos tiles es una imagen de 256&#215;256 píxels independientemente del nivel en el que nos encontremos, por lo que a mayor nivel de zoom más detalle tendrá la imagen. Para poder entender mejor la nomenclatura de los tiles de Google podemos consultar <a href="http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/">ésta página web</a>.</p>
<p style="text-align: justify">Una vez entendido el sistema de tileado y la nomenclatura que usa GoogleMaps, vamos a empezar a escribir código.  Existe en el API  que proporciona Google una clase llamada <a href="http://code.google.com/p/gwt-google-apis/source/browse/trunk/google-apis/src/com/google/gwt/maps/client/TileLayer.java?r=41">TileLayer</a> que representa un proveedor de tiles del que se nutrirá el mapa para poder visualizarse. Tenemos por tanto que crear una clase llamada <a href="http://www.gisandchips.org/svn/global/jpiera/GoogleMaps-WMS/src/org/gisandchips/gwt/maps/wms/client/WMSTileLayer.java">WMSTileLayer</a> que herede de TileLayer, lo que implica que hay que implementar algunos métodos:</p>
<pre class="brush: java; title: ; notranslate">
public class WMSTileLayer extends TileLayer{
public WMSTileLayer(String baseServerUrl, String layers, String styles, Projection projection){
super();
}
@Override
public String getTileURL(Point tile, int zoom) {
return null;
}
@Override
public double getOpacity() {
return 1.0;
}
@Override
public boolean isPng() {
return true;
}
</pre>
<p style="text-align: justify">En el método <span style="font-style: italic">getOpacity</span> hay que devolver la transparencia de la imagen que varía entre 0 y 1. Si queremos que la imagen se visualice en el mapa tendremos que poner el valor 1.0.</p>
<p style="text-align: justify">En el método <span style="font-style: italic">isPng</span> hay que indicar si la imagen que se devuelve es png. En nuestro caso hemos devuelto <span style="font-style: italic">true</span> ya que las imágenes devueltas las pedimos en png.</p>
<p style="text-align: justify">Pero en el tercer método de la clase es dónde está la complejidad de esta clase. El método <span style="font-style: italic">getTileURL</span> acepta como parámetros un objeto de tipo Point y un entero. El entero hace referencia el nivel de zoom mientras que el Point es una pareja de enteros que hacen referencia al nombre del tile que hay que devolver.  Si hemos entendido la estructura de QuadrTree y la nomenclatura que usa Google en los tiles podremos entender el significado de estos parámetros. A medida que el usuario se desplaza por el mapa, el componente encargado de recuperar los tiles invoca al método <span style="font-style: italic">getTileURL</span> para recuperar la URL de los tiles del área en la que se encuentra. Este método se invocará normalmente unas cuántas veces por cada vez que el usuario modifique el área del mapa que está visualizando.</p>
<p style="text-align: justify">En el ejemplo de código hemos visto cómo en la implementación del método <span style="font-style: italic">getTileURL</span> se devolvía el valor <span style="font-style: italic">null</span> y ahora lo vamos a modificar para que devuelva la URL del tile que se está pidiendo en los argumentos del método y que  tendrá que ser descargado desde un servidor WMS. Podríamos haber creado un componente específico para un servidor WMS concreto, pero en lugar de eso hemos implementado un componente algo más genérico para que se pueda utilizar con otros servidores de mapas.</p>
<p style="text-align: justify">Para ello hemos añadido a la clase <a href="http://www.gisandchips.org/svn/global/jpiera/GoogleMaps-WMS/src/org/gisandchips/gwt/maps/wms/client/WMSTileLayer.java">WMSTileLayer</a> algunos parámetros que se establecen en el constructor. Estos parámetros son la dirección del servidor WMS, la lista de capas a cargar y los estilos con los que se desea visualizar la capa. Cómo conocer los valores de la capa(s) que soporta un servidor o los valores del estilo(s) soportados está fuera del alcance de este artículo, pero bastaría con hacer la operación <span style="font-style: italic">GetCapabilities</span> sobre el servidor.</p>
<p style="text-align: justify">El código resultante quedaría del siguiente modo:</p>
<p style="text-align: justify">
<pre class="brush: java; title: ; notranslate">
public class WMSTileLayer extends TileLayer{
private String baseServerUrl;
private String layers;
private String styles;
private Projection projection;
private String getMapUrl = null;
public WMSTileLayer(String baseServerUrl, String layers, String styles, Projection projection){
super(null, 0, 20);
this.baseServerUrl = baseServerUrl;
this.layers = layers;
this.styles = styles;
//construct the base URL
String urlBase = baseServerUrl + &quot;?&quot; +
&quot;FORMAT=image/png&amp;amp;SERVICE=WMS&amp;amp;REQUEST=GetMap&amp;amp;WIDTH&quot; +
&quot;=256&amp;amp;HEIGHT=256&amp;amp;VERSION=1.1.0&amp;amp;&quot; +
&quot;STYLES=&quot; + styles + &quot;&amp;amp;&quot; +
&quot;LAYERS=&quot;+ layers + &quot;&amp;amp;&quot;;
getMapUrl = urlBase;
}
@Override
public String getTileURL(Point tile, int zoom) {
return null;
}
@Override
public double getOpacity() {
return 1.0;
}
@Override
public boolean isPng() {
return true;
}
</pre>
<p style="text-align: justify">
<p style="text-align: justify">Además de los parámetros comentados anteriormente, podemos ver que se ha incluido un cuarto parámetro llamado projection, que se utiliza para identificar la proyección y deberá ser el mismo que el utilizado para crear el componente contenedor de mapas de GoogleMaps.</p>
<p style="text-align: justify">En el constructor lo que se está haciendo es básicamente crear la URL que servirá de base para lanzar la petición <span style="font-style: italic">GetMap</span> a un servidor WMS.Todavía faltan algunos parámetros para que la petición sea completa, pero estos parámetros los vamos a añadir en el método <span style="font-style: italic">getTileURL</span> que es el último método que nos queda por ver para terminar con la explicación.</p>
<p style="text-align: justify">Para simplificar el problema, vamos a suponer que el servidor WMS que estamos utilizando soporta el sistema de coordenadas en latitud/longitud (EPSG:4326). El problema será entonces pasar un tile de GoogleMaps definido mediante un nombre y un nivel de zoom a un par de coordenadas que definan el mismo tile en latitud/longitud. Para ello utilizamos el API de GoogleMaps y una vez tengamos ese tile, creamos la Url que lo contiene, de modo que el método getTileURL quedará de la siguiente forma:</p>
<pre class="brush: java; title: ; notranslate">
@Override
public String getTileURL(Point tile, int zoom) {
//Transforma las coordenadas a coordenadas Lat/Lon
Point tileIndexLLPoint = Point.newInstance(tile.getX() * 256, (tile.getY() + 1) * 256);
Point tileIndexURPoint = Point.newInstance(((tile.getX() + 1) * 256), (tile.getY()) * 256);
LatLng llPoint = projection.fromPixelToLatLng(tileIndexLLPoint, zoom, true);
LatLng urPoint = projection.fromPixelToLatLng(tileIndexURPoint, zoom, true);
String url =  getMapUrl + &quot;SRS=EPSG:4326&amp;amp;BBOX=&quot; +
	llPoint.getLongitude() + &quot;,&quot; +
	llPoint.getLatitude() + &quot;,&quot; +
	urPoint.getLongitude() + &quot;,&quot; +
	urPoint.getLatitude();
return url;
}
</pre>
<p>En las variables <span style="font-style: italic">llPoint</span> y <span style="font-style: italic">urPoint</span> se calculan las coordenadas de la esquina inferior izquierda y de la esquina superior derecha del tile que en latitud/longitud equivale al tile de GoogleMaps. Añadiendo estas coordenadas a la URL mediante el parámetro <span style="font-style: italic">BBOX</span> y añadiendo el parámetro <span style="font-style: italic">SRS </span>se forma la URL que se devuelve en el método y que será usada por el componente gráfico para recuperar las imágenes y mostrarlas en pantalla. Ahora ya sólo falta crear un objeto <a href="http://www.gisandchips.org/svn/global/jpiera/GoogleMaps-WMS/src/org/gisandchips/gwt/maps/wms/client/WMSTileLayer.java">WMSTileLayer</a> y asociarlo al componente gráfico de GoogleMaps. La clase que hace esto es <a href="http://www.gisandchips.org/svn/global/jpiera/GoogleMaps-WMS/src/org/gisandchips/gwt/maps/wms/client/GoogleMaps_WMS.java">GoogleMaps_WMS</a>, y el código es el sigueinte:</p>
<pre class="brush: java; title: ; notranslate">
public class GoogleMaps_WMS implements EntryPoint {
 private MapWidget map;
 private String wmsURL = &quot;http://wms.jpl.nasa.gov/wms.cgi&quot;;
 private String wmsLayers = &quot;global_mosaic_base&quot;;
 private String wmsStyles = &quot;pseudo&quot;;
 private String mapName = &quot;Nasa&quot;;
 public void onModuleLoad() {
//Coordenadas centrales para posicionar el mapa
LatLng latLonCenter = LatLng.newInstance(0,0);
//Creamos el mapa con un tamaÃ±o fijo
map = new MapWidget(latLonCenter, 2);
map.setSize(&quot;520px&quot;, &quot;520px&quot;);
Projection projection = new MercatorProjection(20);
//Creamos el servicio WMS que nutrirá a GoogleMaps
MapType myWMSMap = new MapType(new TileLayer[] {
new WMSTileLayer(wmsURL, wmsLayers, wmsStyles, projection)},
projection,
mapName);
//Añadimos el servicio WMS al mapa
map.addMapType(myWMSMap);
//Añadimos algunas opciones al mapa
MapUIOptions options = MapUIOptions.newInstance(Size.newInstance(400,400));
options.setMapTypeControl(true);
map.setUI(options);
// Add the map to the HTML host page
RootPanel.get(&quot;mapContainer&quot;).add(map);
}
}
</pre>
<p>En el ejemplo, la clase tiene algunos atributos:</p>
<ul>
<li>wmsURL: para definir la URL del servicio WMS.</li>
<li>wmsLayers: lista separada por comas de las capas a mostrar.</li>
<li>wmsStyle: estilo con el que se desea mostrar la capa</li>
<li>mapName: nombre del mapa que aparecerá en el interfaz de usuario de GoogleMaps</li>
</ul>
<p>Cambiando estos atributos se puede acceder a cualquier otro servidor WMS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gisandchips.org/2010/01/18/integracion-de-un-servicio-wms-en-googlemaps-usando-gwt/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google Web Toolkit &amp; Google Maps</title>
		<link>http://www.gisandchips.org/2009/11/20/google-web-toolkit-google-maps/</link>
		<comments>http://www.gisandchips.org/2009/11/20/google-web-toolkit-google-maps/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 14:40:09 +0000</pubDate>
		<dc:creator>jpiera</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gisandchips.org/?p=1034</guid>
		<description><![CDATA[Google Web Toolkit (GWT) es un framework creado por Google que permite al programador hacer aplicaciones web utilizando el lenguaje de programación Java. Existe un plugin de Eclipse que se utiliza para facilitar la generación de aplicaciones GWT donde se puede depurar código utilizando el depurador de código del entorno. Una vez que la aplicación [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/intl/es-ES/webtoolkit/">Google Web Toolkit</a> (GWT) es un framework creado por Google que permite al programador hacer aplicaciones web utilizando el lenguaje de programación Java. Existe un plugin de Eclipse que se utiliza para facilitar la generación de aplicaciones GWT donde se puede depurar código utilizando el depurador de código del entorno. Una vez que la aplicación esta depurada, se tiene que pasar por el compilador GWT que genera código HTML y Javascript. La idea es poder generar páginas que utilicen la tecnología Ajax (HTML + Javascript asíncrono), sin ser necesario escribir ni una sola línea de Javascript.</p>
<p><a href="http://maps.google.es">Google Maps</a> es un servicio de mapas que ofrece Google que tiene un <a href="http://code.google.com/intl/es-ES/apis/maps/documentation/v3/">API</a> que permite integrarlo en cualquier página web utilizando Javascript. Pero si estamos utilizando GWT, existe además un jar que contiene un API para Java lo que permite a un programador de GWT poder integrar la tecnología de Google Maps en sus páginas web. Este artículo explica ese API y mediante ejemplos.<span id="more-1034"></span></p>
<p>En este tutorial vamos a crear un proyecto de GWT y le vamos a añadir un mapa de Google Maps. Partiremos de un entorno en el que se ha instalado un Eclipse y se ha instalado el plugin de GWT. A continuación hay que crear un proyecto del tipo &#8220;Google -&gt; Web Application Project&#8221; que tiene que tener un nombre (GoogleMapsDemo) y un paquete raíz(org.gisandchips.gwt.maps). No es necesario utilizar los mismos nombres que se usan en el ejemplo, pero si se hace así se podrá seguir este tutorial sin la necesidad modificar nada.</p>
<p style="text-align: center">
<p><a href="http://www.gisandchips.org/wp-content/Pantallazo-New-Web-Application-Project-.png"><img class="size-full wp-image-1035 alignnone" src="http://www.gisandchips.org/wp-content/Pantallazo-New-Web-Application-Project-.png" alt="Pantallazo-New Web Application Project" width="300" height="260" /></a></p>
<p>El wizard de creación de un proyecto GWT crea un proyecto que se puede ejecutar: para ello seleccionamos la opción &#8220;Run -&gt; Debug Configurations -&gt; Web Application&#8221; y seleccionaremos GoogleMapsDemo que es el lanzador que ha creado el wizard por nosotros. Pulsamos en &#8220;Debug&#8221; y si todo va bien se abrirá un navegador que muestra un formulario con un único campo de texto y un botón para enviar.</p>
<p>Podemos rellenar el campo de texto con cualquier valor y al pulsar el botón se abrirá una ventana dónde el servidor nos da la bienvenida. ¿Y qué tiene esto de especial? Lo que realmente ha ocurrido es que el cliente ha enviado una petición asíncrona (¡el famoso Ajax!) y ha esperado a que el servidor le devuelva una respuesta para mostrarla.</p>
<p><a href="http://www.gisandchips.org/wp-content/Screenshot-Web-Application-Starter-Project-.png"><img class="size-full wp-image-1074 alignnone" src="http://www.gisandchips.org/wp-content/Screenshot-Web-Application-Starter-Project-.png" alt="Screenshot-Web Application Starter Project" width="400" height="300" /></a></p>
<p>Ahora que ya sabemos crear y ejecutar una aplicación en GWT vamos a crear una aplicación utilizando Google Maps. Primero hay que <a href="http://code.google.com/p/gwt-google-apis/downloads/list">descargarse</a> la librería de Google Maps para GWT desde la página web de Google (gwt-maps-XXX), hay que descomprimirla, y hay que copiar el jar gwt-maps a la carpeta &#8220;war -&gt; WEB-INF -&gt; lib&#8221; de nuestro proyecto. A continuación hay que modificar el path del proyecto (&#8220;Project -&gt; Properties -&gt; Java Build Path -&gt; Libraries -&gt; Add Jars&#8221;) y añadir la librería que acabamos de bajar.</p>
<p>Con esto ya tenemos acceso desde el Eclipse a las clases de Google Maps, pero para tener acceso en tiempo de ejecución tenemos que editar el fichero &#8220;org.gisandchips.gwt.maps.GoogleMapsDemo.gwt.xml&#8221; y añadir una línea para incluir la dependencia en el proyecto. Al final el fichero quedará de esta forma:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE module PUBLIC &quot;-//Google Inc.//DTD Google Web Toolkit 1.7.1//EN&quot; &quot;http://google-web-toolkit.googlecode.com/svn/tags/1.7.1/distro-source/core/src/gwt-module.dtd&quot;&gt;
&lt;module rename-to='googlemapsdemo'&gt;
 &lt;!-- Inherit the core Web Toolkit stuff.                        --&gt;
 &lt;inherits name='com.google.gwt.user.User'/&gt;

 &lt;!-- Inherit the default GWT style sheet.  You can change       --&gt;
 &lt;!-- the theme of your GWT application by uncommenting          --&gt;
 &lt;!-- any one of the following lines.                            --&gt;
 &lt;inherits name='com.google.gwt.user.theme.standard.Standard'/&gt;
 &lt;!-- &lt;inherits name='com.google.gwt.user.theme.chrome.Chrome'/&gt; --&gt;
 &lt;!-- &lt;inherits name='com.google.gwt.user.theme.dark.Dark'/&gt;     --&gt;

 &lt;!-- Other module inherits                                      --&gt;

 &lt;!-- Specify the app entry point class.                         --&gt;
 &lt;entry-point class='org.gisandchips.gwt.maps.client.GoogleMapsDemo'/&gt;

 &lt;!-- Load the Google Maps GWT bindings from the gwt-google-apis project --&gt;
 &lt;!-- Added by projectCreator if you use the -addModule argument --&gt;
 &lt;inherits name=&quot;com.google.gwt.maps.GoogleMaps&quot; /&gt;
 &lt;script src=&quot;http://maps.google.com/maps?gwt=1&amp;amp;file=api&amp;amp;v=2&amp;amp;sensor=false&quot; /&gt;
&lt;/module&gt;
</pre>
<p>Tal y como se indica en el fichero XML, la clase &#8220;org.gisandchips.gwt.maps.client.GoogleMapsDemo&#8221; es la que contiene el punto de entrada a la aplicación, por lo tanto es aquí donde hay que introducir el código Java que generará la página web. Por otra parte, el fichero &#8220;GoogleMapsDemo.html&#8221; que hay en la carpeta war es el que contiene el HTML de entrada y que habrá que editar para personalizar una nuestra página de inicio. En nuestro caso vamos a modificar el título y a añadir una etiqueta donde se situará el mapa. El &#8220;body&#8221; del documento quedaría de la siguiente forma:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;body&gt;

 &lt;!-- OPTIONAL: include this if you want history support --&gt;
 &lt;iframe src=&quot;javascript:''&quot; id=&quot;__gwt_historyFrame&quot; tabIndex='-1' style=&quot;position:absolute;width:0;height:0;border:0&quot;&gt;&lt;/iframe&gt;

 &lt;h1&gt;Mi primer ejemplo con GWT y Google Maps&lt;/h1&gt;

 &lt;table align=&quot;center&quot;&gt;
 &lt;tr&gt;
 &lt;td id=&quot;mapContainer&quot;&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/table&gt;
 &lt;/body&gt;
</pre>
<p>A continuación hay que editar la clase &#8220;org.gisandchips.gwt.maps.client.GoogleMapsDemo&#8221;. Eliminamos todo el código del método &#8220;onModuleLoad&#8221; y añadimos el siguiente código java:</p>
<pre class="brush: java; title: ; notranslate">

public void onModuleLoad() {
 MapWidget mapWidget = new MapWidget();
 mapWidget.setSize(&quot;1000&quot;, &quot;500&quot;);

 RootPanel.get(&quot;mapContainer&quot;).add(mapWidget);

}
</pre>
<p>Ahora ya podemos lanzar el proyecto una vez más para ver los resultados. Se abrirá el navegador y tendremos que ver una página web con un mapa en el centro donde podremos hacer panning y desplazarnos.</p>
<p><a href="http://www.gisandchips.org/wp-content/Screenshot-Web-Application-Starter-Project-1.png"><img class="size-full wp-image-1091 alignnone" src="http://www.gisandchips.org/wp-content/Screenshot-Web-Application-Starter-Project-1.png" alt="Screenshot-Web Application Starter Project" width="500" height="350" /></a></p>
<p>Ahora que sabemos cómo introducir un mapa de todo el planeta en nuestra aplicación, vamos a modificar algunas de las propiedades del objeto &#8220;MapWidget&#8221; que es el que representa al mapa. Primero vamos a añadir algunos componentes al mapa mediante el método &#8220;addControl&#8221;.</p>
<p>Podemos introducir una barra de navegación que permitirá hacer zoom añadiendo un objeto de tipo &#8220;LargeMapControl&#8221;. También podemos añadir un combo que permitirá seleccionar los distintos formatos de GoogleMaps utilizando el objeto &#8220;MenuMapTypeControl&#8221;.  El método &#8220;onModuleLoad&#8221; quedaría así:</p>
<pre class="brush: java; title: ; notranslate">
public void onModuleLoad() {
MapWidget mapWidget = new MapWidget();
mapWidget.setSize(&quot;1000&quot;, &quot;500&quot;);

//Añadimos la barra de navegación
mapWidget.addControl(new LargeMapControl());

//Añadimos el combo con los formatos
mapWidget.addControl(new MenuMapTypeControl());

RootPanel.get(&quot;mapContainer&quot;).add(mapWidget);
}
</pre>
<p>Ahora volvemos ejecutar la aplicación y podremos ver los nuevos componentes introducidos en el mapa.</p>
<p>Llagados a esta punto ya hemos comentado los pasos básicos que hay que hacer para integrar un mapa de Google Maps en una web realizada mediante GWT. En los próximos artículos veremos cómo se pueden hacer búsquedas en el mapa y cómo se puede personalizar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gisandchips.org/2009/11/20/google-web-toolkit-google-maps/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Hola Mundo con gvSIG 2.0 (y con Eclipse)</title>
		<link>http://www.gisandchips.org/2009/10/01/hola-mundo-con-gvsig-2-0-y-con-eclipse/</link>
		<comments>http://www.gisandchips.org/2009/10/01/hola-mundo-con-gvsig-2-0-y-con-eclipse/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 11:52:22 +0000</pubDate>
		<dc:creator>jpiera</dc:creator>
				<category><![CDATA[Análisis]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[gvSIG]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gisandchips.org/?p=210</guid>
		<description><![CDATA[Este tutorial es una guía para desarrollar el famoso &#8220;Hola Mundo&#8221; en gvSIG 2.0. Se va a partir de un sistema operativo en el que se ha instalado previamente el entorno de desarrollo Eclipse con el plugin para SVN Subversive y a partir de este entorno, se va a describir paso por paso las acciones [...]]]></description>
			<content:encoded><![CDATA[<p>Este tutorial es una guía para desarrollar el famoso &#8220;Hola Mundo&#8221; en <a href="http://www.gvsig.gva.es">gvSIG</a> 2.0. Se va a partir de un sistema operativo en el que se ha instalado previamente el entorno de desarrollo <a href="http://www.eclipse.org/">Eclipse</a> con el plugin para SVN <a href="http://www.eclipse.org/subversive/">Subversive</a> y a partir de este entorno, se va a describir paso por paso las acciones que se tienen que realizar para añadir una opción en el menú &#8220;Ayuda&#8221; de gvSIG llama &#8220;Saludo&#8221; que al pulsar sobre ella abrirá una ventana con el clásico &#8220;Hola Mundo&#8221;.</p>
<p>Este documento no pretende ser una guía de desarrollo de gvSIG 2.0.  Si se quiere disponer de toda la información de desarrollo es aconsejable visitar la <a href="http://www.gvsig.org">web de documentación del proyecto</a>.<span id="more-210"></span></p>
<p>El primer paso es crear una carpeta en nuestro sistema donde vamos a situar todos los proyectos que nos van a hacer falta, que serán tanto nuestro proyecto del Hola Mundo como todos los proyectos mínimos necesarios para poder generar un gvSIG 2.0. Otra opción que no está contemplada en este tutoria es la de poder instalar nuestra extensión en una versión de gvSIG previemente instalada desde un instalador.</p>
<p>Una vez creada la carpeta hay que abrir el Eclipse e indicarle establecer la carpeta que hemos creado como workspace. Para ello tendremos que ir a la opción &#8220;File-&gt;Switch Workspace-&gt;Other&#8221; y seleccionar la carpeta que hemos creado anteriormente.</p>
<p>El siguiente paso será descargarnos el proyecto &#8220;build&#8221; desde el repositorio de gvSIG. Este proyecto es necesario para poder construir nuestro sistema y es el único proyecto que hay que bajar manualmente. Para ello hay que abrir la vista de SVN del Eclipse seleccionando la opción &#8220;Window -&gt; Open Perspective -&gt; Other&#8221; y hay que seleccionar la opción &#8220;SVN Repository Exploring&#8221;. Si no aparece esta opción es porque no se ha instalado ningún plugin de SVN.</p>
<p style="text-align: center"><a href="http://www.gisandchips.org/wp-content/svn.png"><img class="size-large wp-image-212 aligncenter" src="http://www.gisandchips.org/wp-content/svn-1024x604.png" alt="Abrir la vista de SVN" width="500" height="300" /></a></p>
<p>A continuación se tiene que añadir manualmente el repositorio de gvSIG desde el que hay que descargar el proyecto &#8220;build&#8221;. Para ello hay que pulsar con el botón derecho del ratón sobre la ventana &#8220;SVN Repositories&#8221; y se abrirá una nueva ventana donde hay que introducir la dirección del repositorio de gvSIG (http://subversion.gvsig.org/gvSIG). Pulsaremos en &#8220;Finish&#8221; y si todo ha funcionado correctamente deberá aparecer el repositorio en la lista de servidores.</p>
<p>La lista de servidores es una lista en forma de árbol que podremos ir desplegando haciendo un doble &#8220;click&#8221; en cada uno de los nodos del árbol. Hay que abrir el servidor que hemos añadido y tendremos que buscar la ruta &#8220;<img src="///tmp/moz-screenshot.jpg" alt="" />branches -&gt; v2_0_0_prep -&gt; build&#8221;. Una vez estemos en ella, pulsamos con el botón derecho del ratón sobre la carpeta y seleccionamos la opción &#8220;Check Out&#8221; que descargará el proyecto en nuestro workspace.</p>
<p><a href="http://www.gisandchips.org/wp-content/chechout.png"><img class="aligncenter size-full wp-image-218" src="http://www.gisandchips.org/wp-content/chechout.png" alt="Check Out del proyecto build" width="500" height="300" /></a></p>
<p>Ahora hay que ir a la vista de Java para poder ver el proyecto que acabamos de bajar. Para ello hay que seleccionar la opción &#8220;Window -&gt; Open Perspective -&gt; Java&#8221;. Si todo ha ido bien el proyecto &#8220;build&#8221; se encontrará en la vista &#8220;Package&#8221;.</p>
<p>A continuación vamos a abrir la vista de Ant desde la cual vamos a poder ejecutar algunos objetivos automáticamente. Para ello hay que ir al menú &#8220;Window -&gt; Show View -&gt; Ant&#8221; y se abrirá una ventana nueva llamada &#8220;Ant&#8221;. El proyecto build tiene en su carpeta raíz un fichero llamado &#8220;build.xml&#8221; que contiene todos los objetivos que podemos ejecutar. Si pulsamos sobre ese fichero y sin soltar lo arrastramos y lo dejamos caer sobre la ventana de &#8220;Ant&#8221; automáticamente aparecerán los objetivos definidos en el fichero.</p>
<p style="text-align: center"><a href="http://www.gisandchips.org/wp-content/ant.png"><img class="aligncenter size-full wp-image-219" src="http://www.gisandchips.org/wp-content/ant.png" alt="Obetivos de Ant" width="500" height="300" /></a></p>
<p style="text-align: left">Lo primero que tenemos que hacer es modificar la configuración del Eclipse con algunos parámetros que necesitamos. Se puede hacer manualmente, pero para facilitar la configuración se ha creado un objetivo de Ant que lo hace todo por nosotros. Para ello tenemos que ir a la ventana de Ant y hacer un doble &#8220;click&#8221; en la opción &#8220;mvn-configure-eclipse-workspace&#8221;. Si todo ha funcionado correctamente se abrirá una ventana donde tendremos que escribir la ruta donde se encuentra el workspace que queremos configurar, que por defecto será el workspace actual. Pulsaremos en OK y esperaremos a que se ejecute el comando con éxito utilizando para ello la vista &#8220;Console&#8221;.</p>
<p style="text-align: left">Una vez que ya tenemos el workspace configurado correctamente vamos a bajarnos los fuentes del gvSIG. Para ello debemos desplegar el proyecto &#8220;build&#8221; e ir a la carpeta &#8220;projects&#8221; donde veremos unas cuantas carpetas que se corresponden a grupos de proyectos de gvSIG. Nosotros necesitamos lo mínimo para poder arrancar un gvSIG, así que tendremos que desplegar la carpeta &#8220;gvsig-base&#8221;, pinchar con el botón izquierdo del ratón sobre el archivo &#8220;build.xml&#8221; y arrastrarlo hasta la vista de Ant.</p>
<p style="text-align: left">Ahora tendremos en la vista de Ant dos configuraciones diferentes (gvsig-build-config y gvsig-group-base), por lo que hay que ir con precaución a la hora de seleccionar un objetivo. Seleccionaremos gvsig-group-base y a continuación haremos un doble &#8220;click&#8221; en el objetivo &#8220;svm.checkout.all&#8221;. Se abrirá una ventana que servirá para poder configurar el servidor desde el que vamos a descargar los fuentes. Por defecto no hay que modificar nada, salvo la versión del conector de SVN que tenemos instalada en el Eclipse. Si no se conoce  la versión, se puede consultar en &#8220;Window -&gt; Preferences -&gt; Team -&gt; SVN -&gt; SVN Connector&#8221;.</p>
<p style="text-align: left"><a href="http://www.gisandchips.org/wp-content/checkout.png"><img class="aligncenter size-full wp-image-237" src="http://www.gisandchips.org/wp-content/checkout.png" alt="checkout" width="500" height="300" /></a></p>
<p style="text-align: left">Pulsamos en &#8220;Ok&#8221; y si todo ha funcionado correctamente veremos en la ventana &#8220;Console&#8221; como la aplicación empieza a descargarse diversos proyectos. Una vez que haya terminado tendremos que importar los proyectos descargados. Para ello tenemos que pulsar con el botón derecho sobre la ventana de &#8220;Package&#8221; y seleccionar la opción &#8220;Import&#8221;. A continuación debemos seleccionar &#8220;General -&gt; Existing Projects into Workspace&#8221; y pulsa en &#8220;Next&#8221;. Seleccionamos la carpeta de nuestro workspace y veremos como aparece una lista de proyectos en la ventana. Pulsamos en &#8220;Finish&#8221; y automáticamente aparecen todos los proyectos que forman el gvSIG base en la ventana &#8220;Package&#8221;.</p>
<p>Ahora vamos a compilar todos los fuentes y vamos a arrancar gvSIG. Para ello hay que ir a la vista de Ant y seleccionando &#8220;gvSIG-group-base&#8221; ejecutaremos el objetivo &#8220;mvn-install&#8221;. Este objetivo compilará todos los proyectos que nos hemos bajado y creará una instalación de gvSIG en la carpeta &#8220;build -&gt; product&#8221;. En la ventana &#8220;console&#8221; podremos ver el progreso de la compilación. En la actualidad gvSIG 2.0 está en fase de desarrollo y es posible que el comando anterior falle porque ha fallado alguno de los tests unitarios. Si es el caso hay que repetir el proceso anterior pero ejecutando &#8220;mv-install-without-tests&#8221;, que hace lo mismo que el install pero sin generar ni ejecutar los tests unitarios.</p>
<p>Si todo ha funcionado correctamente ya estamos en disposición de poder ejecutar gvSIG 2.0 desde el Eclipse. Para eso tenemos que seleccionar la opción &#8220;Run -&gt; Debug Configurations -&gt; Java Application&#8221;  y seleccionar el lanzador de nuestro sistema operativo. Al pulsar en &#8220;Debug&#8221; debería arrancar gvSIG. Si no lo hace y sale un mensaje diciendo que no se encuentra alguna librería, es porque Eclipse &#8220;no se ha dado cuenta&#8221; de que se ha instalado la versión de gvSIG en la carpeta &#8220;build/product&#8221;. Refrescamos esta carpeta y volvemos a arrancar la aplicación.</p>
<p style="text-align: center"><a href="http://www.gisandchips.org/wp-content/run.png"><img class="aligncenter size-full wp-image-262" src="http://www.gisandchips.org/wp-content/run.png" alt="run" width="500" height="300" /></a></p>
<p>Ahora que ya tenemos la aplicación vamos a crear nuestra extensión para gvSIG. Primero, deberemos decidir si lo que vamos a crear es una librería o una extensión. La diferencia principalmente es que las librerías no tienen interfaz de usuario y no dependen de Andami mientras que las extensiones sí que dependen de Andami. Nuestra idea es mostrar el &#8220;Hola Mundo&#8221; en una nueva ventana por lo que vamos a generar una extensión.</p>
<p>Para ellos seleccionamos la opción &#8220;Run -&gt; External Tools -&gt; External Tools configurations&#8221;  y en la opción &#8220;Ant Build&#8221; seleccionamos y ejecutamos &#8220;create extension&#8221;. Se abrirá una ventana dónde tendremos que insertar algunos de los parámetros de configuración de &#8220;Maven&#8221;. El único que nos interesa en estos momentos en el &#8220;Maven artifactid&#8221;, cuyo valor corresponderá con el nombre del proyecto de Eclipse que se va a crear. en nuestro caso escribiremos &#8220;org.gvsig.holamundo&#8221; y pulsaremos el botón &#8220;OK&#8221;. En la ventana &#8220;Console&#8221; podremos seguir el proceso de creación del nuevo proyecto.</p>
<p>Una vez que tenemos el proyecto creado hay que importarlo del mismo modo que importamos anteriormente todos los proyectos que nos bajamos del repositorio. El proyecto que se ha creado ha tomado como base la extensión de centrar una vista en un punto por lo que tiene algunas clases que no vamos a utilizar. Podemos eliminar todas las clases del proyecto.</p>
<p>Ahora vamos a crear una clase llamada &#8220;HolaMundoExtension&#8221; que herede de &#8220;org.gvsig.andami.plugins.Extension&#8221; en el paquete &#8220;org.gvsig.holamundo&#8221; que será nuestro punto de entrada cuando el usuario seleccione la opción de menú &#8220;Hola Mundo&#8221; desde la aplicación.  Tendremos que hacer que los métodos &#8220;isVisible&#8221; e &#8220;isEnabled&#8221; devuelvan &#8220;true&#8221; y en el método &#8220;execute&#8221;pondremos el código que muestre una ventana con un &#8220;Hola Mundo&#8221;. La clase quedará del siguiente modo:</p>
<pre class="brush: java; title: ; notranslate">

import java.awt.Component;
import javax.swing.JOptionPane;
import org.gvsig.andami.PluginServices;
import org.gvsig.andami.plugins.Extension;

public class HolaMundoExtension extends Extension {

public void execute(String actionCommand) {
JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), &quot;Hola Mundo&quot;);
}

public void initialize() {

}

public boolean isEnabled() {
return true;
}

public boolean isVisible() {
return true;
}
}
</pre>
<p>Ahora tenemos que &#8220;enganchar&#8221; una opción de menú con nuestra clase editando el fichero &#8220;src/main/resources/config.xml&#8221; del modo que se muestra a continuación:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;plugin-config&gt;
&lt;libraries library-dir=&quot;lib&quot;/&gt;
&lt;depends plugin-name=&quot;org.gvsig.app&quot;/&gt;
&lt;resourceBundle name=&quot;text&quot;/&gt;
&lt;extensions&gt;
&lt;extension class-name=&quot;org.gvsig.helloworld.HolaMundoExtension&quot;
description=&quot;Extensión que hace un hola mundo&quot;
active=&quot;true&quot;&gt;
&lt;menu text=&quot;Prueba/Hola Mundo&quot;
tooltip=&quot;Hola Mundo&quot;
action-command=&quot;&quot;/&gt;
&lt;/extension&gt;
&lt;/extensions&gt;
&lt;/plugin-config&gt;
</pre>
<p>Para poder probar nuestra extensión, antes debemos compilarla e instalarla en gvSIG. Para ello debemos de seleccionar nuestro proyecto y a continuación ejecutar el objetivo &#8220;mvn install&#8221; que encontraremos en &#8220;Run -&gt; External Tools -&gt; External Tools configurations -&gt; Ant Build&#8221;. Si todo funciona correctamente, deberemos arrancar gvSIG del mismo modo que lo habíamos hecho anteriormente y aparecerá una nueva entrada en la barra de menú llamana &#8220;Prueba&#8221; desde la que podremos ejecutar nuestra extensión.</p>
<p style="text-align: center"><a href="http://www.gisandchips.org/wp-content/helloworld.png"><img class="aligncenter size-full wp-image-263" src="http://www.gisandchips.org/wp-content/helloworld.png" alt="helloworld" width="500" height="300" /></a></p>
<p style="text-align: left">Si se quiere profundizar un poco más para entender qué contiene un fichero &#8220;config.xml&#8221; o cómo se crean extensiones más complejas se puede consultar la web de documentación del proyecto <a href="http://www.gvsig.org">gvSIG</a>.</p>
<p style="text-align: left">
<p style="text-align: left">
<p style="text-align: left">
<p style="text-align: left">
]]></content:encoded>
			<wfw:commentRss>http://www.gisandchips.org/2009/10/01/hola-mundo-con-gvsig-2-0-y-con-eclipse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

