<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>Shad,<BR>&nbsp;<BR>I worked with Python for this target.<BR>&nbsp;<BR>I made two python scripts, postgis_kml_by_ogr.py&nbsp; and filelayer.py, the first one calls the other:<BR>&nbsp;<BR>--------- postgis_kml_by_ogr.py ---<BR># use:<BR>#&nbsp; cMng = MngPostGis(host='csr-pascoal',&nbsp; dbname='uf_ac',&nbsp; user='userpostgis',&nbsp; pwd='userini2008')<BR># sSql = "SELECT DISTINCT&nbsp; m.nome, ST_Transform(m.the_geom, 4326) FROM municipio m, aeroporto a WHERE ST_Contains(m.the_geom, a.the_geom);"<BR># cMng.WriteLayerKML("c:\\kml\\teste.kml",&nbsp; 0)<BR># <BR>#<BR># <BR>#&nbsp; Dependece Class:<BR>#-&nbsp; filelayerkml.py<BR>#<BR>#<BR># Last revision 18/3/2008<BR>from osgeo import ogr<BR>from util_ogr import filelayer<BR>import os, sys<BR>import os.path<BR>class MngPostGis:<BR>&nbsp;def __init__(self, host, dbname, user, pwd):<BR>&nbsp;&nbsp;self.__ds = ogr.Open("PG: host=%s dbname=%s user=%s password=%s" % (host, dbname, user, pwd))<BR>&nbsp;&nbsp;self.__lyr = ""<BR>&nbsp;def __del__(self):<BR>&nbsp;&nbsp;if isinstance(self.__lyr, ogr.Layer): self.__ds.ReleaseResultSet(self.__lyr)<BR>&nbsp;def SetLayerBySql(self, sSql, spatialFilter=""):<BR>&nbsp;&nbsp;if isinstance(self.__lyr, ogr.Layer): self.__ds.ReleaseResultSet(self.__lyr)<BR>&nbsp;&nbsp;if spatialFilter == "": self.__lyr = self.__ds.ExecuteSQL(sSql)<BR>&nbsp;&nbsp;else: self.__lyr = self.__ds.ExecuteSQL(sSql, spatialFilter)<BR>&nbsp;def WriteLayerKML(self, sFileKML, idFieldName):<BR>&nbsp;&nbsp;cFileLayerKML = filelayer.FileLayerKML(sFileKML)<BR>&nbsp;&nbsp;while True:<BR>&nbsp;&nbsp;&nbsp;feat = self.__lyr.GetNextFeature()<BR>&nbsp;&nbsp;&nbsp;if not feat: break<BR>&nbsp;&nbsp;&nbsp;cFileLayerKML.WriteFeature(feat.GetField(idFieldName),&nbsp; feat.GetGeometryRef().ExportToKML())<BR>&nbsp;def GetTotalFeatures(self):<BR>&nbsp;&nbsp;if isinstance(self.__lyr, ogr.Layer): return self.__lyr.GetFeatureCount()<BR>&nbsp;&nbsp;else: return 0<BR><BR>--------- postgis_kml_by_ogr.py ---<BR>&nbsp;<BR>---- filelayer.py ---<BR># use:<BR>#&nbsp; cFileLyrKml&nbsp; = FileLayerKML("c:\\kml\\teste.kml")<BR>#&nbsp; cFileLyrKml.WriteFeature( "Value of Attribute",&nbsp; sKMLGeometries):<BR># <BR>#<BR># Last revision 18/3/2008<BR>import os, sys<BR>import os.path<BR>class FileLayerKML:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def __init__(self, sFileKML):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Params:&nbsp; &lt;NameFileOut&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__CreateFileOut(sFileKML)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__WriteHeader()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def __del__(self):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__WriteEnd()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.flush()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.close()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def __CreateFileOut(self, NameFile):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut = file(NameFile, 'w')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; except IOError, error:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "Error File %s not be create.\nMenssage" % (NameFile, error)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys.exit()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def __WriteHeader(self):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLine = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.write(sLine)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLine = "&lt;kml xmlns=\"<A href="http://earth.google.com/kml/2.2/%22%3E/n" target=_blank>http://earth.google.com/kml/2.2\"&gt;\n</A>"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.write(sLine)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLine = "&lt;Document&gt;\n&lt;name&gt;%s&lt;/name&gt;\n" % self.__FileOut.name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.write(sLine)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def __WriteEnd(self):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLine = "&lt;/Document&gt;\n&lt;/kml&gt;"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.write(sLine)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def WriteFeature(self, sName, sKMLGeometries):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLine = "&lt;Placemark&gt;&lt;name&gt;%s&lt;/name&gt;\n%s\n&lt;/Placemark&gt;\n" % (sName, sKMLGeometries)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.__FileOut.write(sLine)<BR><BR>---- filelayer.py ---<BR>&nbsp;<BR>&nbsp;<BR><BR><BR><BR>
<BLOCKQUOTE>
<HR id=EC_stopSpelling>
From: shadkeene@hotmail.com<BR>To: fwtools@lists.maptools.org<BR>Date: Wed, 2 Apr 2008 11:16:19 -0700<BR>Subject: [FWTools] convert postgis data to kml<BR><BR>
<META content="Microsoft SafeHTML" name=Generator>
<STYLE>
.ExternalClass .EC_hmmessage P
{padding:0px;}
.ExternalClass body.EC_hmmessage
{font-size:10pt;font-family:Tahoma;}
</STYLE>
Hi,<BR>My goal is to display various shapes(polygons, points, linestring) on google maps by using data entered into a postgis database.&nbsp; I was looking for a way to do this that used the spatial structure already provided in postgis(already designating if shape is a linestring or polygon, etc) instead of parsing out the coordinates and then re-entering spatial structure in google maps.&nbsp; I saw that google maps api is now compatible with kml data formats.&nbsp; And then I read that FWTools can convert postgis data to kml format.&nbsp; <BR>I've done some reading in the forums about the actual process of converting postgis data to kml via FWTools, but didn't see anything that would help me.&nbsp; I'm new to kml but am familiar with postgis and perl language.&nbsp; Is there a tutorial for the process of converting postgis data to kml?&nbsp; Where can I get started?&nbsp; Thanks for any help,<BR>Shad<BR><BR>
<DIV><FONT style="COLOR: rgb(0,0,255)" size=1><SPAN style="FONT-STYLE: italic; FONT-FAMILY: Lucida Handwriting,Cursive"></SPAN></FONT><EM><FONT face="Lucida Handwriting" color=#0000ff size=1><BR></FONT></EM></DIV><BR>
<HR>
More immediate than e-mail? <A href="http://www.windowslive.com/messenger/overview.html?ocid=TXT_TAGLM_WL_Refresh_instantaccess_042008" target=_blank>Get instant access with Windows Live Messenger.</A> </BLOCKQUOTE><br /><hr />Notícias direto do New York Times, gols do Lance, videocassetadas e muitos outros vídeos no MSN Videos! <a href='http://video.msn.com/?mkt=pt-br' target='_new'>Confira já!</a></body>
</html>