diff options
author | Mark Wells <mark@freeside.biz> | 2016-11-17 00:57:40 -0800 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2016-11-17 00:57:40 -0800 |
commit | e33b3f4ae5f63db6f734ef38049092911ea9961b (patch) | |
tree | 5e252c804741effec716759d1285af277df18f1b /TIGERweb |
initial version
Diffstat (limited to 'TIGERweb')
-rw-r--r-- | TIGERweb/Layer.pm | 38 | ||||
-rw-r--r-- | TIGERweb/Service.pm | 22 |
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; |