summaryrefslogtreecommitdiff
path: root/TIGERweb/Layer.pm
blob: c416ef1ea223f71ea8f5f34d1fa545b1cd831fa9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package Geo::USCensus::TIGERweb::Layer;

use strict;
use warnings;
use base 'Geo::USCensus::TIGERweb';

my %geometryTypeGuess = (
  'x'       => 'esriGeometryPoint',
  'points'  => 'esriGeometryMultiPoint',
  'paths'   => 'esriGeometryPolyLine',
  'rings'   => 'esriGeometryPolygon',
);

sub query {
  my ($self, %param) = @_;
  my $g = $param{geometry} or die 'query: geometry required';
  if (!$param{geometryType}) {
    foreach (keys %geometryTypeGuess) {
      if (exists $g->{$_}) {
        $param{geometryType} = $geometryTypeGuess{$_};
        last;
      }
    }
  }
  my $fields = delete $param{fields};
  die 'query: fields required' if !$fields;
  $param{outFields} = $fields;
  # set a spatial reference in a sensible way
  my $wkid = $param{inSR} ||= '4326';
  $param{outSR} ||= $wkid;
  $g->{wkid} ||= $wkid;
  # default to find features that intersect
  $param{'spatialRel'} ||= 'esriSpatialRelIntersects';

  return $self->request('query', \%param);
}

1;