summaryrefslogtreecommitdiff
path: root/TIGERweb
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-11-17 00:57:40 -0800
committerMark Wells <mark@freeside.biz>2016-11-17 00:57:40 -0800
commite33b3f4ae5f63db6f734ef38049092911ea9961b (patch)
tree5e252c804741effec716759d1285af277df18f1b /TIGERweb
initial version
Diffstat (limited to 'TIGERweb')
-rw-r--r--TIGERweb/Layer.pm38
-rw-r--r--TIGERweb/Service.pm22
2 files changed, 60 insertions, 0 deletions
diff --git a/TIGERweb/Layer.pm b/TIGERweb/Layer.pm
new file mode 100644
index 0000000..c416ef1
--- /dev/null
+++ b/TIGERweb/Layer.pm
@@ -0,0 +1,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;
diff --git a/TIGERweb/Service.pm b/TIGERweb/Service.pm
new file mode 100644
index 0000000..65cc8c6
--- /dev/null
+++ b/TIGERweb/Service.pm
@@ -0,0 +1,22 @@
+package Geo::USCensus::TIGERweb::Service;
+
+use strict;
+use warnings;
+use base 'Geo::USCensus::TIGERweb';
+use Geo::USCensus::TIGERweb::Layer;
+
+use List::Util qw(first);
+
+sub layer {
+ my $self = shift;
+ my $id_or_name = shift;
+ my $def = first { $_->{id} eq $id_or_name or $_->{name} eq $id_or_name }
+ @{ $self->info->{layers} };
+ if (!$def) {
+ $self->{error} = "TIGERweb layer name/id '$id_or_name' not found";
+ return;
+ }
+ return $self->create('Layer', $def->{id});
+}
+
+1;