<?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; API</title>
	<atom:link href="http://www.gisandchips.org/tag/api/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>API de Google + OpenStreetMap y otros servicios georreferenciados</title>
		<link>http://www.gisandchips.org/2010/03/24/api-de-google-openstreetmap-y-otros-servicios-georreferenciados/</link>
		<comments>http://www.gisandchips.org/2010/03/24/api-de-google-openstreetmap-y-otros-servicios-georreferenciados/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 11:22:00 +0000</pubDate>
		<dc:creator>pepe</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[mashup]]></category>
		<category><![CDATA[OpenStreetMap]]></category>

		<guid isPermaLink="false">http://www.gisandchips.org/?p=1551</guid>
		<description><![CDATA[Voy a tratar de diseñar un visor de cartografía utilizando el API de Google Maps ( si quereis saber más sobre este tema, podeis leer artículos en esta misma web que hacen referencia:  Google Web Toolkit &#38; Google Maps, Integración de un servicio WMS en GoogleMaps usando GWT )  con la cartografía de OpenStreetMap y [...]]]></description>
			<content:encoded><![CDATA[<p>Voy a tratar de diseñar un visor de cartografía utilizando el <a href="http://code.google.com/intl/es/apis/maps/" target="_blank"><strong>API </strong>de <strong>Google Maps</strong></a> ( si quereis saber más sobre este tema, podeis leer artículos en esta misma web que hacen referencia:  <a title="Google Web Toolkit &amp; Google Maps" href="../2009/11/20/google-web-toolkit-google-maps/"><a href="http://www.gisandchips.org/2009/11/20/google-web-toolkit-google-maps/" target="_blank">Google Web Toolkit &amp;  Google Maps</a>,</a><a title="Integración de un servicio WMS en GoogleMaps usando GWT" href="http://www.gisandchips.org/2010/01/18/integracion-de-un-servicio-wms-en-googlemaps-usando-gwt/" target="_self"> Integración  de un servicio WMS en GoogleMaps usando GWT </a>)  con  la cartografía de <a href="http://www.openstreetmap.org" target="_blank"><strong>OpenStreetMap</strong></a> y además voy a incluir datos de servicios de tipo  georeferenciado (<a href="http://www.panoramio.com" target="_blank"><strong>panoramio</strong></a>, <a href="http://www.youtube.com" target="_blank"><strong>youtube</strong></a>, <a href="http://www.flickr.com" target="_blank"><strong>flickr</strong></a>, <strong>kml</strong>, <a href="http://es.wikipedia.org" target="_blank"><strong>wikipedia</strong></a>,&#8230;) en dicho mapa.</p>
<p><a href="http://www.gisandchips.org/wp-content/mapa.png"><img class="alignleft size-medium wp-image-1567" style="margin-left: 5px;margin-right: 5px;border: 0pt none" src="http://www.gisandchips.org/wp-content/mapa-300x170.png" alt="Muestra un curioso mapa mundial lleno de etiquetas de los servicios georreferenciados" width="300" height="170" /></a>Ya aviso que, una vez que muestro todos los servicios en el mapa,  queda  un mapa demasiado lleno de elementos, pero eso  es justo lo que  pretendo con este visor, tener todos los elementos en el mismo mapa y  que se visualicen tanto fotos, videos, artículos de la wikipedia,kml,&#8230;  a la vez, permitiéndo incluso añadir muchos más elementos.</p>
<p>En primer lugar, para mostrar el mapa de <strong>Google Maps</strong>, necesito registrar la clave previamente para el sitio web en cuestion que voy a tratar.</p>
<p><span id="more-1551"></span></p>
<p>Y una vez registrada la clave ya se puede realizar el visor,  la programación del visor sería la siguiente:</p>
<pre class="brush: php; title: ; notranslate">
//Hojas de estilo de google maps
 &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://ajax.googleapis.com/ajax/libs/yui/2.7.0/build/reset-fonts-grids/reset-fonts-grids.css&quot;&gt;
 &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://ajax.googleapis.com/ajax/libs/yui/2.7.0/build/base/base-min.css&quot;&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=clave_registrada_en_google&quot;&gt;&lt;/script&gt;

&lt;script
type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
 google.load(&quot;maps&quot;, &quot;2.x&quot;);

 function load()
 {
 if (!GBrowserIsCompatible())
 return;

 //definicion de variable de copyright del mapa
 var copyOSM = new GCopyrightCollection(&quot;GIS&amp;Chips 2010&quot;);
 copyOSM.addCopyright(new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, &quot; &quot;));

 //definicion de las tiles de OpenStreetMap que iran por bajo del mapa
 var tilesMapnik     = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png'});
 var tilesOsmarender = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://tah.openstreetmap.org/Tiles/tile/{Z}/{X}/{Y}.png'});
 var tilesCycle = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://a.andy.sandbox.cloudmade.com/tiles/cycle/{Z}/{X}/{Y}.png'});

 var mapMapnik     = new GMapType([tilesMapnik],     G_NORMAL_MAP.getProjection(), &quot;Mapnik&quot;);
 var mapOsmarender = new GMapType([tilesOsmarender], G_NORMAL_MAP.getProjection(), &quot;Osmarend&quot;);
 var mapCycleMap = new GMapType([tilesCycle], G_NORMAL_MAP.getProjection(), &quot;CycleMap&quot;);

 //definicion de mapa incluyendo los tres tiles de OpenStreetMap

 var map           = new GMap2(document.getElementById(&quot;map&quot;), { mapTypes: [mapMapnik, mapOsmarender,mapCycleMap] });

 //se añaden los controles de mapa del API de Google Maps
 map.addControl(new GLargeMapControl()); //control de desplazamiento y acercamiento de gran tamaño empleado en  Google Maps.
 map.addControl(new GMapTypeControl());  //Permite alternar entre los diferentes tipos de mapas (en este caso las tres tiles)
 map.addControl(new GOverviewMapControl()); //Este control nos permite mostrar una ventana de vista rápida contraible

//Situado el centro, las coordenadas de la Universidad de Alicante
 map.setCenter( new GLatLng(38.38575, -0.51486), 16);

 map.enableScrollWheelZoom();
 map.enableContinuousZoom();

 //Se definen como GLayers los servicios georeferenciados que quiero incluir

 var wikipedia = new GLayer(&quot;org.wikipedia.es&quot;);
 var panoramio = new GLayer(&quot;com.panoramio.all&quot;);
 var youtube = new GLayer(&quot;com.youtube.all&quot;);
 var webcam = new GLayer(&quot;com.google.webcams&quot;);

 map.addOverlay(wikipedia);
 map.addOverlay(panoramio);
 map.addOverlay(youtube);
 map.addOverlay(webcam);

 //En este caso como los servicios son un xml se añaden como GGeoXML(tanto el api de flickr como cualquier KML que quiera incluir lo debo definir as�)
 var geoXmlFlickr;
 geoXmlFlickr = new GGeoXml(&quot;http://api.flickr.com/services/feeds/geo/?tags=universidad+alicante&quot;);
 map.addOverlay(geoXmlFlickr);

//Ejemplo de introducción de un KML
 var tram = new GGeoXml(&quot;http://www.sigua.ua.es/web/utils/acceso/kml/TRAM4.kml&quot;);
 map.addOverlay(tram);
 }
</pre>
<p style="text-align: center">Aqui se puede ver como se muestra en el mapa el KML importado<br />
<a href="http://www.gisandchips.org/wp-content/kml.png"><img class="size-medium wp-image-1560 aligncenter" src="http://www.gisandchips.org/wp-content/kml-300x246.png" alt="Se muestra como queda la integracion de un archivo kml con información sobre una linea de tranvia en Alicante en el mapa anteriormente desarrollado" width="300" height="246" /></a></p>
<pre class="brush: xml; title: ; notranslate">

 &lt;/script&gt;

 &lt;/head&gt;

 &lt;body onload=&quot;load()&quot; onunload=&quot;GUnload()&quot;&gt;
 &lt;div&gt;
 &lt;div role=&quot;main&quot;&gt;
 &lt;div&gt;
 &lt;div id=&quot;map&quot; style=&quot;width: 100%; height: 600px;&quot;&gt;&lt;/div&gt;

 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
</pre>
<p>El visor completo con todos los datos estaría accesible desde la siguiente URL:<br />
<a class="aligncenter" title="Mapa " href="http://www.gisandchips.org/demos/pepe/osm/test.html" target="_blank">http://www.gisandchips.org/demos/pepe/osm/test.html</a></p>
<p>Como digo, este mapa incluye tantos elementos que a veces es un poco  extraño, pero es justo lo que pretendía, incluir muchos servicios en un  mismo mapa.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gisandchips.org/2010/03/24/api-de-google-openstreetmap-y-otros-servicios-georreferenciados/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Gizmo: GIS Meets Objects!</title>
		<link>http://www.gisandchips.org/2009/07/28/gizmo-gis-meets-objects/</link>
		<comments>http://www.gisandchips.org/2009/07/28/gizmo-gis-meets-objects/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 07:33:08 +0000</pubDate>
		<dc:creator>josetomas</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Gizmo]]></category>
		<category><![CDATA[object oriented geodatabases]]></category>
		<category><![CDATA[Perst.NET]]></category>

		<guid isPermaLink="false">http://www.gisandchips.org/wordpress/?p=93</guid>
		<description><![CDATA[De acuerdo, el título parece un tanto pretencioso. Hace años que la tecnología GIS y la programación orientada a objetos confluyeron para hacernos la vida más fácil. Sin embargo, si al empezar vuestro próximo proyecto les decís a vuestros compañeros &#8220;¡eh, esta vez no hay modelo entidad-relación!&#8221; seguro que provoca sorpresa. Efectivamente, alguno de vosotros [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">De acuerdo, el título parece un tanto pretencioso. Hace años que la tecnología GIS y la programación orientada a objetos confluyeron para hacernos la vida más fácil. Sin embargo, si al empezar vuestro próximo proyecto les decís a vuestros compañeros &#8220;¡eh, esta vez no hay modelo entidad-relación!&#8221; seguro que provoca sorpresa. Efectivamente, alguno de vosotros ya se lo imagina: os voy a hablar de bases de datos geográficas orientadas a objetos.<span id="more-93"></span> Las bases de datos orientadas a objetos (OODB) constituyen uno de los campos de investigación y desarrollo más activos en la actualidad, y de hecho son, junto con la interoperabilidad, la clave que determina el futuro de la tecnología GIS. Existen diversas alternativas de OODB de código abierto. Probablemente el proyecto más activo y difundido sea <a title="DB4O" href="http://www.db4o.com/" target="_blank">DB4O</a>. No renuncio a explorar a fondo este gestor más adelante, sobre todo teniendo en cuenta que la comunidad empieza a construir utilidades para el almacenamiento de datos espaciales como <a title="MapMe" href="http://code.google.com/p/mapme/" target="_blank">MapMe</a>. Sin embargo os confieso que en algún punto se cruzó en mi camino <a title="Perst" href="http://www.mcobject.com/perst" target="_blank">Perst</a>, otro OODB bastante popular, y al indagar acerca de los métodos de indexación y comprobar que implementa R-Trees me picó la curiosidad. Muchos de vosotros sabéis que un experimento lleva a otro, y luego a otro, y así sucesivamente hasta que sin darnos cuenta tenemos un API que &#8230; ¡sirve para algo! De modo que aquí os presento <strong>Gizmo</strong>, un API con el que podéis diseñar vuestra propia geodatabase orientada a objetos. Como su propio nombre indica, Gizmo es un trasto, es rudimentario, no hace muchas cosas, pero garantiza un rato de diversión a los curiosos dispuestos a escribir unas pocas líneas en C#.<br />
Para descargar el código fuente de Gizmo podéis hacer un <em>checkout </em>del siguiente repositorio Subversion de GIS&amp;Chips:</p>
<p style="padding-left: 30px"><code>svn co http://www.gisandchips.org/svn/gizmo/release_0.1</code></p>
<p style="text-align: justify">Obtendréis una solución <a title="SharpDevelop" href="http://www.icsharpcode.net/OpenSource/SD/Default.aspx" target="_blank">SharpDevelop</a> en C# con el proyecto del API <strong>Gizmo</strong>. El proyecto compila sobre el framework .NET 2.0 e incluye los ensamblados de referencia de <a title="Perst" href="http://www.mcobject.com/perst" target="_blank">Perst.NET</a>, <a title="NetTopologySuite" href="http://code.google.com/p/nettopologysuite/" target="_blank">NetTopologySuite</a> y <a title="ProjNET" href="http://projnet.codeplex.com/" target="_blank">ProjNET</a>.</p>
<p style="text-align: justify">
<h4>Cómo diseñar nuestro propio modelo</h4>
<p style="text-align: justify">En pocas palabras, Gizmo es un conjunto de interfaces y clases que facilitan al desarrollador la definición de su propio modelo de objetos geográficos de forma que éstos puedan ser almacenados en una base de datos Perst. Como ya he dicho, esto no deja de ser un experimento: no esperéis una herramienta CASE o un interfaz amigable de diseño a base de diagramas. De momento se trata de que podáis definir vuestras clases siguiendo una lógica coherente de derivación e implementación de métodos y propiedades sin preocuparos excesivamente de cómo funciona Perst. Recordad que, al fin y al cabo, el objetivo es que podáis persistir/serializar en un fichero binario cada objeto geográfico que instanciéis, para poder recuperarlo más adelante mediante criterios espaciales gracias a los índices R-Tree. No hay tablas, ni campos, ni registros. No hay <em>Object Relational Mapping</em>. Se trata de vuestros propios objetos, tal y como los hayáis definido en vuestro modelo, con el estado en que se encontraban al serializarlos.<br />
Pero veamos un ejemplo básico de aplicación en línea de comandos con C#. Para nuestro proyecto necesitaremos sendas referencias a Gizmo y Perst.NET. Para mayor comodidad incluid el proyecto de Gizmo en vuestra solución y añadidlo como referencia en vuestro proyecto de aplicación de consola. Respecto a Perst.NET, disponéis de una copia del ensamblado en el directorio <em>lib</em> del proyecto Gizmo (<em>lib\Perst4.NET\PerstNetGenerics.dll) </em>que podéis usar para agregarlo como referencia en vuestro proyecto.</p>
<p style="text-align: justify">Construiremos un modelo muy simple en el que vamos a representar parcelas y conducciones. Esta podría ser la definición de nuestra clase <em>Parcela</em>:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using Gizmo.Core;

namespace TestGizmo
{
 public class Parcela : GizmoObject
 {
  string _id = string.Empty;
  string _cultivo = string.Empty;

  public string Id {
   get { return _id; }
  }

  public string Cultivo {
   get { return _cultivo; }
  }

  public Parcela(string wkt, int srid,
                 string id, string cultivo) : base(wkt, srid)
  {
   _id = id;
   _cultivo = cultivo;
  }
 }
}
</pre>
<p>Y esta la definición de la clase <em>Conduccion:</em></p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using Gizmo.Core;

namespace TestGizmo
{
 public class Conduccion : GizmoObject
 {
  string _id = string.Empty;
  string _categoria = string.Empty;

  public string Id {
   get { return _id; }
  }

  public string Categoria {
   get { return _categoria; }
  }

  public Conduccion(string wkt, int srid,
                    string id, string categoria) : base(wkt, srid)
  {
  _id = id;
  _categoria = categoria;
  }
 }
}
</pre>
<p style="text-align: justify">Ya tenemos la primera clave para implementar nuestro modelo con Gizmo: nuestros tipos de entidad geográfica deben derivar de la clase <em>GizmoObject</em> y pasar en el constructor dos parámetros comunes a cualquier objeto geográfico en Gizmo, a saber, la geometría (en nuestro caso en WKT) y el identificador del Sistema de Referencia espacial.</p>
<p style="text-align: justify">El siguiente paso es crear el catálogo de índices de nuestro modelo. Esto nos permitirá implementar búsquedas eficientes por atributos. Para ello definamos una clase <em>Catalogo</em>:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using Gizmo.Catalogue;
using Perst;

namespace TestGizmo
{
  public class Catalogo : GizmoCatalogue
  {
    FieldIndex&lt;string, Parcela&gt; _parcelaIdIdx = null;
    FieldIndex&lt;string, Parcela&gt; _parcelaCultIdx = null;
    FieldIndex&lt;string, Conduccion&gt; _conduccionIdIdx = null;
    FieldIndex&lt;string, Conduccion&gt; _conduccionCatIdx = null;

   public FieldIndex&lt;string, Parcela&gt; ParcelaIdIdx {
     get { return _parcelaIdIdx; }
   }

   public FieldIndex&lt;string, Parcela&gt; ParcelaCultIdx {
     get { return _parcelaCultIdx; }
   }

   public FieldIndex&lt;string, Conduccion&gt; ConduccionIdIdx {
     get { return _conduccionIdIdx; }
   }

   public FieldIndex&lt;string, Conduccion&gt; ConduccionCatIdx {
     get { return _conduccionCatIdx; }
   }

   public Catalogo(Storage db, string name) : base(db, name)
   {
     _parcelaIdIdx = db.CreateFieldIndex&lt;string, Parcela&gt;(&quot;Id&quot;, true);
     _parcelaCultIdx = db.CreateFieldIndex&lt;string, Parcela&gt;(&quot;Cultivo&quot;, false);
     _conduccionIdIdx = db.CreateFieldIndex&lt;string, Conduccion&gt;(&quot;Id&quot;, true);
     _conduccionCatIdx = db.CreateFieldIndex&lt;string, Conduccion&gt;(&quot;Categoria&quot;, false);
   }

   public Catalogo()
   {
   }
 }
}
</pre>
<p style="text-align: justify">Como podeis ver aquí la clave está en derivar de la clase <em>GizmoCatalogue</em>, crear en el constructor un índice simple de Perst para cada una de las propiedades de nuestras clases <em>Parcela</em> y <em>Conduccion</em> e implementar los <em>getters </em>correspondientes. Alguien se preguntará &#8220;¿y qué hay del índice espacial?&#8221;: bueno, precisamente de esa tarea se ocupan Gizmo y Perst en última instancia.</p>
<p style="text-align: justify">Finalicemos nuestro modelo agregando una clase <em>layer</em> para cada uno de nuestros tipos de entidad geográfica. Esta es la clase <em>CapaParcelas</em>:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using Gizmo.Core;

namespace TestGizmo
{
 public class CapaParcelas : GizmoLayer
 {
  public Catalogo _root = null;

  protected override Type CatalogueType
  {
   get { return typeof(Catalogo); }
  }

  protected override Type TargetType
  {
   get { return typeof(Parcela); }
  }

  public CapaParcelas(GizmoStore gs, string name) : base(gs, name)
  {
   this._root = (Catalogo) base.Root;
  }

  public Parcela FindById(string id)
  {
   return _root.ParcelaIdIdx.Get(id);
  }

  public Parcela[] FindByCultivo(string cultivo)
  {
   return _root.ParcelaCultIdx.Get(cultivo, cultivo);
  }
 }
}
</pre>
<p style="text-align: justify">Y aquí tenéis la clase <em>CapaConducciones</em>:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using Gizmo.Core;

namespace TestGizmo
{
 public class CapaConducciones : GizmoLayer
 {
  Catalogo _root = null;

  protected override Type CatalogueType
  {
   get { return typeof(Catalogo); }
  }

  protected override Type TargetType
  {
   get { return typeof(Conduccion); }
  }

  public CapaConducciones(GizmoStore gs, string name) : base(gs, name)
  {
   this._root = (Catalogo) base.Root;
  }

  public Conduccion FindById(string id)
  {
   return _root.ConduccionIdIdx.Get(id);
  }

  public Conduccion[] FindByCategoria(string categoria)
  {
   return _root.ConduccionCatIdx.Get(categoria, categoria);
  }
 }
}
</pre>
<p style="text-align: justify">Las clases <em>layer</em> son el mecanismo para explotar objetos geográficos del mismo tipo. La clave está en designar el tipo asociado mediante la propiedad <em>TargetType</em> e implementar métodos de recuperación de objetos (<em>FindBy&#8230;</em>) mediante los correspondientes índices del catálogo.</p>
<p style="text-align: justify">
<h4 style="text-align: justify">¡Hagamos una prueba!</h4>
<p style="text-align: justify">Ya podemos editar la función <em>Main</em> de nuestra aplicación de consola. No olvidéis añadir el correspondiente  <em>using Gizmo.Core; </em>en la cabecera de vuestro fichero <em>Program.cs</em>. En primer lugar creamos nuestra base de datos geográfica (<em>gizmo.dbs)</em>, la abrimos y creamos las capas de parcelas y conducciones.</p>
<pre class="brush: csharp; title: ; notranslate">
GizmoStore gs = new GizmoStore(&quot;gizmo.dbs&quot;);
gs.Open();
CapaParcelas cp = new CapaParcelas(gs, &quot;parcelas&quot;);
CapaConducciones cc = new CapaConducciones(gs, &quot;conducciones&quot;);
</pre>
<p style="text-align: justify">A continuación almacenamos un  par de parcelas y una conducción a partir de geometrías en WKT en el sistema de proyección UTM 30N ED50 (SRID = 23030).</p>
<pre class="brush: csharp; first-line: 5; title: ; notranslate">
string wktP0 = &quot;POLYGON((10 10, 10 20, 20 20, 20 10, 10 10))&quot;;
string wktP1 = &quot;POLYGON((30 30, 30 40, 40 40, 40 30, 30 30))&quot;;
cp.Add(new Parcela(wktP0, 23030, &quot;P0&quot;, &quot;CEREAL&quot;));
cp.Add(new Parcela(wktP1, 23030, &quot;P1&quot;, &quot;FRUTAL&quot;));
string wktC0 = &quot;LINESTRING(5 5, 45 45)&quot;;
cc.Add(new Conduccion(wktC0, 23030, &quot;C0&quot;, &quot;PRIMARIA&quot;));
</pre>
<p>Como podéis ver,  almacenamos/persistimos nuestras parcelas y conducciones a través de la <em>layer</em> correspondiente invocando el método <em>Add</em>. En la <em>layer</em> <em>CapaParcelas </em>tenemos la parcela <strong>P0</strong> con cultivo de <strong>CEREAL</strong> y la <strong>P1</strong> con cultivo de <strong>FRUTAL</strong>. Y en la <em>layer CapaConducciones </em>tenemos la tubería <strong>C0</strong> de categoría <strong>PRIMARIA</strong>. Hasta aquí todo resulta bastante sencillo. Pero ¿y si queremos saber por qué parcelas pasa la tubería <strong>C0</strong>? Pues bien, esta es la respuesta en 2 líneas:</p>
<pre class="brush: csharp; first-line: 11; title: ; notranslate">

Conduccion c0 = cc.FindById(&quot;C0&quot;);
IGizmoObject[] query = cp.FindCrossedBy(c0);
</pre>
<p>Y si imprimimos las parcelas resultantes,</p>
<pre class="brush: csharp; first-line: 13; title: ; notranslate">

foreach (IGizmoObject p in query)
{
 Console.WriteLine((p as Parcela).Id);
}
gs.Close();
</pre>
<p>el resultado que debemos obtener es <strong>P0</strong> y <strong>P1</strong>.</p>
<p>Por cierto: ¡no olvidéis cerrar vuestra base de datos! (línea de código 17).</p>
<p>Eso es todo. Espero que disfrutéis un rato con Gizmo. En futuros artículos comentaré más aspectos de este proyecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gisandchips.org/2009/07/28/gizmo-gis-meets-objects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

