summaryrefslogtreecommitdiff
path: root/FS/FS/deploy_zone.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2022-08-26 12:23:55 -0700
committerIvan Kohler <ivan@freeside.biz>2022-08-26 12:23:55 -0700
commitf2d69a9f2797d7b2b071c99792938d4f04b18920 (patch)
tree551a92fa1daa10c7d1018a528f50a4d3fccb5ebb /FS/FS/deploy_zone.pm
parent6132541132dc1be466436c7a3809a0c23fce4e2f (diff)
add shapefile, kmz and geojson export to deployment zones, RT#86460
Diffstat (limited to 'FS/FS/deploy_zone.pm')
-rw-r--r--FS/FS/deploy_zone.pm71
1 files changed, 71 insertions, 0 deletions
diff --git a/FS/FS/deploy_zone.pm b/FS/FS/deploy_zone.pm
index 723b491..16ba5dd 100644
--- a/FS/FS/deploy_zone.pm
+++ b/FS/FS/deploy_zone.pm
@@ -10,9 +10,14 @@ use Cpanel::JSON::XS;
use LWP::UserAgent;
use HTTP::Request::Common;
+use Geo::JSON::Polygon;
+use Geo::JSON::Feature;
+
# update this in 2020, along with the URL for the TIGERweb service
our $CENSUS_YEAR = 2010;
+our $tech_label = FS::part_pkg_fcc_option->technology_labels;
+
=head1 NAME
FS::deploy_zone - Object methods for deploy_zone records
@@ -275,6 +280,27 @@ sub deploy_zone_vertex {
});
}
+=item shapefile_add SHAPEFILE
+
+Adds this deployment zone to the supplied Geo::Shapelib shapefile.
+
+=cut
+
+sub shapefile_add {
+ my( $self, $shapefile ) = @_;
+
+ my @coordinates = map { [ $_->longitude, $_->latitude, 0, 0 ] }
+ $self->deploy_zone_vertex;
+ push @coordinates, $coordinates[0];
+
+ push @{$shapefile->{Shapes}}, { 'Vertices' => \@coordinates };
+ push @{$shapefile->{ShapeRecords}}, [ $tech_label->{$self->technology},
+ $self->adv_speed_down,
+ $self->adv_speed_up,
+ ];
+ '';
+}
+
=item vertices_json
Returns the vertex list for this zone, as a JSON string of
@@ -289,6 +315,51 @@ sub vertices_json {
encode_json(\@vertices);
}
+=item geo_json_feature
+
+Returns this zone as a Geo::JSON::Feature object
+
+=cut
+
+sub geo_json_feature {
+ my $self = shift;
+
+ my @coordinates = map { [ $_->longitude, $_->latitude ] }
+ $self->deploy_zone_vertex;
+ push @coordinates, $coordinates[0];
+
+ Geo::JSON::Feature->new({
+ geometry => Geo::JSON::Polygon->new({ coordinates => [ \@coordinates ] }),
+ properties => { 'Technology' => $tech_label->{$self->technology},
+ 'Down' => $self->adv_speed_down,
+ 'Up' => $self->adv_speed_up,
+ },
+ })
+}
+
+=item kml_add
+
+Adds this deployment zone to the supplied Geo::GoogleEarth::Pluggable object.
+
+=cut
+
+sub kml_polygon {
+ my( $self, $kml ) = @_;
+
+ my $name = $self->description. ' ('. $self->adv_speed_down. '/'.
+ $self->adv_speed_up. ')';
+
+ $kml->Polygon( 'name' => $name,
+ 'coordinates' => [ [ #outerBoundary
+ map { [ $_->longitude, $_->latitude, 0 ] }
+ $self->deploy_zone_vertex
+ ],
+ #[ #innerBoundary
+ #]
+ ]
+ );
+}
+
=head2 SUBROUTINES
=over 4