I am trying to get a perimeter search working with DBIx::Class but have not succeeded so far.
The SQL I would like to generate looks like this:
SELECT
zip,
6371 * ACos( Cos(RADIANS(Lat)) * Cos(RADIANS(USERLAT)) * Cos(RADIANS(USERLNG) - RADIANS(Lng)) + Sin(RADIANS(Lat)) * Sin(RADIANS(USERLAT)) ) AS Distance
FROM
geopc
WHERE
6371 * ACos( Cos(RADIANS(Lat)) * Cos(RADIANS(USERLAT)) * Cos(RADIANS(USERLNG) - RADIANS(Lng)) + Sin(RADIANS(Lat)) * Sin(RADIANS(USERLAT)) ) <= DISTANCE
ORDER BY
Distance
Where USERLAT, USERLNG, and DISTANCE should be variables, which will come in thru a Webrequest.
My DBIx::Class Result:
use utf8;
package MyApp::Models::Schema::Result::Geopc;
use strict;
use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->table("geopc");
__PACKAGE__->add_columns(
"id",
{ data_type => "bigint", is_nullable => 0, is_auto_increment => 1 },
"country",
{ data_type => "varchar", is_nullable => 0, size => 2 },
"language",
{ data_type => "varchar", is_nullable => 0, size => 2 },
"iso2",
{ data_type => "varchar", is_nullable => 0, size => 6 },
"region1",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"region2",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"region3",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"region4",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"zip",
{ data_type => "varchar", is_nullable => 0, size => 10 },
"city",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"area1",
{ data_type => "varchar", is_nullable => 0, size => 80 },
"area2",
{ data_type => "varchar", is_nullable => 0, size => 80 },
"lat",
{ data_type => "double precision", is_nullable => 0 },
"lng",
{ data_type => "double precision", is_nullable => 0 },
"tz",
{ data_type => "varchar", is_nullable => 0, size => 30 },
"utc",
{ data_type => "varchar", is_nullable => 0, size => 10 },
"dst",
{ data_type => "varchar", is_nullable => 0, size => 1 },
);
__PACKAGE__->set_primary_key('id');
I have googled around but have not found a good way to handle this. Any help would be very much appreciated.
I am using MySQL ...
fromResultSet attribute. I can see if this works tomorrow. - nwellnhof