<?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>Blog Geo.NET &#187; PostgreSQL</title>
	<atom:link href="http://blog.geoprocessamento.net/tag/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.geoprocessamento.net</link>
	<description>Geoprocessamento, SIG e Sensoriamento Remoto</description>
	<lastBuildDate>Tue, 24 Aug 2010 02:33:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Introdução ao GeoDjango</title>
		<link>http://blog.geoprocessamento.net/2010/08/introducao-ao-geodjango/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introducao-ao-geodjango</link>
		<comments>http://blog.geoprocessamento.net/2010/08/introducao-ao-geodjango/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 02:16:24 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[GeoDjango]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Suporte Decisoes Municipais]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=955</guid>
		<description><![CDATA[


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/03/oopython/' rel='bookmark' title='Permanent Link: OOP com python &#8211; Uma breve introdução.'>OOP com python &#8211; Uma breve introdução.</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-o-que-e/' rel='bookmark' title='Permanent Link: #Python &#8211; o que é?'>#Python &#8211; o que é?</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Boa noite pessoal,</p>
<p style="text-align: justify;">Me desculpem pela demora em postar coisas novas no blog. Não esqueço deste espaço não, mas o tempo, continua difícil.</p>
<p style="text-align: justify;">Hoje quero falar um pouco sobre o <a title="geodjango" href="http://geodjango.org/" target="_blank">GeoDjango</a>, um <em>framework</em> MVC (<em>Model, View, Controller) - </em>na verdade, MTV (<em>Model, Template, View</em>) para programarmos aplicações <em>web</em> com grande <strong>agilidade</strong>.</p>
<p style="text-align: justify;">O lema do <em>framework </em>é <em>The Web Framework for Perfectionist</em>, ou seja: o <em>framework web</em> para perfeccionistas. Parece bom né?</p>
<p style="text-align: justify;">Quais são as vantagens de se ter um <em>framework</em> deste tipo (<a title="mvc" href="http://pt.wikipedia.org/wiki/MVC" target="_blank">MVC</a>/<a title="mtv" href="http://docs.djangoproject.com/en/dev/faq/" target="_blank">MTV</a>)?</p>
<ul style="text-align: justify;">
<li>Código de qualidade;</li>
<li>Aplicações prontas altamente configuráveis;</li>
<li>Aplicação do princípio <em>DRY - Don't Repeat Yourself</em> - coisa que na <em>web,</em> é bastante comum;</li>
<li>Total separação de responsabilidades: os modelos conversam com os bancos de dados, os templates desenham nossas páginas e as views representam a camada de negócios - ou seja: código (re)usável;</li>
<li>Entre outras;</li>
</ul>
<p style="text-align: justify;">O MTV/MVC é apenas uma forma de se trabalhar/arquitetar uma solução. Este tipo de desenho de solução se encaixa muito bem para desenvolvimento <em>web</em>, pelos motivos acima. É muito menos trabalho, com alto reuso de código - ou seja, um ganho de produtividade tremendo para quem desenvolve e <strong>aumento da qualidade</strong> para os usuários.</p>
<p style="text-align: justify;">Existem diversos <em>frameworks</em> deste tipo por aí, muitos deles são bons e na verdade conheço dois: Django/GeoDjango e ASP.MVC. Não quero comparar os dois, pois são classes de softwares diferentes, ambos muito bons e cada um com suas particularidades. O GeoDjango é <strong>muito</strong> atrativo pelo fato de trabalhar nativamente com vários bancos de dados, inclusive com <em>PostGIS</em> e outros bancos de dados espaciais menos conhecidos (MySql Spatial, Spatial Lite - por exemplo) e de conter pacotes específicos para o desenvolvimento de aplicações SIG.</p>
<p style="text-align: justify;">O que precisamos para brincar com o tal do GeoDjango/Django?</p>
<p style="text-align: justify;">Bem, o Django, projeto pai, que contém o código do GeoDjango é feito todo em Python. Novamente, uma linguagem fácil, tranquila de se aprender e <strong>muito</strong> flexível. <em>Web</em> e flexibilidade combinam. É tudo Python. Até os <em>templates</em> contém código Python, da mesma maneira que código .asp pode conter código C#.</p>
<p style="text-align: justify;">Pré-requisitos (sempre existem, não?):</p>
<ul>
<li><a title="python" href="http://www.python.org" target="_blank">Python 2.5 ou maior;</a></li>
<li><a title="djangoproject" href="http://www.djangoproject.com" target="_blank">Django 1.x;</a></li>
<li><a title="Geos" href="http://trac.osgeo.org/geos/" target="_blank">GeOS;</a></li>
<li><a title="proj" href="http://trac.osgeo.org/proj/" target="_blank">PROJ;</a></li>
<li><a title="gdal" href="http://www.gdal.org/" target="_blank">GDAL;</a></li>
</ul>
<p>Para os que desejam utilizar o banco de dados <strong>PostgreSQL/PostGIS (altamente recomendado!)</strong>:</p>
<ul>
<li><a title="psycopg2" href="http://initd.org/" target="_blank">pyscopg2;</a></li>
</ul>
<p style="text-align: justify;">Pode parecer muita coisa, mas não é. Você precisa das bilbiotecas e os <em>python bindings</em> para fazer toda essa máquina de guerra funcionar. Uma dica: quem usa/usará PostgreSQL já tem o GeOS instalado (que é o mais complicado de obter/compilar). As outras são facéis de se arrumar e configurar.</p>
<p style="text-align: justify;">Chega de papo. O que o Django/GeoDjango pode fazer por mim? Vamos à uma demonstração de código dos models espaciais:</p>
<pre name="code" class="python">from django.contrib.gis.db import models

# note que aqui herdamos em nossa classe
# a classe Models. Ela contém toda a funcionalidade que precisamos.
class Setor(models.Model):
    nome_setor = models.CharField(max_length=100,unique=True)
    poligono_setor = models.PolygonField(srid=29192)

    objects = models.GeoManager()

class Bairro(models.Model):
    nome_bairro = models.CharField(max_length=100,unique=True)
    setor = models.ForeignKey(Setor)
    poligono_bairro = models.PolygonField(srid=29192)

    # vamos dizer ao admin do python que usaremos mapas
    # para editar o poligono_bairro
    objects = models.GeoManager()
</pre>
<p>Só isso? Só isso. O Django já sabe o que fazer com nossos modelos. Note que  não definimos de forma explícita uma chave primária, mas podemos caso precisarmos. O Django dá suporte para diversos tipos de dados, incluindo imagens, arquivos, datas, entre outros <strong>e suporta herança entre modelos</strong>. Isso significa que podemos economizar muito código utilizando os simples conceitos da <a title="oop" href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos" target="_blank">programação orientada à objetos</a>.</p>
<p>Todos os modelos devem ter tabelas no banco de dados que correspondam à ele, com exceção do caso de modelos abstratos, os quais <strong>não possuem tabela nos bancos de dados</strong>. Eles servem basicamente para usarmos as funcionalidades da OOP.</p>
<pre name="code" class="python">from django.contrib.gis.db import models

class TipoLogradouro(models.Model)
    descricao_tipo_logradouro = models.CharField(max_length=30)

class ResultadoGeocodificacao(models.Model):
    tipo_logradouro = models.ForeignKey(TipoLogradouro)
    nome_logradouro = models.CharField(max_length=100)
    numero = models.Integer()
    # se não especificarmos o srid, o default é WGS84
    ponto_geocodificado = models.PointField()

    objects = models.GeoManager()

    class Meta:
        abstract = True

class AcidenteGeocodificado(models.Model,ResultadoGeocodificacao):
    numero_feridos = models.IntegerField()
    numero_veiculos = models.IntegerField()
</pre>
<p style="text-align: justify;">A única diferença entre o primeiro e o segundo exemplo é a adição da classe interna Meta, em ResultadoGeocodificacao, com o atributo <em>abstract = True</em>. Esta única linha diz ao Django que ele não deve criar uma tabela correspondente para ResultadoGeocodificacao, mas, AcidenteGeocodificado irá herdar toda informação de ResultadoGeocodificado e terá sua própria tabela no banco de dados, com todos os campos especificados em ResultadoGeocodificado e AcidenteGeocodificado. Divertido não?</p>
<p style="text-align: justify;">Lembram dos nossos posts sobre a administração pública e modelos de dados? Quero continuar a série, terminar a modelagem de dados (que é bastante simples) e iniciar no <strong>desenvolvimento</strong> desta aplicação em GeoDjango.</p>
<p style="text-align: justify;">
<div id="attachment_957" class="wp-caption aligncenter" style="width: 215px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/08/Django.jpg"><img class="size-medium wp-image-957" title="Django" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/08/Django-205x300.jpg" alt="Django" width="205" height="300" /></a><p class="wp-caption-text">Django, o poderoso framework!</p></div>
<p style="text-align: justify;">O que acharam do GeoDjango/Django?</p>
<p style="text-align: justify;">Um abraço,</p>
<p style="text-align: justify;">George R. C. Silva</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/03/oopython/' rel='bookmark' title='Permanent Link: OOP com python &#8211; Uma breve introdução.'>OOP com python &#8211; Uma breve introdução.</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-o-que-e/' rel='bookmark' title='Permanent Link: #Python &#8211; o que é?'>#Python &#8211; o que é?</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/08/introducao-ao-geodjango/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Construindo funcionalidades para o WKT Raster</title>
		<link>http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=construindo-funcionalidades-para-o-wkt-raster</link>
		<comments>http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 13:54:48 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Banco de Dados Geográficos]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[WKTRaster]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=945</guid>
		<description><![CDATA[No post anterior, falamos um pouquinho sobre como o WKT Raster funciona. Hoje gostaria de mostrar um pouquinho sobre as maquinações que ando desenvolvendo para o PostGIS e WKT Raster. Em tese, se o raster está armazenado no banco e conseguimos determinar o valor de cada pixel, poderíamos usar a SQL para realizar álgebra de [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/' rel='bookmark' title='Permanent Link: PostGIS WKT Raster'>PostGIS WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/' rel='bookmark' title='Permanent Link: Funções PostGIS #2'>Funções PostGIS #2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/' rel='bookmark' title='Permanent Link: Funções PostGIS #1'>Funções PostGIS #1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">No post anterior, falamos um pouquinho sobre como o WKT Raster funciona. Hoje gostaria de mostrar um pouquinho sobre as maquinações que ando desenvolvendo para o PostGIS e WKT Raster.</p>
<p style="text-align: justify;">Em tese, se o <em>raster</em> está armazenado no banco e conseguimos determinar o valor de cada pixel, poderíamos usar a SQL para realizar álgebra de mapas? A resposta é sim, podemos. É claro, já existem softwares especializados em realizar álgebra de mapas, como o <a title="idrisi" href="http://www.idrisi.com.br/" target="_blank">IDRISI</a>,<a title="envi" href="http://www.envi.com.br/" target="_self"> ENVI</a>, <a title="spring" href="http://www.dpi.inpe.br/spring/" target="_blank">SPRING</a>, ArcGIS (com <a title="spatial" href="http://www.esri.com/software/arcgis/extensions/spatialanalyst/index.html" target="_blank">Spatial Analyst</a>), o módulo <a title="sextante" href="http://forge.osor.eu/plugins/wiki/index.php?id=13&amp;type=g" target="_blank">Sextante</a> do gvSIG, <a title="whitebox" href="http://www.uoguelph.ca/~hydrogeo/Whitebox/index.html" target="_blank">WhiteBox</a>, entre outros.</p>
<p style="text-align: justify;">A vantagem de fazermos isto no PostGIS é que podemos aproveitar de algumas funcionalidades do banco de dados para realizar atualizações automáticas (funciona, mas a perfomance não deve ser das melhores), controlar melhor o acesso aos rasters - centralizando tudo em uma única localização, backup, etc.</p>
<p style="text-align: justify;">Existem diversas funções para análise espacial de rasters, incluindo as matemáticas, lógicas, entre outras. Hoje irei mostrar apenas algumas matemáticas, que são bem simples. O módulo WKT Raster já planeja construir em C (linguagem nativa do PostgreSQL) algumas funções para análise espacial, mas enquanto isto não acontece, vamos levando com estas aqui.</p>
<p style="text-align: justify;">Importante: estas funções só operam com <em>rasters</em> de uma única banda. Todas as operações são realizadas na banda 1. Nenhuma operação é realizada na banda 2 ou 3 - se bem que o suporte para tal é simples de ser construído.</p>
<p style="text-align: justify;">Cuidado ao utilizar estas funções. Caso você sobreescreva seu <em>raster</em>, não o conseguirá de volta - caso precise.</p>
<h3 style="text-align: justify;">ST_Plus</h3>
<p style="text-align: justify;">Esta função adiciona um valor <em>double precision</em> ao nosso raster de interesse. Se o pixel tem valor 1 e nosso argumento é 1, o resultado daquele pixel será 2. Esta função tem como entrada um raster e um valor numérico. O retorno da função é um objeto raster completo.</p>
<pre name="code" class="SQL">
CREATE OR REPLACE FUNCTION ST_Plus(p_grid raster, z double precision)
	RETURNS raster AS
$$
DECLARE
	w integer;
	h integer;
	z1 integer;

	grid raster;
BEGIN

	SELECT
		ST_Width(p_grid),
		ST_Height(p_grid)
	 into w,h;

	-- realizar cópia do raster original
	grid := p_grid;

	for i in 1..h loop
		for j in 1..w loop

			-- selecting cell value
			z1 := ST_Value(p_grid,i,j);
			grid := st_setvalue(grid,1,i,j,z1 + z);

		end loop;
	end loop;

	return grid;
END
$$
language 'plpgsql';
</pre>
<p style="text-align: justify;">A função é bem simples. Ela copia o raster original em memória e adiciona o valor à cada pixel. Sem segredos. Como usá-la? Recomendo primeiramente, duplicar sua coluna do tipo<em> raster</em>, pois a função de adição de colunas <em>raster</em> é bastante longa e com parâmetros meio obscuros. Procure o arquivo SQL gerado pelo gdal2wktraster e ache a linha que adiciona a coluna. Modifique o nome da coluna e execute este comando novamente. Depois disso popule a coluna com os novos valores.</p>
<pre name="code" class="SQL">
SELECT AddRasterColumn('public','teste_raster','grid_stplus',-1, ARRAY['16BUI'], false,
       true, null, 0.000833, -0.000833, 9, 9,
           ST_Envelope(
               ST_SetSRID('POLYGON((-49.500416 -18.000416,-49.500416 -19.000416,-48.000416 -18.000416,-48.000416 -19.000416,-49.500416 -18.000416))'::geometry, -1)));

UPDATE teste_raster SET grid_stplus = ST_Plus('nome_da_coluna_raster_original',10);
</pre>
<p style="text-align: justify;">Faça um teste com ST_Value para identificar se tudo correu bem. Neste teste, somamos 10 unidades ao valor de cada pixel da coluna original raster. Por que estamos criando uma coluna extra para armazenar nosso novo raster? Se alterarmos o raster original, não conseguiremos ele de volta, portanto, cuidado ao utilizar as funções.</p>
<h3>ST_Minus</h3>
<p>De forma similar à ST_Plus, ST_Minus vai subtrair determinado valor de cada pixel de nosso raster e nos trará como resultado o <em>raster</em> modificado.</p>
<pre name="code" class="SQL">
CREATE OR REPLACE FUNCTION ST_Minus(p_grid raster, z double precision)
	RETURNS raster AS
$$
DECLARE
	w integer;
	h integer;
	z1 integer;

	grid raster;
BEGIN

	SELECT
		ST_Width(p_grid),
		ST_Height(p_grid)
	 into w,h;

	-- realizar cópia do raster original
	grid := p_grid;

	for i in 1..h loop
		for j in 1..w loop

			-- selecting cell value
			z1 := ST_Value(p_grid,i,j);
			grid := st_setvalue(grid,1,i,j,z1 - z);

		end loop;
	end loop;

	return grid;
END
$$
language 'plpgsql';
</pre>
<p>Recomendo testar da mesma maneira que a função anterior. O uso é o mesmo - modificando o nome da função.</p>
<h3>ST_Plus</h3>
<p>Esta função realiza a multiplicação do valor do pixel. Simples e direta.</p>
<pre name="code" class="SQL">
CREATE OR REPLACE FUNCTION ST_Times(p_grid raster, z double precision)
	RETURNS raster AS
$$
DECLARE
	w integer;
	h integer;
	z1 integer;

	grid raster;
BEGIN

	SELECT
		ST_Width(p_grid),
		ST_Height(p_grid)
	 into w,h;

	-- realizar cópia do raster original
	grid := p_grid;

	for i in 1..h loop
		for j in 1..w loop

			-- selecting cell value
			z1 := ST_Value(p_grid,i,j);
			grid := st_setvalue(grid,1,i,j,z1 * z);

		end loop;
	end loop;

	return grid;
END
$$
language 'plpgsql';
</pre>
<p>Use-a do mesmo jeito que as anteriores.</p>
<h3>ST_Divide</h3>
<pre name="code" class="SQL">
CREATE OR REPLACE FUNCTION ST_Divide(p_grid raster, z double precision)
	RETURNS raster AS
$$
DECLARE
	w integer;
	h integer;
	z1 integer;

	grid raster;
BEGIN
	if (z = 0) then
		return p_grid;
	end if;

	SELECT
		ST_Width(p_grid),
		ST_Height(p_grid)
	 into w,h;

	-- realizar cópia do raster original
	grid := p_grid;

	for i in 1..h loop
		for j in 1..w loop

			-- selecting cell value
			z1 := ST_Value(p_grid,i,j);
			grid := st_setvalue(grid,1,i,j,z1 / z);

		end loop;
	end loop;

	return grid;
END
$$
language 'plpgsql';
</pre>
<h3>ST_Power</h3>
<p>Esta função eleva o valor da célula ao valor passado como parâmetro na função. Se temos uma célula de valor 2, e passamos 2 como parâmetro, teremos o 4 como resultado (2^2);</p>
<pre name="code" class="SQL">
CREATE OR REPLACE FUNCTION ST_Power(p_grid raster, z double precision)
	RETURNS raster AS
$$
DECLARE
	w integer;
	h integer;
	z1 integer;

	grid raster;
BEGIN

	SELECT
		ST_Width(p_grid),
		ST_Height(p_grid)
	 into w,h;

	-- realizar cópia do raster original
	grid := p_grid;

	for i in 1..h loop
		for j in 1..w loop

			-- selecting cell value
			if z = 0 then
				grid := st_setvalue(grid,1,i,j,1);
			else
				z1 := st_value(p_grid,i,j);
				grid := st_setvalue(grid,1,i,j,z1 ^ z);
			end if;

		end loop;
	end loop;

	return grid;
END
$$
language 'plpgsql';
</pre>
<p style="text-align: justify;">E assim podemos construir funções que alterem nossos rasters originais. São funções simples, praticamente demonstrativas. Na sequência demonstraremos algumas funções mais interessantes, como <strong>declividade, cálculo de fluxo de direção, identificação de depressões, eliminação de depressões, </strong>entre outras.</p>
<p style="text-align: justify;">Um abraço,</p>
<p style="text-align: justify;">George R. C. Silva</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/' rel='bookmark' title='Permanent Link: PostGIS WKT Raster'>PostGIS WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/' rel='bookmark' title='Permanent Link: Funções PostGIS #2'>Funções PostGIS #2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/' rel='bookmark' title='Permanent Link: Funções PostGIS #1'>Funções PostGIS #1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PostGIS WKT Raster</title>
		<link>http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=postgis-wkt-raster</link>
		<comments>http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 03:00:15 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[Banco de Dados Geográficos]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[WKTRaster]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=931</guid>
		<description><![CDATA[Buenas pessoal, Como estão as coisas? Hoje vamos conversar um pouquinho sobre o WKT Raster. O WKT Raster é um projeto para implementar suporte aos famosos grids, rasters, imagens ao PostGIS. WKT vem de Well Known Text (algo como "texto bem conhecido"). O projeto já tem código compilado e funcionando e tomei a semana para [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/' rel='bookmark' title='Permanent Link: Construindo funcionalidades para o WKT Raster'>Construindo funcionalidades para o WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Buenas pessoal,</p>
<p style="text-align: justify;">Como estão as coisas? Hoje vamos conversar um pouquinho sobre o WKT Raster.</p>
<p style="text-align: justify;">O WKT Raster é um projeto para implementar suporte aos famosos <em>grids, rasters, </em>imagens ao PostGIS. WKT vem de <em>Well Known Text</em> (algo como "texto bem conhecido").</p>
<p style="text-align: justify;">O projeto já tem código compilado e funcionando e tomei a semana para testá-lo de acordo. A implementação veio da especificação desenvolvida por Pierre Racine. O projeto tem como objetivo integrar-se perfeitamente ao engine do PostGIS já existente, sendo possível executar operações espaciais / álgebra de mapas, carregar rasters multi-bandas, entre outras coisas deliciosas.</p>
<p style="text-align: justify;">Este projeto é muito interessante, pois podemos armazenar os rasters dentro do banco de dados, garantindo ou excluindo acesso à quem realmente precisa, ao invés de ficarmos com milhares de cópias por aí (imagine um escritório com 20 analistas GIS - qual é quantidade de informações duplicadas), sem saber ao certo qual é a mais atual ou com melhor qualidade - enfim, nos garante todas as vantagens do armazenamento centralizado em banco de dados. Não necessariamente <strong>precisamos</strong> armazenar os dados no PostgreSQL, podemos deixá-los em HD e adicionar somente os metadados e acessá-los da mesma forma, caso você esteja preocupado com disco <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Em suma, é demais!</p>
<p style="text-align: justify;">Vamos comentar com instalar essa belezinha no seu PostgreSQL - em Windows XP. Linux <em>users, sorry.</em></p>
<h3 style="text-align: justify;">Pré-requisitos</h3>
<p style="text-align: justify;">Sempre existem né?</p>
<ul style="text-align: justify;">
<li>PostgreSQL/PostGIS instalado. O PostGIS deve 1.4 ou maior, determinando também a versão do PostgreSQL: 8.3 ou maior;</li>
<li><a title="python" href="http://www.python.org/" target="_blank">Python</a>;</li>
<li><a title="gdal" href="http://pypi.python.org/pypi/GDAL/1.6.1" target="_blank">GDAL/python</a>;</li>
<li><a title="wktraster" href="http://www.postgis.org/download/windows/pg83/experimental/wktraster/" target="_blank">WKT Raster</a>;</li>
</ul>
<h3 style="text-align: justify;">Instalação</h3>
<p style="text-align: justify;">1) Instale o Python, 2.5 ou 2.6. Estou usando o 2.5, que foi instalado junto com o ArcGIS. Portanto, se você tem esta instação específica, não se preocupe. Esta instalação é bem simples. Dois cliques, pá pum, está instalado.</p>
<p style="text-align: justify;">2) Instale os GDAL bindings. Para fazer isso é só descompactar a pasta zipada e colocá-la no diretório que mais lhe agradar. Coloquei a minha pasta (gdalwin32-1.6) no diretório C:\.</p>
<p style="text-align: justify;">2.1) Vá em Painel de Controle &gt; Sistema &gt; Avançado &gt; Variáveis de Ambiente. Procure a variável PATH. Ela é composta de vários diretórios separados por um ponto-e-vírgula, correto? Adicione o diretório C:\gdalwin32-1.6\bin nesta listinha e adicione um ; no final. Claro, se você pos a pasta do gdal em outro diretório, faça as alterações pertinentes.</p>
<p style="text-align: justify;">2.2 ) Ainda em variáveis de ambiente, adicione uma nova variável, chamada GDAL_DATA e adicione o caminho C:\gdalwin32-1.6\data como caminho. Como esta variável de ambiente é usada somente pelo GDAL, não se preocupe em colocar o ;. Mas se colocar também não faz mal. Dê OK para salvar as variáveis de ambiente. Os bindings do GDAL para Python já estão instalados. Você pode acessá-los e utilizar o GDAL para um monte de coisas, como converter coordenadas de rasters, reprojetá-los, etc. tudo usando uma linha de comando.</p>
<p style="text-align: justify;">3) Descompacte o pacote do WKT Raster.</p>
<p style="text-align: justify;">3.1) Copie o arquivo rtpostgis.dll para a pasta <strong>lib</strong> do PostgreSQL. Geralmente é algo como C:\Program Files\PostgreSQL\8.x\lib;</p>
<p style="text-align: justify;">3.2) Copie os arquivos gdal2wktraster.py e libgdal.dll para a pasta <strong>bin</strong> da sua instalação do PostgreSQL. Fácil né?</p>
<p style="text-align: justify;">3.3) Vamos instalar os comandos e funções do Wkt Raster no nosso banco agora. Abra o PgAdmin3 ou o console sql do Postgres e conecte-se ao banco de dados alvo. Feito isso, rode os comandos que se encontram na pasta share\contrib\ do pacote WktRaster. Feito isso, teste se o WKT Raster está funcionando apropriadamente usando o comando SQL:</p>
<p style="text-align: justify;">SELECT postgis_raster_lib_build_date(),postgis_raster_lib_version();</p>
<p style="text-align: justify;">Caso o comando tenha sucesso, tudo foi instalado com sucesso.</p>
<p style="text-align: justify;">A instalação termina aqui. Mas como carregar um raster para dentro de nosso banco de dados? Podemos utilizar a ferramenta em Python desenvolvida para este propósito, o script gdal2wktraster.py</p>
<h3 style="text-align: justify;">Carregar um raster para o banco de dados</h3>
<p style="text-align: justify;">Esta ferramenta é uma aplicação em linha de comando, bastante fácil de utilizar. O resultado dela é um script .sql que você pode rodar pelo console sql ou pelo PgAdmin3.</p>
<p style="text-align: justify;">Abra um console DOS e digite:</p>
<p style="text-align: justify;">python "CaminhoParaOArquivo\gdal2wktraster.py" --help</p>
<p style="text-align: justify;">Isto lhe deve dar todas as opções da ferramenta.</p>
<p style="text-align: justify;">Algumas:</p>
<ul style="text-align: justify;">
<li><strong>-t </strong>nome da tabela à ser criada no PostGIS, e.g. -t teste_raster;</li>
<li><strong>-o </strong>nome do arquivo de saída, e.g. -o srtm.sql;</li>
<li><strong>-k</strong> especifica o tamanho <em>tile</em>. Esta opção é muito importante, pois divide seu <em>raster </em><strong>original</strong> em diversos registros cada um com este tamanho, <strong>em pixels.</strong> e.g. -k 90x90; Caso você não utilize esta opção, seu raster original ocupará apenas um único registro da tabela. Se você utilizá-la, você diz ao PostGIS: pegue este raster, fatie-o em pedaços de tal tamanho e insira-os nesta tabela!</li>
<li><strong>-f </strong>especifica o nome da coluna do tipo raster. e.g. -f grid;</li>
<li><strong>-r</strong> esta é a opção mais importante de todas, com ela especificamos o arquivo original à ser carregado. e.g. -r "CaminhoDoArquivoRaster\arquivo.tif";</li>
</ul>
<p style="text-align: justify;">Exemplo de um comando completo</p>
<p style="text-align: justify;">C:\Python25\python.exe "C:\Program Files\PostgreSQL\8.3\bin\gdal2wktraster.py" - r "C:\srtm.tif" -k 90x90 -f grid -t srtm -o srtm.sql</p>
<p style="text-align: justify;">Esta ferramenta é bem fácil de utilizar e gera um SQL limpinho, só faltando rodá-lo dentro do banco de dados.</p>
<p style="text-align: justify;">Estou desenvolvendo algumas ferramentinhas de análise espacial, em especial ferramentas para extração automática de feições - algumas já estão prontas, outras ainda no forno, mas logo logo falo sobre elas! Esta é a <a title="wktoficial" href="http://trac.osgeo.org/postgis/wiki/WKTRaster" target="_blank">página oficial do WKT Raster</a>.</p>
<p style="text-align: justify;">O que acharam?</p>
<p style="text-align: justify;">Abraços!</p>
<p style="text-align: justify;">George R. C. Silva</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/' rel='bookmark' title='Permanent Link: Construindo funcionalidades para o WKT Raster'>Construindo funcionalidades para o WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Desenvolvendo um SIG para Suporte de Decisões Municipais #2</title>
		<link>http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=postgis-decisoes-municipais-2</link>
		<comments>http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 03:09:21 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Suporte Decisoes Municipais]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=937</guid>
		<description><![CDATA[Olá pessoal, boa noite. No post anterior falamos sobre a modelagem de um sistema que atendesse as necessidades de uma prefeitura e mostramos como modelar a parte de sistema viário. O sistema viário foi modelado primeiro pois ele é de fato, o coração de uma cidade e muita coisa acontence "em torno" do sistema viário. [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-1/' rel='bookmark' title='Permanent Link: Desenvolvendo um SIG para Suporte de Decisões Municipais'>Desenvolvendo um SIG para Suporte de Decisões Municipais</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/history-tables-pt-1/' rel='bookmark' title='Permanent Link: History Tables &#8211; pt 1'>History Tables &#8211; pt 1</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/' rel='bookmark' title='Permanent Link: Funções PostGIS #1'>Funções PostGIS #1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal, boa noite.</p>
<p style="text-align: justify;">No post anterior falamos sobre a modelagem de um sistema que atendesse as necessidades de uma prefeitura e mostramos como modelar a parte de sistema viário. O sistema viário foi modelado primeiro pois ele é de fato, o coração de uma cidade e muita coisa acontence "em torno" do sistema viário.</p>
<p style="text-align: justify;">Estamos assumindo com nosso modelo, que construíremos um sistema de <em>geocoding</em>, capaz de localizar endereços em nossa base de logradouros. Através deste sistema construíremos localizadores de diversos tipos de feição, como acidentes de trânsito, pontos de ônibus, focos de dengue, entre outras.</p>
<p style="text-align: justify;">Hoje iremos conversar sobre a modelagem do sistema de transportes. Obviamente é um modelo simples, que não atende todas as necessidades de uma empresa/prefeitura para administrar o sistema de transporte público, mas já ajuda. Bem, do que é feito um sistema de transporte público? Falaremos aqui somente de linhas, pontos de parada, sentidos (bairro-centro, centro-bairro) e horários. Poderíamos muito bem falar de localização em tempo real, relatórios de viagem, etc., mas foge um pouco do objetivo da série - de ser uma introdução à modelagem de um sistema completo.</p>
<h3 style="text-align: justify;">2.2 - Sistema de Transporte Público</h3>
<p>Vamos começar com a modelagem do nosso sistema de Transporte. Vamos modelar Pontos de Parada, Linhas, Sentidos, e Horários.</p>
<pre name="code" class="sql">
CREATE TABLE tp_ponto_parada
    (
        id_tp_ponto_parada serial not null,
        dc_tp_ponto_parada varchar(50) not null,
        constraint tp_ponto_parada_pk PRIMARY KEY (id_tp_ponto_parada),
        constraint tp_ponto_parada_un UNIQUE (dc_tp_ponto_parada)
    );

    CREATE TABLE ponto_parada
    (
        id_ponto_parada serial not null,
        dc_ponto_parada varchar(255) not null, -- descricao do ponto
        tp_ponto_parada integer not null references tp_ponto_parada (id_tp_ponto_parada),
        constraint ponto_parada_pk PRIMARY KEY (id_ponto)
    );

    -- vamos adicionar nossa coluna geométrica a ponto_parada
    SELECT * FROM AddGeometryColumn('public','ponto_parada','the_geom',-1,'POINT',2);

    CREATE TABLE linha
    (
        id_linha serial not null,
        nm_linha varchar(50) not null,
        dc_linha varchar(255) not null,
        constraint linha_pk PRIMARY KEY (id_linha),
        constraint linha_nm_linha_un UNIQUE (nm_linha) -- o nosso nome de linha deve ser único.
    );
</pre>
<p style="text-align: justify;">Bem, modelos nossas entidades básicas, pontos e linhas. Mas como descobrir qual linha serve à cada ponto? Ou como dizer se um ponto de parada pertence à determinada linha? Temos neste momento, uma relação de muitos para muitos. Porque? Bem, um ponto pode servir à mais de uma linha. E uma linha, com certeza abrange vários pontos. Para isto ser feito de maneira correta, temos de criar uma entidade intermediária, decompondo nosso relacionamento em 1:M, de cada um dos lados.</p>
<pre name="code" class="SQL">
    CREATE TABLE sentido
    (
        id_sentido serial not null,
        dc_sentido varchar(50) not null,
        constraint sentido_pk primary key (id_sentido)
    );

    -- vamos aproveitar e inserir os sentidos possíveis!

    INSERT INTO sentido(id_sentido,dc_sentido) VALUES (DEFAULT,'CENTRO - BAIRRO');
    INSERT INTO sentido(id_sentido,dc_sentido) VALUES (DEFAULT,'BAIRRO - CENTRO');

    CREATE TABLE linha_possui_ponto
    (
        id_linha integer not null references linha (id_linha),
        id_ponto_parada integer not null references ponto_parada (id_ponto_parada),
        id_sentido integer not null references sentido (id_sentido),
        constraint lpp_pk primary key (id_linha,id_ponto_parada,id_sentido)
    );
</pre>
<p style="text-align: justify;">Através desta tabela intermediária, conseguimos modelar quem pertence à quem. Podem ver, que as chaves estrangeiras em linha_possui_ponto, não permite o cadastro de linhas inexistentes ou de pontos inexistentes, nem de pontos duplicados que partilhem do mesmo sentido. Desta forma, podemos construir um cadastro básico de linhas e pontos, bem como de quais pontos são servidos por quais linhas.</p>
<p style="text-align: justify;">Agora, precisamos de uma maneira inteligente de desenhar as linhas de ônibus que operam na cidade fictícia. Precisamos criar algo com uma coluna geométrica, correto? Errado. Como temos uma tabela geométrica com nossos logradouros, podemos facilmente utilizá-la para construir nossos trajetos de linha.</p>
<p style="text-align: justify;">Por que fazer desta maneira?</p>
<ul>
<li>Não repita informação.</li>
<li>Não repita informação.</li>
<li>Não repita informação.</li>
</ul>
<p style="text-align: justify;">É um motivo forte o bastante. Imagine se temos milhares de linhas, com milhares de trechos servidos. Se alterarmos nossos logradouros, teremos de alterar também nossas linhas - configurando um problema em potencial. Por isso iremos utilizar as geometrias da tabela logradouros para desenharmos nossas linhas.</p>
<p style="text-align: justify;">Esta tabela tomará a forma de uma tabela intermediária, informando ordem e sentido. Desta maneira, utilizando uma <em>view</em> construíremos nossa tabela virtual de linhas.</p>
<pre name="code" class="SQL">
    CREATE TABLE linha_possui_trecho
    (
        id_lpt serial not null,
        id_linha integer not null references linha (id_linha),
        id_trecho_logradouro not null references trecho_logradouro (id_trecho_logradouro),
        id_sentido not null references sentido (id_sentido),
        ordem integer not null default 0,
        constraint lpt_pk primary key (id_lpt),
        constraint lpt_un_linha_lpt unique (id_linha,id_trecho_logradouro,id_sentido,ordem)
    );
</pre>
<p style="text-align: justify;">Através desta tabela intermediária, conseguimos informar à nosso sistema quais são os trechos de logradouro que formam uma linha específica. Realmente é algo à mais para monitorarmos e inserir no banco de dados, mas atualmente é a única maneira. A idéia aqui é construir uma ferramenta específica, que seleciona trechos de logradouros, e em memória armazena estas informações, bem como sua ordem (de seleção). Após a seleção, o ideal é o usuário executar o comando de "inserir", e nosso sistema, cuide do restante para o mesmo. Nada de editar tabelas como esta na mão.</p>
<p style="text-align: justify;">Já temos nosso modelo preliminar, mas como vamos mostrar as linhas em um cliente web? Necessitamos gerar as linhas em tempo de execução, com as informações pertinentes. Para isto, iremos utilizar uma <em>view </em>e adicionar os registros apropriados à tabela <em>geometry_columns</em> para que esta fique transparente para o usuário/serviço de mapas.</p>
<pre name="code" class="SQL">
CREATE OR REPLACE VIEW linhas_transporte_publico AS
SELECT
	id_linha,
	nm_linha,
	ST_Collect((SELECT the_geom from logradouros where gid = id_trecho_logradouro)) as "the_geom"
FROM linha
	LEFT OUTER JOIN linha_possui_trecho
		ON (linha.id_linha = linha_possui_trecho.id_linha)
	LEFT OUTER JOIN trecho_logradouro
		ON (linha_possui_trecho.id_trecho_logradouro = trecho_logradouro.id_trecho_logradouro)
	GROUP BY id_linha,nm_linha
</pre>
<p>Esta view nos possibilitará disponibilizar as informações de linha como um todo, sem diversos registros. O segredo está na função ST_Collect, responsável por unir os trechos de logradouros em nossa tabela trecho_logradouro. Veja que não estamos duplicando informação, apenas reutilizando os dados já existentes em nosso modelo.</p>
<p>Existem outras tabelas interessantes em se disponibilizar, tais como pontos de táxi, linhas de metrô/trem, transportes marítimos, aeroportos, terminais de embarque, etc. Deixo este exercício para o leitor. O objetivo aqui é mostrar como a modelagem de dados preliminar do sistema viário é importante e como podemos simplificar nosso trabalho futuro.</p>
<p>No próximo artigo falaremos sobre setores administrativos, bairros, quadras, lotes, etc. Estes dados são muito importantes para a administração pública e com certeza devem estar presentes em nosso sisteminha.</p>
<p>O que acharam?</p>
<p>Abraços</p>
<p>George R. C. Silva</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-1/' rel='bookmark' title='Permanent Link: Desenvolvendo um SIG para Suporte de Decisões Municipais'>Desenvolvendo um SIG para Suporte de Decisões Municipais</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/history-tables-pt-1/' rel='bookmark' title='Permanent Link: History Tables &#8211; pt 1'>History Tables &#8211; pt 1</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/' rel='bookmark' title='Permanent Link: Funções PostGIS #1'>Funções PostGIS #1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Funções PostGIS #2</title>
		<link>http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=funcoes-postgis-2</link>
		<comments>http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/#comments</comments>
		<pubDate>Wed, 12 May 2010 19:48:59 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[Banco de Dados Geográficos]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=709</guid>
		<description><![CDATA[Boa tarde senhores e senhoras, Continuando nossa peregrinação pelas funções do PostGIS, irei começar explicar a que usamos no post anterior e não expliquei. ST_AsText() Esta função retorna o valor WKT (Well Known Text - especificação OGC) da geometria. Esta função é útil pois lhe mostra algo um pouco mais inteligível do que o WKB [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-3/' rel='bookmark' title='Permanent Link: Funções PostGIS #3'>Funções PostGIS #3</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/' rel='bookmark' title='Permanent Link: Funções PostGIS #1'>Funções PostGIS #1</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/' rel='bookmark' title='Permanent Link: Construindo funcionalidades para o WKT Raster'>Construindo funcionalidades para o WKT Raster</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Boa tarde senhores e senhoras,</p>
<p style="text-align: justify;">Continuando nossa peregrinação pelas funções do <em>PostGIS</em>, irei começar explicar a que usamos no <em>post</em> anterior e não expliquei.</p>
<h3 style="text-align: justify;">ST_AsText()</h3>
<p style="text-align: justify;">Esta função retorna o valor <em>WKT (Well Known Text </em>- especificação <em>OGC</em>) da geometria. Esta função é útil pois lhe mostra algo um pouco mais inteligível do que o <em>WKB </em>(<em>Well Known Byte</em>).</p>
<p style="text-align: justify;">Ela tem como retorno o <em>WKT </em>sem o código SRID da geometria especificada. Se utilizada em um comando <em>SELECT</em>, ela irá realizar esta conversão em todos os objetos válidos da coluna especificada. Ela é uma função de <em>output</em>.</p>
<pre name="code" class="SQL">
-- assinatura
-- SELECT ST_AsText(the_geom)

SELECT nm_equipamento_urbano, ST_AsText(the_geom);
</pre>
<p style="text-align: justify;">Vamos falar um pouco das funções construtoras de geometria. Por que elas são importantes? É uma maneira de se converter dados de coordenadas, em objetos geográficos, representados no banco de dados por uma <em>string</em> com o valor <em>WKB</em>. Vamos começar pela mais simples: ST_Point()</p>
<h3 style="text-align: justify;">ST_Point()</h3>
<p style="text-align: justify;">Esta é a mais simples das funções construtoras. Ela tem como entrada apenas um X e Y. Esta função esta de acordo com a norma <em>OGC</em>. Na verdade, o que ela faz é chamar a função ST_MakePoint() passando como entrada apenas os eixos X e Y.</p>
<pre name="code" class="SQL">
-- assinatura
-- SELECT ST_Point(coordenada_x, coordenada_y);

SELECT ST_Point(-42.5,-19.2);
</pre>
<p>O resultado é retornado em <em>WKB</em>. Veja:</p>
<div id="attachment_710" class="wp-caption aligncenter" style="width: 497px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_Point.png"><img class="size-full wp-image-710" title="ST_Point" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_Point.png" alt="Função ST_Point() retornando o valor em WKB" width="487" height="93" /></a><p class="wp-caption-text">Função ST_Point() retornando o valor em WKB</p></div>
<h3 style="text-align: justify;">ST_MakePoint()</h3>
<p style="text-align: justify;">A função MakePoint é mais completa que a ST_Point, pois permite a utilização de até quatro eixos de coordenadas, X, Y, Z e M. Esta função <strong>não está de acordo</strong> com a norma <em>OGC</em> mas é uma forma de se trabalhar no <em>PostGIS</em>. O problema do uso da mesma é no momento de integração com outros softwares <em>OGC compliant</em>. Fique atento!</p>
<pre name="code" class="SQL">
-- assinaturas
-- SELECT ST_MakePoint(x,y);
-- SELECT ST_MakePoint(x,y,z);
-- SELECT ST_MakePoint(x,y,z,m);

SELECT ST_MakePoint(-10,-1,300,1);
</pre>
<p>O resultado desta função também é trazido em <em>WKB</em>.</p>
<p style="text-align: center;">
<div id="attachment_711" class="wp-caption aligncenter" style="width: 519px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakePoint.png"><img class="size-full wp-image-711 " title="ST_MakePoint" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakePoint.png" alt="Função ST_MakePoint() retornando o valor em WKB" width="509" height="93" /></a><p class="wp-caption-text">Função ST_MakePoint() retornando o valor em WKB</p></div>
<p style="text-align: justify;">Existem funções deste tipo para todos os tipos de geometria. Vamos mostrar as outras:</p>
<h3 style="text-align: justify;">ST_MakeLine()</h3>
<p style="text-align: justify;">Vamos complicar um pouquinho. Da mesma maneira que podemos construir pontos, podemos construir linhas. Existem três maneiras de se utilizar esta função: uma é com o resultado agregado de uma consulta, um array de pontos, ou dois pontos. Vou mostrar as três maneiras.</p>
<pre name="code" class="SQL">-- assinatura
-- SELECT ST_MakeLine(geometry_set);
-- SELECT ST_MakeLine(ponto1,ponto2);
-- SELECT ST_MakeLine(array_pontos);

-- resultado agregado de consulta
SELECT l.setor, ST_AsText(ST_MakeLine(l.the_geom)) FROM
	(SELECT codsetor as "setor", the_geom FROM equipamento_urbano) as l GROUP BY l.setor;

-- dois pontos
SELECT ST_AsText(ST_MakeLine(ST_MakePoint(-1,-1),ST_MakePoint(-2,-2)))

-- array de pontos
SELECT ST_AsText(ST_MakeLine(ARRAY[ST_MakePoint(-10,-1),ST_MakePoint(-5,0),ST_MakePoint(-10,2),ST_MakePoint(-19,-20),ST_MakePoint(-1,0)]));

-- note que a abertura do array se faz com os colchetes!
</pre>
<p style="text-align: justify;">Vejamos os resultados, respectivamente: agregado, dois pontos e array de pontos. Uma nota: utilizei ST_AsText nas funções para facilitar a visualização do resultado. Todos os resultados podem ser facilmente testados, com exceção do agregado. Caso alguém tenha interesse, posso lhe enviar a tabela em formato .sql para conferência <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<div id="attachment_713" class="wp-caption aligncenter" style="width: 630px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakeLine_Agg.png"><img class="size-full wp-image-713" title="ST_MakeLine_Aggregate" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakeLine_Agg.png" alt="Resultado de ST_MakeLine com pontos agregados" width="620" height="176" /></a><p class="wp-caption-text">Resultado de ST_MakeLine com pontos agregados</p></div>
<div id="attachment_714" class="wp-caption aligncenter" style="width: 195px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakeLine_2p.png"><img class="size-full wp-image-714" title="ST_MakeLine_2p" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakeLine_2p.png" alt="Resultado de ST_MakeLine com dois pontos" width="185" height="93" /></a><p class="wp-caption-text">Resultado de ST_MakeLine com dois pontos</p></div>
<div id="attachment_715" class="wp-caption aligncenter" style="width: 315px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakeLine_Array.png"><img class="size-full wp-image-715" title="ST_MakeLine_Array" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakeLine_Array.png" alt="Resultado da função ST_MakeLine com um array de pontos" width="305" height="93" /></a><p class="wp-caption-text">Resultado da função ST_MakeLine com um array de pontos</p></div>
<p style="text-align: justify;">Vamos complicar mais um pouquinho?</p>
<h3 style="text-align: justify;">ST_MakePolygon()</h3>
<p style="text-align: justify;">Esta função constrói polígonos. Para um polígono ser um polígono ele deve ter uma clara distinção de seu interior com seu exterior. A única maneira de delimitarmos isto é tenho uma <em>LINESTRING</em> fechada, ou seja, o último vértico deve ser igual ao primeiro. Um polígono também pode ter <em>holes</em> ou seja, buracos. Eles também podem ser construídos aqui. Veja só:</p>
<pre name="code" class="SQL">
-- assinatura
-- SELECT ST_MakePolygon(linestring_fechada);
-- SELECT ST_MakePolygon(linestring_fechada,array_poligonos_interiores);

SELECT ST_AsText(ST_MakePolygon(
	ST_MakeLine(ARRAY[
		ST_MakePoint(0,0),
		ST_MakePoint(1,0),
		ST_MakePoint(1,1),
		ST_MakePoint(0,1),
		ST_MakePoint(0,0)])))
</pre>
<p>Veja o resultado:</p>
<div id="attachment_717" class="wp-caption aligncenter" style="width: 235px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakePolygon.png"><img class="size-full wp-image-717" title="ST_MakePolygon" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_MakePolygon.png" alt="Resultado de ST_MakePolygon" width="225" height="93" /></a><p class="wp-caption-text">Resultado de ST_MakePolygon</p></div>
<p style="text-align: justify;">Todas estas funções são extremamente úteis, permitindo o usuário à manipular as geometrias de diversas tabelas para construir objetos temporários ou <em>views</em> para visualização em softwares de SIG. Lembrem-se que você não precisa utilizar ST_MakePoint() para construir polígonos ou linhas. Você pode utilizar a agregados e resultados de consultas como parâmetros de entrada para estas funções.</p>
<h3 style="text-align: justify;">ST_GeomFromText</h3>
<p style="text-align: justify;">Esta é a rainha das funções construtoras de geometria. Com ela é possível construir qualquer geometria, desde que você tenha o <em>WKT</em> das mesmas. Mão na roda. A segunda assinatura lhe permite especificar um <em>SRID</em>.</p>
<pre name="code" class="SQL">-- assinatura
-- SELECT ST_GeomFromText('wkt');
-- SELECT ST_GeomFromText('wkt',srid);

SELECT ST_AsText(ST_GeomFromText('LINESTRING(0 0, 1 0, 2 1, 2 2, 3 1, 3 3, 0 1, 0 0)'))

SELECT ST_AsText(ST_GeomFromText('POLYGON((0 0, 1 0,1 1,0 1,0 0))'));
</pre>
<div id="attachment_718" class="wp-caption aligncenter" style="width: 290px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_GeomFromText_Line.png"><img class="size-full wp-image-718" title="ST_GeomFromText_Line" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_GeomFromText_Line.png" alt="Resultado da função ST_GeomFromText, construindo uma linha." width="280" height="93" /></a><p class="wp-caption-text">Resultado da função ST_GeomFromText, construindo uma linha.</p></div>
<div id="attachment_719" class="wp-caption aligncenter" style="width: 229px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_GeomFromText_Polygon.png"><img class="size-full wp-image-719" title="ST_GeomFromText_Polygon" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/ST_GeomFromText_Polygon.png" alt="Resultado da função ST_GeomFromText, construindo um polígono." width="219" height="93" /></a><p class="wp-caption-text">Resultado da função ST_GeomFromText, construindo um polígono.</p></div>
<p style="text-align: justify;">Agora vem a pergunta: porque utilizamos dois pares de parênteses quando construímos um polígono e apenas um quando construímos uma <em>linestring</em>? Lembra quando construímos um polígono, temos a opção de passar uma array de polígonos internos, os famosos <em>holes</em>? Então, o segundo <em>set </em>de parênteses corresponde à possibilidade de inserir este array de polígonos. Não se esqueça, para polígonos e geometrias multi*, dois <em>sets</em> de parênteses são necessários.</p>
<p style="text-align: justify;">Hoje vimos um pouco sobre as funções construtoras de geometrias no <em>PostGIS. </em>O que acharam?</p>
<p style="text-align: justify;">Abraços</p>
<p style="text-align: justify;">George R. C. Silva</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-3/' rel='bookmark' title='Permanent Link: Funções PostGIS #3'>Funções PostGIS #3</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/' rel='bookmark' title='Permanent Link: Funções PostGIS #1'>Funções PostGIS #1</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/' rel='bookmark' title='Permanent Link: Construindo funcionalidades para o WKT Raster'>Construindo funcionalidades para o WKT Raster</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Funções PostGIS #1</title>
		<link>http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=funcoes-postgis-1</link>
		<comments>http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/#comments</comments>
		<pubDate>Tue, 11 May 2010 19:39:08 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[Conceitos]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=695</guid>
		<description><![CDATA[Boa tarde pessoal, Me desculpem o tempo parado, mas é que a correria está grande! Gostaria de mostrar um pouco as funções do PostGIS e as maravilhas que podemos fazer com elas. Vamos começar devagar, com as básicas e ir aumentando o grau de complexidade destes posts. Algumas idéias aqui surgirão, como a criação de [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/' rel='bookmark' title='Permanent Link: Funções PostGIS #2'>Funções PostGIS #2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-3/' rel='bookmark' title='Permanent Link: Funções PostGIS #3'>Funções PostGIS #3</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/' rel='bookmark' title='Permanent Link: Desenvolvendo um SIG para Suporte de Decisões Municipais #2'>Desenvolvendo um SIG para Suporte de Decisões Municipais #2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Boa tarde pessoal,</p>
<p style="text-align: justify;">Me desculpem o tempo parado, mas é que a correria está grande!</p>
<p style="text-align: justify;">Gostaria de mostrar um pouco as funções do <em>PostGIS</em> e as maravilhas que podemos fazer com elas. Vamos começar devagar, com as básicas e ir aumentando o grau de complexidade destes posts. Algumas idéias aqui surgirão, como a criação de indíces específicos com o uso destas funções, uma prática comum para aumentar a perfomance do banco de dados. Espero que gostem. O <em>PostGIS</em> utilizado é o 1.4.0.</p>
<h3 style="text-align: justify;">PostGIS_Full_Version()</h3>
<p>Esta função não faz muita coisa, ela apenas te diz a versão do PostGIS instalada, bem como quais as versões das bibliotecas das quais o PostGIS depende <em>(Proj4</em> e <em>GEOS</em>). Ela é importante pois é uma das primeiras perguntas que irão lhe fazer quando você encontrar dificuldades ou <em>bugs</em>. Guarde-a num cantinho da sua mente <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<pre name="code" class="SQL">
SELECT * FROM PostGis_Full_Version()
</pre>
<h3>AddGeometryColumn()</h3>
<p style="text-align: justify;">Esta sim é importante. Aprenda-a usar logo.  Ela é responsável por adicionar corretamente as colunas geométricas à uma tabela. Ela não só adiciona a coluna à tabela, como cria as <em>constraints</em> definidas e popula a tabela <em>geometry_columns</em>. Se você adicionar uma coluna geométrica e não popular a tabela <em>geometry_columns</em> diversos softwares SIG podem não reconhecer aquela tabela como espacial. Portanto atenção nas duas.</p>
<pre name="code" class="SQL">CREATE TABLE teste(
id serial not nuLl,
atributo1 varchar(20) not null default 'abc',
constraint teste_pk primary key (id)
);

-- assinaturas
-- SELECT * FROM AddGeometryColumn('tabela','nome_da_coluna_a_ser_criada',srid,'TIPO_DE_GEOMETRIA',dimensao);
-- SELECT * FROM AddGeometryColumn('esquema','tabela','nome_da_coluna_a_ser_criada',srid,'TIPO_DE_GEOMETRIA',dimensao);

SELECT * FROM AddGeometryColumn('teste','the_geom',29192,'POINT',2);
-- QUALQUER UM DESSES FORMATOS FUNCIONAM
</pre>
<p style="text-align: justify;">Qualquer um das assinaturas é válida.</p>
<h3 style="text-align: justify;">DropGeometryColumn()</h3>
<p>Esta função faz o inverso da <em>AddGeometryColumn()</em>. Ela remove a coluna espacial e limpa o registro na tabela <em>geometry_columns</em>.</p>
<pre name="code" class="SQL">-- assinaturas
-- SELECT * FROM DropGeometryColumn('tabela','nome_da_coluna');
-- SELECT * FROM DropGeometryColumn('esquema','tabela','nome_da_coluna');

SELECT * FROM DropGeometryColumn('teste','the_geom');
</pre>
<h3>Populate_Geometry_Columns()</h3>
<p style="text-align: justify;">Esta função escaneia todas as tabelas que contenham colunas do tipo <em>geometry</em> e as popula com as <em>constraints</em> apropriadas: tipo de geometria, número de dimensões e SRID especificado.</p>
<pre name="code" class="SQL">-- assinaturas
-- SELECT * FROM Populate_Geometry_Columns();
-- SELECT * FROM Populate_Geometry_Columns(oid_tabela);

SELECT * FROM Populate_Geometry_Columns();
</pre>
<p>Esta função sem argumentos, irá escanear <strong>todas</strong> as tabelas do banco e tentar criar as <em>constraints</em> para cada uma. Se você especificar um <em>oid</em> a função tentará fazer isto somente para a tabela especificada.</p>
<h3>Probe_Geometry_Columns()</h3>
<p>Esta função escaneia todas as tabelas do banco com <em>constraints</em> espaciais e as adiciona à tabela <em>geometry_columns</em>. Mão na roda para garantir que todas suas tabelas estejam de acordo para uso em softwares de SIG. Esta função <strong>não</strong> escaneia <em>views</em> que têm de ser populadas na tabela <em>geometry_columns</em> na mão.</p>
<pre name="code" class="SQL">-- assinatura
-- SELECT * FROM Probe_Geometry_Columns();

SELECT * FROM Probe_Geometry_Columns();
</pre>
<h3>UpdateGeometrySRID</h3>
<p>Esta belezinha aqui realiza o trabalho de atualizar as constraints e as geometrias para determinado <em>SRID</em>. Cuidado, esta função <strong>não converte</strong> coordenadas. Apenas atualiza a tabela <em>geometry_columns</em> e as <em>constraints</em> correspondentes!</p>
<pre name="code" class="SQL">-- assinatura
-- SELECT * FROM UpdateGeometryColumn('nome_tabela','nome_coluna_espacial',novo_srid);
-- SELECT * FROM UpdateGeometryColumn('esquema','nome_tabela','nome_coluna_espacial',novo_srid);

SELECT * FROM UpdateGeometryColumn('public','teste','the_geom',-1);
</pre>
<h3>ST_Transform</h3>
<p>Iniciando nas funções realmente espaciais, temos a função <em>ST_Transform</em>. Você notará que todas as funções espaciais contém o prefixo ST. As anteriores não possuem o prefixo pois são funções administrativas. Esta função, realmente <strong>converte</strong> as coordenadas de um <em>SRID</em> para outro.</p>
<pre name="code" class="SQL">-- assinatura
-- ST_Transform(geometria,novo_srid);

-- sem transformacao
SELECT cd_equipamento_urbano, ST_AsText(the_geom) FROM equipamento_urbano;

-- transformada
SELECT cd_equipamento_urbano, ST_AsText(ST_Transform(the_geom,4618)) FROM equipamento_urbano;
</pre>
<p>Nesta seção vemos duas funções. <em>ST_AsText</em> que será explicada mais tarde, e a <em>ST_Transform</em>. Veja como podemos embrulhar funções dentro de funções, que são avaliadas de dentro para fora. Os resultados das <em>queires</em> acima são.</p>
<div id="attachment_698" class="wp-caption aligncenter" style="width: 710px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/st_transform.png"><img class="size-full wp-image-698" title="ST_Transform" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/st_transform.png" alt="Tabela de pontos original em UTM Zona 22S" width="700" height="278" /></a><p class="wp-caption-text">Tabela de pontos original em UTM Zona 22S</p></div>
<p>Esta é o resultado transformado:</p>
<div id="attachment_699" class="wp-caption aligncenter" style="width: 708px"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/st_transform2.png"><img class="size-full wp-image-699" title="ST_Transform2" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/05/st_transform2.png" alt="Tabela de pontos transformada em SAD69 Lat/Long" width="698" height="277" /></a><p class="wp-caption-text">Tabela de pontos transformada em SAD69 Lat/Long</p></div>
<p>Existem muiiiitas funções úteis no PostGIS que são realmente uma mão na roda. Próximo post falaremos de funções modificadoras de geometria e construção de geometrias.</p>
<p>Espero que tenham gostado.</p>
<p>Abraços</p>
<p>George R. C. Silva</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-2/' rel='bookmark' title='Permanent Link: Funções PostGIS #2'>Funções PostGIS #2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/05/funcoes-postgis-3/' rel='bookmark' title='Permanent Link: Funções PostGIS #3'>Funções PostGIS #3</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/' rel='bookmark' title='Permanent Link: Desenvolvendo um SIG para Suporte de Decisões Municipais #2'>Desenvolvendo um SIG para Suporte de Decisões Municipais #2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/05/funcoes-postgis-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Agricultura Familiar e Geoprocessamento</title>
		<link>http://blog.geoprocessamento.net/2010/04/agricultura-familiar-e-geoprocessamento/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=agricultura-familiar-e-geoprocessamento</link>
		<comments>http://blog.geoprocessamento.net/2010/04/agricultura-familiar-e-geoprocessamento/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 21:49:57 +0000</pubDate>
		<dc:creator>Geo.NET</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Banco de Dados Geográficos]]></category>
		<category><![CDATA[Geo Aplicado]]></category>
		<category><![CDATA[Geoprocessamento]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SIG]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=655</guid>
		<description><![CDATA[Olá Pessoal! Hoje gostaria de comentar com vocês sobre um trabalho elaborado pela também Tecnóloga em Geoprocessamento, Julie Eugênio. Há algum tempo ela preparou um projeto de gerenciamento de atividades de agricultura familiar fazendo uso de técnicas de Geoprocessamento. O objetivo principal da pesquisa dela foi o desenvolvimento de uma aplicação, com base em técnicas [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/03/monografias-geoprocessamento/' rel='bookmark' title='Permanent Link: Monografias Geoprocessamento &#8211; IFPB'>Monografias Geoprocessamento &#8211; IFPB</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias2/' rel='bookmark' title='Permanent Link: O Geoprocessamento e Suas Tecnologias – Parte 2'>O Geoprocessamento e Suas Tecnologias – Parte 2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias/' rel='bookmark' title='Permanent Link: O Geoprocessamento e Suas Tecnologias &#8211; Parte 1'>O Geoprocessamento e Suas Tecnologias &#8211; Parte 1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal!</p>
<p>Hoje gostaria de comentar com vocês sobre um trabalho elaborado pela também Tecnóloga em Geoprocessamento, Julie Eugênio.</p>
<p>Há algum tempo ela preparou um projeto de gerenciamento de atividades de agricultura familiar fazendo uso de técnicas de Geoprocessamento.</p>
<p>O objetivo principal da pesquisa dela foi o desenvolvimento de uma aplicação, com base em técnicas de Geoprocessamento, para apoiar as atividades de um projeto voltado à agricultura familiar sustentável denominado “Cinturão Verde”, inserido no programa de microcrédito “Empreender-JP”, no município de João Pessoa, capital do Estado da Paraíba.</p>
<p>O mapa abaixo mostra a localização da área de estudo.</p>
<p style="text-align: center"><a href="../"><img class="aligncenter" src="../wp-content/uploads/2010/04/JP1.png" alt="" width="509" height="335" /></a></p>
<p style="text-align: left">Durante a construção da aplicação SIG integrada a um Banco de Dados Geográficos deu-se ênfase ao uso de tecnologias livres, com destaque para o <em><strong>Quantum Gis</strong></em> (QGis) e <em><strong>PostgreSQL/PostGis</strong></em>.</p>
<p style="text-align: left">Na parte escrita do trabalho desenvolvido foi detalhada toda a metodologia empregada. A qual está resumida na figura abaixo.</p>
<p style="text-align: left"><a href="http://blog.geoprocessamento.net/wp-content/uploads/2010/04/metodologiaj.png"><img class="aligncenter size-full wp-image-661" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/04/metodologiaj.png" alt="" width="376" height="386" /></a>O trabalho foi extremamente elogiado pelos responsáveis técnicos da prefeitura de João Pessoa. Você pode fazer o <em>download </em>do trabalho completo a partir do link abaixo, que traz o tema da monografia escrita com base nesse projeto.</p>
<p style="text-align: center"><a href="http://www.geoprocessamento.cefetpb.edu.br/monografias/Julie_Eugenio.pdf" target="_blank"><strong>Gerenciamento  de Atividades de Agricultura Familiar Sustentável com Base em Técnicas  de Geoprocessamento, no Município de João Pessoa - PB</strong></a></p>
<p>Espero que tirem proveito de mais essa demonstração da potencialidade do uso de tecnologias livres para Geoprocessamento.</p>
<p>Abraços.</p>
<p>--</p>
<p>Anderson Medeiros</p>
<p>Tecnólogo em Geoprocessamento</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/03/monografias-geoprocessamento/' rel='bookmark' title='Permanent Link: Monografias Geoprocessamento &#8211; IFPB'>Monografias Geoprocessamento &#8211; IFPB</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias2/' rel='bookmark' title='Permanent Link: O Geoprocessamento e Suas Tecnologias – Parte 2'>O Geoprocessamento e Suas Tecnologias – Parte 2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias/' rel='bookmark' title='Permanent Link: O Geoprocessamento e Suas Tecnologias &#8211; Parte 1'>O Geoprocessamento e Suas Tecnologias &#8211; Parte 1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/04/agricultura-familiar-e-geoprocessamento/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Criação de Templates para PostGIS</title>
		<link>http://blog.geoprocessamento.net/2010/04/template_postgis/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=template_postgis</link>
		<comments>http://blog.geoprocessamento.net/2010/04/template_postgis/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 03:57:54 +0000</pubDate>
		<dc:creator>Vicente Martins</dc:creator>
				<category><![CDATA[Vicente Martins]]></category>
		<category><![CDATA[Banco de Dados Geográficos]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=611</guid>
		<description><![CDATA[Olá a todos, muito bom está por aqui novamente. Hoje vou falar para vocês de um assunto que na minha graduação o Prof. Marcello Benigno[1] sempre "enchia o saco" repetindo e repetindo e repetindo... a criação de templates para o banco de dados (no nosso caso, PostgreSQL[2]). Templates nada mais são que modelos pré-definidos de [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/' rel='bookmark' title='Permanent Link: PostGIS WKT Raster'>PostGIS WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/' rel='bookmark' title='Permanent Link: Construindo funcionalidades para o WKT Raster'>Construindo funcionalidades para o WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/03/meettheshp2pgsql/' rel='bookmark' title='Permanent Link: shp2pgsql: Você conhece esta fantástica ferramenta?'>shp2pgsql: Você conhece esta fantástica ferramenta?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Olá a todos, muito bom está por aqui novamente.</p>
<p style="text-align: justify">Hoje vou falar para vocês de um assunto que na minha graduação o Prof. Marcello Benigno[1] sempre "enchia o saco" repetindo e repetindo e repetindo... a criação de <em>templates</em> para o banco de dados (no nosso caso, PostgreSQL[2]). <em>Templates</em> nada mais são que modelos pré-definidos de banco de dados, que aumentam a produtividade na criação de novos bancos. Neles nós colocamos características comuns aos bancos de dados que serão criados e só associamos os novos bancos a eles.</p>
<p style="text-align: justify">Como exemplo, hoje a tarde precisei recriar um<strong> <em>template_postgis</em></strong> para que pudesse sincronizar uma aplicação <em>geodjango</em> a ele (A aplicação poderá ser vista em breve na edição número 1 da revista Geo.NET), então fiz da seguinte forma:</p>
<p style="text-align: justify">Como <em>root</em> chamei o postgres:</p>
<pre style="text-align: justify"># su postgres</pre>
<p style="text-align: justify">Após entrar no <em>root</em> postgres, mandei criar um novo banco de dados chamado <em>template_postgis</em>:</p>
<pre style="text-align: justify">$ createdb -U postgres template_postgis</pre>
<p style="text-align: justify">A opção "-U" do comando createdb se refere ao usuário que será dono do banco, ou do <em>template</em>, como é nosso caso (Para maiores informações sobre outras opções do comando createdb digite $ man createdb). Para esta versão, o <em>root</em> postgres é por <em>default</em> o dono das tabelas, bancos e <em>templates</em> criados, por tanto, não faz necessário informá-lo como usuário.</p>
<p style="text-align: justify">Para que seja possível rodar as funções da extensão espacial postgis, é necessário a criação da linguagem procedural plpgsql. Por meio desta, é possível rodar as funções contidas nos arquivos lwpostgis.sql e ref_spatial_sys.sql, arquivos estes que contem funções que resolvem referência espacial, tipos de geometrias, sistemas de coordenadas e etc. Para criar a linguagem, basta usar o comando:</p>
<pre style="text-align: justify">$ createlang -d template_postgis -U postgres plpgsql</pre>
<p style="text-align: justify">A opção "-d" informa para qual banco de dados, ou template será criada a nova linguagem procedural (Para maiores informações, consulte $ man createlang).</p>
<p style="text-align: justify">Depois de ter criado a linguagem, basta importar os arquivos lwpostgis.sql, lwpostgis_upgrade.sql e spatial_ref_sys.sql. Para isso usaremos o terminal interativo do pgsql através do comando:</p>
<pre style="text-align: justify">$ psql -d template_postgis -f lwpostgis.sql</pre>
<pre style="text-align: justify">$ psql -d template_postgis -f lwpostgis_upgrde.sql</pre>
<pre style="text-align: justify">$ psql -d template_postgis -f spatial_ref_sys.sql</pre>
<p style="text-align: justify">Neste ponto é importante tomar nota de que, se o usuário não estiver no <em>path</em> onde estão os arquivos acima, lhe será retornado um erro. Para evitar tal erro, consulte a documentação para a sua distribuição.</p>
<p style="text-align: justify">Para confirmar se tudo correu bem, entre no <em>template</em> e faça uma consulta às tabelas da seguinte forma:</p>
<pre style="text-align: justify">$ psql -d template_postgis</pre>
<pre style="text-align: justify">template_postgis=# \dt
Lista de relações
Esquema |       Nome       |  Tipo  |   Dono
---------+------------------+--------+----------
public  | geometry_columns | tabela | postgres
public  | spatial_ref_sys  | tabela | postgres
(2 registros)</pre>
<p style="text-align: justify">Observe que dentro do <em>template_postgis</em> foram criadas as tabelas espaciais, e que por <em>default</em> o dono das mesmas é o root postgres. Agora ficou simples, pois sempre que for preciso criar um db com extensão espacial, basta rodar o comando:</p>
<pre style="text-align: justify">$ psql -T template_postgis &lt;nome_novo_db&gt;</pre>
<p style="text-align: justify">Este novo db será criado, e dentro dele já estarão inseridas as tabelas espaciais.</p>
<p style="text-align: justify">Fácil não é? <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: justify">Abraço a todos.</p>
<p style="text-align: justify">Referencias:</p>
<p style="text-align: justify">[1] <a href="http://profmarcello.blogspot.com">Prof. Marcello</a></p>
<p style="text-align: justify">[2] <a href="http://postgres.org">PostgreSQL</a></p>
<p style="text-align: justify">
<p style="text-align: justify">Vicente Martins.</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/07/postgis-wkt-raster/' rel='bookmark' title='Permanent Link: PostGIS WKT Raster'>PostGIS WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/08/construindo-funcionalidades-para-o-wkt-raster/' rel='bookmark' title='Permanent Link: Construindo funcionalidades para o WKT Raster'>Construindo funcionalidades para o WKT Raster</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/03/meettheshp2pgsql/' rel='bookmark' title='Permanent Link: shp2pgsql: Você conhece esta fantástica ferramenta?'>shp2pgsql: Você conhece esta fantástica ferramenta?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/04/template_postgis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O Geoprocessamento e Suas Tecnologias – Parte 2</title>
		<link>http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=geo-e-suas-tecnologias2</link>
		<comments>http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias2/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 17:24:35 +0000</pubDate>
		<dc:creator>Geo.NET</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Banco de Dados Geográficos]]></category>
		<category><![CDATA[Conceitos]]></category>
		<category><![CDATA[Geoprocessamento]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SIG]]></category>
		<category><![CDATA[WebMapping]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=223</guid>
		<description><![CDATA[Olá! Conforme vimos na primeira parte deste post, o Geoprocessamento é um conjunto de tecnologias dinâmicas com alto potencial de aplicação. Até aqui vimos que Geoprocessamento e SIG não são as mesma coisa. O SIG é apenas uma importante tecnologia dentre as diversas incluídas no Geoprocessamento. Vimos também que programas como o gvSIG e ArcGis [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias/' rel='bookmark' title='Permanent Link: O Geoprocessamento e Suas Tecnologias &#8211; Parte 1'>O Geoprocessamento e Suas Tecnologias &#8211; Parte 1</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/04/agricultura-familiar-e-geoprocessamento/' rel='bookmark' title='Permanent Link: Agricultura Familiar e Geoprocessamento'>Agricultura Familiar e Geoprocessamento</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/03/monografias-geoprocessamento/' rel='bookmark' title='Permanent Link: Monografias Geoprocessamento &#8211; IFPB'>Monografias Geoprocessamento &#8211; IFPB</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left"><a href="http://blog.geoprocessamento.net/"><img class="aligncenter size-full wp-image-224" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/01/TecGeoLivres1.png" alt="" width="514" height="385" /></a>Olá!</p>
<p style="text-align: left">Conforme vimos na <a href="http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias/" target="_blank"><strong>primeira parte</strong></a> deste <em>post</em>, o Geoprocessamento é um conjunto de tecnologias dinâmicas com alto potencial de aplicação.</p>
<p style="text-align: left">Até aqui vimos que <strong>Geoprocessamento</strong> e <strong>SIG</strong> não são as mesma coisa. O SIG é apenas uma importante tecnologia dentre as diversas incluídas no Geoprocessamento.</p>
<p style="text-align: left">Vimos também que programas como o gvSIG e ArcGis não são "SIGs" mas <em>softwares </em>para SIG. Assim como o Geoprocessamento possui várias ramificações tecnológicas o SIG é um sistema composto por <em>softwares</em>, <em>hardwares</em>, metodologias, recursos humanos e dados.</p>
<p style="text-align: left">Ficamos de ver o que são e pra servem tecnologias como o <strong>Banco de Dados Geográfico</strong> e o <strong>WebMapping</strong>.</p>
<h3>Banco de Dados Geográficos</h3>
<p>Bom, vamos por partes. O que é um <strong>Banco de Dados</strong> (<strong>BD</strong>)?</p>
<p>Todo local, físico ou virtual onde estão armazenados dados, pode em certo sentido, ser chamado de banco de dados. Por exemplo, uma enciclopédia pode ser considerada um banco de dados. Mas para nós aqui da área de Geoprocessamento é mais importante o conceito especial de banco ou <strong>base de dados relacional</strong>. Ou seja um banco onde dados são armazenados na forma de tabelas relacionáveis entre si através campos chaves.</p>
<p>As mais diversas facetas de atividades, desde locadoras de DVD até grandes indústrias metalúrgicas usam-se deste tipo de base para ter um maior controle sobre fatores como cadastro de clientes e sua condição em relação à empresa (Inadimplência, por exemplo).</p>
<p>Neste ponto, é importante evitar confundir o BD em sí (conjunto de tabelas relacionáveis) com o programa que o gerenciará, o <strong>Sistema Gerenciador de Banco de Dados</strong> (<strong>SGBD</strong>). EM outras palavras, <em>softwares</em> como <em>Access</em>, <em>MySQL</em>, <em>Oracle</em>, <em>PostgreSQL</em> não são BD, mas sim SGBD.</p>
<p>Mas ainda não falamos no assunto deste tópico. O que é e para que serve um <strong>Banco de Dados Geográfico</strong> (<strong>BDG</strong>)?</p>
<p>O BDG, também chamado de <strong>Banco de Dados Espacial </strong>(BDE),<strong> </strong> é semelhante ao descrito acima (relacional), com a grande e importante diferença de suportar feições geométricas em suas tabelas.</p>
<p>Este tipo de base com geometria oferece a possibilidade de análise e consultas espaciais. É possível calcular nestes casos, por exemplo, áreas, distâncias e centróides, além de realizar a geração de <em>buffers</em> e outras operações entre as geometrias.</p>
<p>Como dica de estudos para você obter uma boa base conceitual sobre BDG, indico o livro "<strong>Banco de Dados Geográficos</strong>" do INPE, que está disponível para <em>download</em> em PDF <a href="http://www.dpi.inpe.br/livros/bdados/capitulos.html" target="_blank"><strong>aqui</strong></a>.</p>
<p>Atualmente, alguns programas de SGBD desenvolveram extensões que inserem no <em>software</em> características de<strong> Sistemas Gerenciadores de Banco de Dados Geográficos</strong> (<strong>SGBDG</strong>) o <em>PostgreSQL</em>, <em>MySQL</em>, e <em>Oracle</em>, sendo os dois primeiros <em>softwares</em> livres e o último proprietário.</p>
<p>Vamos falar um pouco mais do PostgreSQL e como ele passa a agir como SGBDG. O <em>PostgreSQL</em> é desenvolvido atualmente pela <em>PostgreSQL Global Development Group</em>. Quando se percebeu a necessidade de extender este SBGD para suportar dados espaciais desenvolveu-se a extensão conhecida como <em>PostGis</em>.</p>
<p>Sendo assim, vamos entender que o <em>PostGis</em><strong> </strong>não é um BDG ou um SGBDG, ele é apenas uma extensão, um <em>plugin</em>, do <em>PostgreSQL</em> que lhe confere funções para armazenamento e manipulação de dados geográficos.</p>
<p>A figura abaixo procura mostrar a diferença entre o <em>PostgreSQL e </em>"seu filho". Note que para termos um BDG no <em>PostgreSQL</em> faz-se necessária a devida instalação da extensão <em>PostGis</em>.</p>
<p style="text-align: left"><a href="http://blog.geoprocessamento.net"><img class="aligncenter size-full wp-image-240" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/01/BDG-Post.png" alt="" width="531" height="290" /></a></p>
<p style="text-align: left">Você pode importar arquivos vetoriais <em>shapefile </em>(*.shp) para dentro de um "Banco PostGis" utilizando recursos oferecidos pelo próprio programa ou utilizando algum <em>software</em> de SIG com essa funcionalidade. O<em> shapefile</em> será convertido em uma tabela espacial que pode ser integrada com as convencionais contidas na base, além de poder ser visualizada e manipulada através de programas como o <em>gvSIG</em>, <em>Kosmo</em>, <em>Quantum Gis</em>, <em>Udig</em> e muitos outros desta safra. Para baixar tutoriais sobre como realizar esta operação com alguns destes <em>softwares</em>, <a href="http://www.clickgeo.com.br/downloads.html"><strong>clique aqui</strong></a>.</p>
<p style="text-align: left">Para baixar a versão mais recente do <em>PostgreSQL</em> e sua extensão espacial <em>PostGis</em>, acesse os <em>links</em> abaixo.</p>
<ul>
<li><a href="http://www.postgresql.org/" target="_blank"><em><strong>PostgreSQL</strong></em></a></li>
<li><a href="http://postgis.refractions.net/" target="_blank"><em><strong>PostGis</strong></em></a></li>
</ul>
<p style="text-align: left">Para finalizar este <em>post </em>vamos considerar outra tecnologia do Geoprocessamento, a saber,<em> WebMapping.</em></p>
<h3>WebMapping (WebGis)</h3>
<p>A internet vem se destacando nos últimos anos como uma excelente ferramenta para disponibilização e interligação de dados das mais diversas fontes e naturezas.</p>
<p>A geomática, como área do conhecimento, também encontrou na internet um nicho para suas atividades. A disponibilização de mapas digitais, os chamados <em>WebGis</em> ou <em>WebMapping,</em> tem-se tornado comum, permitindo que um maior número de usuários tenha acesso a dados espacializados, de forma hábil e atraente.</p>
<p style="text-align: center">Talvez o estopim para o crescimento das aplicações SIG para internet tenha sido a popularização de serviços <em>online</em> gratuitos de localização como o <em>Google Earth</em> e <em>Google Maps</em>.<a href="http://blog.geoprocessamento.net/"><img class="aligncenter size-full wp-image-248" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/01/Google-Maps.png" alt="" width="500" height="356" /></a></p>
<p>Os mapas na <em>web </em>se apresentam de três formas princiapais:</p>
<p>1) <strong>Mapas Estáticos</strong> - Mapas no formato de imagem (*.jpg, *.gif, *.png, etc) integrados à páginas da internet.</p>
<p>2) <strong>Mapas Gerados à partir de formulários</strong> - Fornece-se parâmetros para geração de mapas na forma de imagem.</p>
<p>3) <strong>Mapas Dinâmicos </strong>- O usuário seleciona uma área de seu interesse em um mapa geral, gerando uma navegação para outro mapa ou imagem mais específico com informações mais detalhadas desta região. Em geral apresentam interface atraente com ícones para consulta espacial calculo de distância e etc.</p>
<p>Para mais detalhes sobre tipos de mapas veja a publicação disponibilizada neste <em><a href="http://www.dpi.inpe.br/livros/bdados/cap10.pdf" target="_blank"><strong>link</strong></a></em>.</p>
<p>Há muitos <em>softwares</em> e <em>frameworks </em>livres para o desenvolvimento de aplicações <em>WebGis</em>. Podemos destacar alguns: <em>MapServer</em>, <em>GeoServer</em>, <em>i3Geo</em>, <em>Alov Map</em>, <em>Time Map</em>, <em>Open Layers</em> e <em>P.Mapper</em>.</p>
<p>Diversos órgãos públicos fazem uso destas ferramentas para divulgação dos resultados de seus trabalhos.</p>
<p>A imagem abaixo mostra um exemplo de aplicação desenvolvida com <em>MapServer</em> e o <em>framework </em><em>P.Mapper. </em>Clique <a href="http://geo.aesa.pb.gov.br/" target="_blank"><strong>aqui</strong></a> para acessar a página da aplicação (Este é um exemplo de mapa dinâmico).</p>
<p style="text-align: left"><a href="http://blog.geoprocessamento.net/"><img class="aligncenter size-full wp-image-255" src="http://blog.geoprocessamento.net/wp-content/uploads/2010/01/SIG-AESA.png" alt="" width="567" height="332" /></a></p>
<p style="text-align: left">Nesta visão geral sobre algumas das tecnologias do Geoprocessamento, pudemos dissipar alguns falsos conceitos em torno de termos como SIG, BDG, SGBDG, WebGis, etc. Espero que tenham gostado do que leram.</p>
<p style="text-align: left">Fiquem à vontade para deixar sua sugestão de tema, críticas e impressões através do e-mail anderson[@]geoprocessamento.net</p>
<p>Anderson Medeiros</p>
<p>Tecnólogo em Geoprocessamento</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias/' rel='bookmark' title='Permanent Link: O Geoprocessamento e Suas Tecnologias &#8211; Parte 1'>O Geoprocessamento e Suas Tecnologias &#8211; Parte 1</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/04/agricultura-familiar-e-geoprocessamento/' rel='bookmark' title='Permanent Link: Agricultura Familiar e Geoprocessamento'>Agricultura Familiar e Geoprocessamento</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/03/monografias-geoprocessamento/' rel='bookmark' title='Permanent Link: Monografias Geoprocessamento &#8211; IFPB'>Monografias Geoprocessamento &#8211; IFPB</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/01/geo-e-suas-tecnologias2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Palestra PgCon Br 2009</title>
		<link>http://blog.geoprocessamento.net/2010/01/palestra-pgcon-br-2009/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=palestra-pgcon-br-2009</link>
		<comments>http://blog.geoprocessamento.net/2010/01/palestra-pgcon-br-2009/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 00:29:53 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[pgcon-br]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=292</guid>
		<description><![CDATA[O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito View more presentations from georger.silva. Related posts:Monografia Acidentes de Trânsito e Geoprocessamento Desenvolvendo um SIG para Suporte de Decisões Municipais #2


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/03/monografia/' rel='bookmark' title='Permanent Link: Monografia'>Monografia</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/acidentes-de-transito-e-geoprocessamento/' rel='bookmark' title='Permanent Link: Acidentes de Trânsito e Geoprocessamento'>Acidentes de Trânsito e Geoprocessamento</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/' rel='bookmark' title='Permanent Link: Desenvolvendo um SIG para Suporte de Decisões Municipais #2'>Desenvolvendo um SIG para Suporte de Decisões Municipais #2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img style="visibility: hidden; width: 0px; height: 0px;" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyNjQxMjAxNDA4NTkmcHQ9MTI2NDEyMDE*NDAxNSZwPTEwMTkxJmQ9c3NfZW1iZWQmZz*yJm89NTRiMDBlMWU2ZDY1/NDU4YWE*MTIzYzlhMjIwMDRiYjQmb2Y9MA==.gif" border="0" alt="" width="0" height="0" /></p>
<div id="__ss_2341465" style="width: 425px; text-align: center;"><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito" href="http://www.slideshare.net/georger.silva/o-uso-do-postgresql-e-postgis-no-cadastro-geocodificado-de-acidentes-de-trnsito">O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito</a><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentao3-091025103135-phpapp01&amp;stripped_title=o-uso-do-postgresql-e-postgis-no-cadastro-geocodificado-de-acidentes-de-trnsito" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentao3-091025103135-phpapp01&amp;stripped_title=o-uso-do-postgresql-e-postgis-no-cadastro-geocodificado-de-acidentes-de-trnsito" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div style="font-size: 11px; padding-top: 2px; font-family: tahoma,arial; height: 26px; text-align: center;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/georger.silva">georger.silva</a>.</div>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/03/monografia/' rel='bookmark' title='Permanent Link: Monografia'>Monografia</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/acidentes-de-transito-e-geoprocessamento/' rel='bookmark' title='Permanent Link: Acidentes de Trânsito e Geoprocessamento'>Acidentes de Trânsito e Geoprocessamento</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/postgis-decisoes-municipais-2/' rel='bookmark' title='Permanent Link: Desenvolvendo um SIG para Suporte de Decisões Municipais #2'>Desenvolvendo um SIG para Suporte de Decisões Municipais #2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/01/palestra-pgcon-br-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
