<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5293838813370255098</id><updated>2011-08-03T21:31:32.101-07:00</updated><title type='text'>How to use MySQL Spatial Extensions</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://howto-use-mysql-spatial-ext.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5293838813370255098/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://howto-use-mysql-spatial-ext.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michele Mostarda</name><uri>http://www.blogger.com/profile/05204472552363682504</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5293838813370255098.post-8864621948496053250</id><published>2007-11-07T03:33:00.000-08:00</published><updated>2010-02-10T14:25:37.182-08:00</updated><title type='text'>Using Circular Area Selection</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;This mini tutorial explains how to use the Spatial extensions of&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt; MySql 5.x and demonstrates the high performaces that can be obtained if used&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt; in the correct way.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;The tutorial is intended to users who know SQL and MySQL in particular.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;. Creation of a Spatial table.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The first step explains how to create a table containing geographic data named&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Points&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create table Points (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    name VARCHAR(20) PRIMARY KEY,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="font-weight: bold;"&gt;location Point NOT NULL&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    description VARCHAR(200),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SPATIAL INDEX(location)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This DDL command creates a table named &lt;span style="font-style: italic;"&gt;Points &lt;/span&gt;containing a set of records&lt;br /&gt;with a name and a location characterized by a Point Geometry.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As you can see a spatial extension can be used as any other MySQL data type&lt;br /&gt;simply including it in the definition of a field.&lt;br /&gt;&lt;br /&gt;The base class of every Spatial Type dat is &lt;span style="font-style: italic;"&gt;Geometry&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The complete hyerarchy of geometry data type supported by MySQL can be found at&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/4.1/en/spatial-extensions.html"&gt;http://dev.mysql.com/doc/refman/4.1/en/spatial-extensions.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Step 2.&lt;/span&gt; Insert data inside the Spatial Table.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;This step shows how is easy to insert data inside the Points table.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSERT INTO Points (name, location) VALUES ( 'point1' , &lt;span style="font-weight: bold;"&gt;GeomFromText&lt;/span&gt;( ' POINT(31.5 42.2) ' ) )&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;This is just a common SQL INSERT operation, the only news is the use of the function &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;GeomFromText&lt;/span&gt;().&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This function takes a string and returns a Geometry Object.&lt;br /&gt;The format of the string is a GIS standard decribed at&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/4.1/en/gis-wkt-format.html"&gt;http://dev.mysql.com/doc/refman/4.1/en/gis-wkt-format.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3. &lt;/span&gt;Retrieve data from the Spatial Table.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Retrieve data from the Points table is even simpler:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SELECT name, &lt;span style="font-weight: bold;"&gt;AsText&lt;/span&gt;(location) FROM Points;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;This returns a result set which location is converted in the same GIS format introduced in Step2,&lt;br /&gt;in fact the &lt;span style="font-style: italic;"&gt;AsText&lt;/span&gt; function converts the internal representation of a geometry to a string format.&lt;br /&gt;&lt;br /&gt;There are another couple of functions very useful that can be introduced at this point:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SELECT name, AsText(location) FROM Points WHERE &lt;span style="font-weight: bold;"&gt;X&lt;/span&gt;(location) &lt; style="font-weight: bold;"&gt;Y&lt;/span&gt;(location) &gt; 12;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This SELECT returns a result set of points which location X() (longitude) is minor of 10 and Y() (latitude) is major of 12.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Step 4. &lt;/span&gt;Advanced queries on the Spatial Table.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Converts as readable text the envelope of the specified Geometry.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Returns the size (float) of the specified Geometry.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Returns the Geometry type (varchar) of the specified Geometry.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SELECT GeometryType(GeomFromText('POINT(1 1)'));    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;   &lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Find points in a bounding box.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SET @bbox = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SELECT name, AsText(location) FROM Points WHERE Intersects( location, GeomFromText(@bbox) );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Step 5.&lt;/span&gt; Find points in a circular area.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This step want to show how to perform queries of point geometries on circular areas (that areas described by a a center and a radius.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The first solution you could mind to find entities in a circular area would be:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SET @point  = 'POINT(10 10)';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SET @radius = 20;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:courier new;"&gt;SELECT name, AsText(location) FROM Points WHERE Distance(location, GeomFromText(@point)) &lt; @radius;  &lt;/span&gt; But &lt;span style="font-weight: bold;"&gt;this solution DOESN'T WORK&lt;/span&gt;,  because the Distance function is not implemented.&lt;br /&gt;In fact the MySQL Spatial Extension docs specifies that only a subset of the OpenGis standard&lt;br /&gt;has being covered by their implementatation !!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A good roundtrip to this problem is&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt; to use the intersect function.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;font-family:arial;"&gt;NOTE:&lt;/span&gt;&lt;span style="font-family:arial;"&gt; The MySQL Spatial Documentation specifies that the Intersect function for&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;every Geometry is &lt;span style="font-weight: bold;"&gt;approximated&lt;/span&gt; to the Intersect function of the bounding boxes of the involved&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;geometries.&lt;br /&gt;&lt;br /&gt;Due this approximation to abtain a correct result we have to filter the intersect results whith a pitagoric distance&lt;br /&gt;computation.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SET @center = GeomFromText('POINT(10 10)');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SET @radius = 30;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SET @bbox = CONCAT('POLYGON((', &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;            X(@center) - @radius, ' ', Y(@center) - @radius, ',',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;            X(@center) + @radius, ' ', Y(@center) - @radius, ',',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;            X(@center) + @radius, ' ', Y(@center) + @radius, ',', &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;            X(@center) - @radius, ' ', Y(@center) + @radius, ',',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;            X(@center) - @radius, ' ', Y(@center) - @radius, '))' &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[1]&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;SELECT name, AsText(location) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;FROM Points &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;WHERE Intersects( location, GeomFromText(@bbox) ) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) &lt; @radius;  &lt;span style="font-family:arial;"&gt;To Obtain a result ordered by distance from the center of the selection area:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;[2]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SELECT name, AsText(location), SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) AS distance&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;FROM Points  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;WHERE Intersects( location, GeomFromText(@bbox) ) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) &lt; @radius&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ORDER BY distance;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Step 6&lt;/span&gt;. Verify performances&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This last step want to provide a method to verify performances in querying large dataset on Spatial Data.&lt;br /&gt;&lt;br /&gt;First of all is provided a storage procedure able to fill the &lt;span style="font-style: italic;"&gt;Points&lt;/span&gt; table with a given number of random records.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CREATE PROCEDURE fill_points(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    IN size INT(10)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  DECLARE i DOUBLE(10,1) DEFAULT size;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  DECLARE lon FLOAT(7,4);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  DECLARE lat FLOAT(6,4);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  DECLARE position VARCHAR(100);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  -- Deleting all.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  DELETE FROM Points;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  WHILE i &gt; 0 DO  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SET lon = RAND() * 360 - 180;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SET lat = RAND() * 180 - 90;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SET position = CONCAT( 'POINT(', lon, ' ', lat, ')' );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    INSERT INTO Points(name, location) VALUES ( CONCAT('name_', i), GeomFromText(position) );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    SET i = i - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  END WHILE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;Then invoke the stored procedure with a significant number&lt;br /&gt;&lt;br /&gt;One million records for example.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CALL fill_points(1000000);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And then performs the queries [1] and [2].&lt;br /&gt;&lt;br /&gt;On my Intel Core Duo 2.0 GHz Laptop I obtain these results:&lt;br /&gt;&lt;br /&gt;Circular area selection without sorting [1]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;"&gt;43862 rows in set ~1.10 sec with &lt;span style="color: rgb(255, 0, 0);"&gt;1.000.000 records&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Circular area selection with sorting [2]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;font-family:arial;"&gt;43862 rows in set ~1.72 sec with &lt;span style="color: rgb(255, 0, 0);"&gt;1.000.000 records&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE&lt;/span&gt;: your results can change in size being the record locations randomatically generated.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;digg_url = 'http://howto-use-mysql-spatial-ext.blogspot.com/';&lt;br /&gt;digg_title = ' How to use MySQL Spatial Extensions';&lt;br /&gt;digg_topic = 'MySQL Spatial Extensions Circular Area Selection';&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5293838813370255098-8864621948496053250?l=howto-use-mysql-spatial-ext.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://howto-use-mysql-spatial-ext.blogspot.com/feeds/8864621948496053250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5293838813370255098&amp;postID=8864621948496053250' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5293838813370255098/posts/default/8864621948496053250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5293838813370255098/posts/default/8864621948496053250'/><link rel='alternate' type='text/html' href='http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html' title='Using Circular Area Selection'/><author><name>Michele Mostarda</name><uri>http://www.blogger.com/profile/05204472552363682504</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry></feed>
