summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-04-21 12:07:29 -0700
committerMark Wells <mark@freeside.biz>2016-04-27 13:07:36 -0700
commit1d2db1a7412b886a6120ebd527d6632bff27551d (patch)
tree71d0b1dfca8d2bfefac19b2b9f33505fb9a1f1fc /httemplate
parent391be944b451419e2683dcd0471e3532d728d8d5 (diff)
generate sector coverage maps with Splat, checkpoint, #37802
Conflicts: FS/FS/Schema.pm FS/FS/tower_sector.pm
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/edit/process/tower.html1
-rw-r--r--httemplate/edit/tower.html2
-rw-r--r--httemplate/elements/tower_sector.html5
-rw-r--r--httemplate/misc/sector-create_map.html10
-rw-r--r--httemplate/search/elements/gmap.html19
-rw-r--r--httemplate/search/sector.html85
-rwxr-xr-xhttemplate/search/svc_broadband-map.html16
-rw-r--r--httemplate/view/sector_map-png.cgi8
8 files changed, 142 insertions, 4 deletions
diff --git a/httemplate/edit/process/tower.html b/httemplate/edit/process/tower.html
index 02362db6a..d14ac56f8 100644
--- a/httemplate/edit/process/tower.html
+++ b/httemplate/edit/process/tower.html
@@ -4,6 +4,7 @@
process_o2m => { 'table' => 'tower_sector',
'fields' => [qw(
sectorname ip_addr height freq_mhz direction width
+ downtilt v_width margin
sector_range
)],
},
diff --git a/httemplate/edit/tower.html b/httemplate/edit/tower.html
index fa3838dcf..f27f6accc 100644
--- a/httemplate/edit/tower.html
+++ b/httemplate/edit/tower.html
@@ -38,7 +38,7 @@ my $m2_error_callback = sub { # reconstruct the list
my ($cgi, $object) = @_;
my @fields = qw(
- sectorname ip_addr height freq_mhz direction width sector_range
+ sectorname ip_addr height freq_mhz direction width tilt v_width margin sector_range
);
map {
diff --git a/httemplate/elements/tower_sector.html b/httemplate/elements/tower_sector.html
index 151d3ba65..987177582 100644
--- a/httemplate/elements/tower_sector.html
+++ b/httemplate/elements/tower_sector.html
@@ -56,8 +56,11 @@ tie my %label, 'Tie::IxHash',
'height' => 'Height',
'freq_mhz' => 'Freq. (MHz)',
'direction' => 'Direction', # or a button to set these to 0 for omni
- 'width' => 'Width', #
+ 'downtilt' => 'Downtilt',
+ 'width' => 'Horiz. width',
+ 'v_width' => 'Vert. width',
'sector_range' => 'Range',
+ 'margin' => 'Signal margin (dB)',
;
my @fields = keys %label;
diff --git a/httemplate/misc/sector-create_map.html b/httemplate/misc/sector-create_map.html
new file mode 100644
index 000000000..6af5fddbe
--- /dev/null
+++ b/httemplate/misc/sector-create_map.html
@@ -0,0 +1,10 @@
+<% $server->process %>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); # ???
+
+my $server =
+ new FS::UI::Web::JSRPC 'FS::tower_sector::process_generate_coverage', $cgi;
+
+</%init>
diff --git a/httemplate/search/elements/gmap.html b/httemplate/search/elements/gmap.html
index 8b070ebf9..632a32338 100644
--- a/httemplate/search/elements/gmap.html
+++ b/httemplate/search/elements/gmap.html
@@ -1,5 +1,6 @@
<%args>
@features
+@overlays
</%args>
<%doc>
Generic Google Maps front end.
@@ -24,6 +25,14 @@ Generic Google Maps front end.
}
}, # end of feature
],
+ overlays => [
+ { url => 'https://localhost/freeside/view/sector_overlay-png.html?102',
+ west => -130.0,
+ east => -128.0,
+ south => 10.0,
+ north => 12.0,
+ }, # make a ground overlay
+ ],
&>
</%doc>
@@ -54,6 +63,7 @@ body { height: 100%; margin: 0px; padding: 0px }
<script type="text/javascript">
var data_geojson = <% encode_json($tree) %>;
+var data_overlays = <% encode_json(\@overlays) %>;
var baseStyle = {
clickable: true,
@@ -75,6 +85,7 @@ var featureStyle = function(feature) {
};
var map;
+var overlays;
function initMap() {
var canvas = $('#map_canvas');
map = new google.maps.Map(canvas[0], { zoom: 6 });
@@ -116,6 +127,14 @@ function initMap() {
}
}); // addListener()
+
+ data_overlays.forEach(function(x) {
+ var url = x.url;
+ delete x.url;
+ var overlay = new google.maps.GroundOverlay( url, x );
+ overlay.setMap(map);
+ overlays.push(overlay);
+ });
}
$().ready( initMap );
diff --git a/httemplate/search/sector.html b/httemplate/search/sector.html
new file mode 100644
index 000000000..d03963237
--- /dev/null
+++ b/httemplate/search/sector.html
@@ -0,0 +1,85 @@
+<& /elements/header.html, {
+ 'title' => 'Sector coverage maps',
+ }
+&>
+<style>
+ a.createmap {
+ font-weight: bold;
+ color: blue;
+ }
+ a.viewmap {
+ font-weight: bold;
+ color: green;
+ }
+</style>
+<table class="grid">
+ <thead>
+ <tr>
+ <th>Tower / sector</th>
+ <th colspan=3>
+ </tr>
+ </thead>
+ <tbody>
+% foreach my $sector (@sectors) {
+% my $sectornum = $sector->sectornum;
+ <tr>
+ <td>
+ <a href="<% $fsurl %>edit/tower.html?<% $sector->towernum |h %>">
+ <% $sector->description |h %>
+ </a>
+ </td>
+
+% my @need_fields = $sector->need_fields_for_coverage;
+% if ( @need_fields ) {
+ <td>Need fields:</td>
+ <td>
+ <% join('<br>', @need_fields) %>
+ </td>
+% } else {
+ <td colspan="2" style="text-align: center">
+% my $text = 'Create map';
+% if ( length($sector->image) > 0 ) {
+% $text = 'Reprocess';
+% }
+ <form name="create_<% $sectornum |h %>">
+ <input type="hidden" name="sectornum" value="<% $sectornum |h %>">
+ <& /elements/progress-init.html,
+ 'create_'.$sectornum,
+ [ 'sectornum' ],
+ $fsurl.'misc/sector-create_map.html',
+ { 'message' => 'Map generated' },
+ "sector$sectornum"
+ &>
+ <a class="createmap" href="#" onclick="sector<% $sectornum %>process()">
+ <% $text %>
+ </a>
+% }
+ </td>
+ <td>
+% if ( length($sector->image) > 0 ) {
+ <a class="viewmap" href="<% $fsurl %>search/svc_broadband-map.html?sectornum=<% $sectornum %>">
+ View map
+ </a>
+% }
+ </td>
+ </tr>
+% } # foreach $sector
+ </tbody>
+</table>
+<& /elements/footer.html &>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+
+my $query = {
+ table => 'tower_sector',
+ select => 'tower_sector.*,
+ tower.latitude, tower.longitude, tower.color, tower.towername',
+ extra_sql => ' WHERE tower.disabled is null',
+ addl_from => ' JOIN tower USING (towernum)',
+ order_by => ' ORDER BY towername, sectorname',
+};
+
+my @sectors = qsearch($query);
+</%init>
diff --git a/httemplate/search/svc_broadband-map.html b/httemplate/search/svc_broadband-map.html
index 4c660b016..64a7f98de 100755
--- a/httemplate/search/svc_broadband-map.html
+++ b/httemplate/search/svc_broadband-map.html
@@ -1,6 +1,6 @@
<& /elements/header.html, 'Broadband Search Results' &>
-<& elements/gmap.html, features => \@features &>
+<& elements/gmap.html, features => \@features, overlays => \@overlays &>
<& /elements/footer.html &>
<%init>
@@ -76,7 +76,6 @@ foreach my $svc_broadband (@rows) {
}
- my $tower = $towers{$towernum};
if ( $tower->latitude and $tower->longitude ) {
push @features,
{
@@ -146,6 +145,19 @@ foreach my $tower (values(%towers)) {
};
}
+my @overlays;
+foreach my $sector (values %sectors) {
+ if ( length($sector->image) > 0 ) {
+ push @overlays,
+ { url => $fsurl.'view/sector_map-png.cgi?' . $sector->sectornum,
+ west => $sector->west,
+ east => $sector->east,
+ south => $sector->south,
+ north => $sector->north,
+ };
+ };
+};
+
</%init>
<%def .svc_broadband>
% my $svc = shift;
diff --git a/httemplate/view/sector_map-png.cgi b/httemplate/view/sector_map-png.cgi
new file mode 100644
index 000000000..7e7e799a8
--- /dev/null
+++ b/httemplate/view/sector_map-png.cgi
@@ -0,0 +1,8 @@
+<%init>
+my ($sectornum) = $cgi->keywords;
+my $sector = FS::tower_sector->by_key($sectornum);
+if ( $sector and length($sector->image) > 0 ) {
+ http_header('Content-Type', 'image/png');
+ $m->print($sector->image);
+}
+</%init>