[wp-hackers] MySQL's spatial data support and GeoData in wordpress
Kevin Newman
CaptainN at unFocus.com
Thu Dec 16 01:25:18 UTC 2010
Once you have that table setup, and data going in, you could pull out
posts doing useful things like location based order by with a SQL
statement like this:
SELECT
p.post_title, p.post_content,
g.geo_id, g.geo_key, AsText(g.geo_value),
GLength(LineStringFromWKB(LineString(
POINT(40.9435272,-74.7296006), # Add your search location here -
lat, lng
AsBinary(geo_value))))
AS distance
FROM wp_postgeo g
LEFT JOIN wp_posts p ON p.ID = g.post_id
WHERE p.post_type <> "revision" AND p.post_status <> "auto-draft"
ORDER BY distance ASC;
Pretty nifty stuff.
Kevin N.
On 12/14/10 6:44 PM, Kevin Newman wrote:
> My suggestion for a table structure, that might even be appropriate
> enough for core (if there are genuine advantages of the spacial column
> type) would be to model it after the postmeta table. This would allow
> for any general purpose GEOMETRY (the MySQL type) data to be stored in
> there by meta_key:
>
> CREATE TABLE `wp_postgeo` (
> `geo_id` bigint(20) unsigned NOT NULL auto_increment,
> `post_id` bigint(20) unsigned NOT NULL default '0',
> `geo_key` varchar(255) default NULL,
> `geo_value` GEOMETRY,
> PRIMARY KEY (`geo_id`),
> KEY `geo_value` (`geo_value`(255)),
> KEY `post_id` (`post_id`),
> KEY `geo_key` (`geo_key`)
> ) ENGINE=MyISAM
>
> Some notes;
> - I have no idea how big the index should be for KEY `geo_value` - I
> set it to 255, because I needed to set it to something to get MySQL to
> create the table.
> - I set the type to MyISAM becuase I the docs say that is the only
> engine that supports spatial indexes.)
> - The GEOMETRY column type actually allows for any of the other
> geometry based data formats to be stored within that column (most
> geocoding would be storing a POINT type for example):
> http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html
>
> There may also be a case for a `wp_usergeo` table.
>
> Kevin N.
>
>
>
> On 12/14/10 3:07 PM, Kevin Newman wrote:
>> It looks like there are some older threads on the subject of how to
>> best store geo location data, but MySQL's built in spatial column
>> support didn't come up, so I thought I'd mention it as a possible
>> standard for geo data storage.
>>
>> http://maisonbisson.com/blog/post/12147/working-with-spatial-data-in-mysql/
>>
>> http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-columns.html
>>
>> My SQL skills are rusty, but I think we can still use that support
>> even with the current Meta data storage format suggested here
>> http://codex.wordpress.org/Geodata by using temp tables and/or
>> subqueries (which if I remember correctly still use temp tables). I
>> wonder if it'd be better to standardize on a static table, to avoid
>> the overhead of the temp tables to gain efficient features like
>> distance based sorting (if it's truly worth it to use spatial columns
>> in MySQL - which I'm not even sure about).
>>
>> Thoughts?
>>
>> Kevin N.
More information about the wp-hackers
mailing list