kopia lustrzana https://github.com/magicbug/Cloudlog
[DXCC] Added map
rodzic
a9076bb656
commit
30f3df15ce
|
@ -602,4 +602,65 @@ class Awards extends CI_Controller {
|
|||
header('Content-Type: application/json');
|
||||
echo json_encode($zones);
|
||||
}
|
||||
|
||||
/*
|
||||
function dxcc_map
|
||||
This displays the DXCC map
|
||||
*/
|
||||
public function dxcc_map() {
|
||||
$this->load->model('dxcc');
|
||||
$this->load->model('bands');
|
||||
|
||||
$bands[] = $this->input->post('band');
|
||||
|
||||
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
|
||||
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
|
||||
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
|
||||
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
|
||||
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
|
||||
$postdata['band'] = $this->input->post('band');
|
||||
$postdata['mode'] = $this->input->post('mode');
|
||||
$postdata['includedeleted'] = $this->input->post('includedeleted') == 0 ? NULL: 1;
|
||||
$postdata['Africa'] = $this->input->post('Africa') == 0 ? NULL: 1;
|
||||
$postdata['Asia'] = $this->input->post('Asia') == 0 ? NULL: 1;
|
||||
$postdata['Europe'] = $this->input->post('Europe') == 0 ? NULL: 1;
|
||||
$postdata['NorthAmerica'] = $this->input->post('NorthAmerica') == 0 ? NULL: 1;
|
||||
$postdata['SouthAmerica'] = $this->input->post('SouthAmerica') == 0 ? NULL: 1;
|
||||
$postdata['Oceania'] = $this->input->post('Oceania') == 0 ? NULL: 1;
|
||||
$postdata['Antarctica'] = $this->input->post('Antarctica') == 0 ? NULL: 1;
|
||||
|
||||
$dxcclist = $this->dxcc->fetchdxcc($postdata);
|
||||
|
||||
$dxcc_array = $this->dxcc->get_dxcc_array($dxcclist, $bands, $postdata);
|
||||
|
||||
$i = 0;
|
||||
|
||||
foreach ($dxcclist as $dxcc) {
|
||||
$newdxcc[$i]['adif'] = $dxcc->adif;
|
||||
$newdxcc[$i]['prefix'] = $dxcc->prefix;
|
||||
$newdxcc[$i]['name'] = $dxcc->name;
|
||||
$newdxcc[$i]['lat'] = $dxcc->lat;
|
||||
$newdxcc[$i]['long'] = $dxcc->long;
|
||||
$newdxcc[$i++]['status'] = $this->returnStatus($dxcc_array[$dxcc->adif]);
|
||||
}
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($newdxcc);
|
||||
}
|
||||
|
||||
function returnStatus($string) {
|
||||
foreach ($string as $key) {
|
||||
if($key != "") {
|
||||
if (strpos($key, '>W<') !== false) {
|
||||
return 'W';
|
||||
}
|
||||
if (strpos($key, '>C<') !== false) {
|
||||
return 'C';
|
||||
}
|
||||
if ($key == '-') {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -82,7 +82,6 @@ class DXCC extends CI_Model {
|
|||
if ($postdata['worked'] != NULL) {
|
||||
$workedDXCC = $this->getDxccBandWorked($location_list, $band, $postdata);
|
||||
foreach ($workedDXCC as $wdxcc) {
|
||||
//function displayContacts(searchphrase, band, mode, type) {
|
||||
$dxccMatrix[$wdxcc->dxcc][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("'.str_replace("&", "%26", $wdxcc->name).'","'. $band . '","'. $postdata['mode'] . '","DXCC")\'>W</a></div>';
|
||||
}
|
||||
}
|
||||
|
@ -131,13 +130,7 @@ class DXCC extends CI_Model {
|
|||
where station_id in (" . $location_list .
|
||||
") and col_dxcc > 0";
|
||||
|
||||
if ($band == 'SAT') {
|
||||
$sql .= " and col_prop_mode ='" . $band . "'";
|
||||
}
|
||||
else {
|
||||
$sql .= " and col_prop_mode !='SAT'";
|
||||
$sql .= " and col_band ='" . $band . "'";
|
||||
}
|
||||
$sql .= $this->addBandToQuery($band);
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
|
||||
|
@ -166,13 +159,7 @@ class DXCC extends CI_Model {
|
|||
where station_id in (" . $location_list .
|
||||
") and col_dxcc > 0";
|
||||
|
||||
if ($band == 'SAT') {
|
||||
$sql .= " and col_prop_mode ='" . $band . "'";
|
||||
}
|
||||
else {
|
||||
$sql .= " and col_prop_mode !='SAT'";
|
||||
$sql .= " and col_band ='" . $band . "'";
|
||||
}
|
||||
$sql .= $this->addBandToQuery($band);
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
|
||||
|
@ -192,6 +179,19 @@ class DXCC extends CI_Model {
|
|||
return $query->result();
|
||||
}
|
||||
|
||||
function addBandToQuery($band) {
|
||||
$sql = '';
|
||||
if ($band != 'All') {
|
||||
if ($band == 'SAT') {
|
||||
$sql .= " and col_prop_mode ='" . $band . "'";
|
||||
} else {
|
||||
$sql .= " and col_prop_mode !='SAT'";
|
||||
$sql .= " and col_band ='" . $band . "'";
|
||||
}
|
||||
}
|
||||
return $sql;
|
||||
}
|
||||
|
||||
function fetchDxcc($postdata) {
|
||||
$CI =& get_instance();
|
||||
$CI->load->model('logbooks_model');
|
||||
|
@ -203,7 +203,7 @@ class DXCC extends CI_Model {
|
|||
|
||||
$location_list = "'".implode("','",$logbooks_locations_array)."'";
|
||||
|
||||
$sql = "select adif, prefix, name, date(end) Enddate, date(start) Startdate
|
||||
$sql = "select adif, prefix, name, date(end) Enddate, date(start) Startdate, lat, `long`
|
||||
from dxcc_entities";
|
||||
|
||||
if ($postdata['notworked'] == NULL) {
|
||||
|
@ -248,15 +248,7 @@ class DXCC extends CI_Model {
|
|||
where station_id in (" . $location_list .
|
||||
") and col_dxcc > 0";
|
||||
|
||||
if ($postdata['band'] != 'All') {
|
||||
if ($postdata['band'] == 'SAT') {
|
||||
$sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
|
||||
}
|
||||
else {
|
||||
$sql .= " and col_prop_mode !='SAT'";
|
||||
$sql .= " and col_band ='" . $postdata['band'] . "'";
|
||||
}
|
||||
}
|
||||
$sql .= $this->addBandToQuery($postdata['band']);
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
|
||||
|
@ -264,15 +256,7 @@ class DXCC extends CI_Model {
|
|||
|
||||
$sql .= " and not exists (select 1 from ".$this->config->item('table_name')." where station_id in (". $location_list .") and col_dxcc = thcv.col_dxcc and col_dxcc > 0";
|
||||
|
||||
if ($postdata['band'] != 'All') {
|
||||
if ($postdata['band'] == 'SAT') {
|
||||
$sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
|
||||
}
|
||||
else {
|
||||
$sql .= " and col_prop_mode !='SAT'";
|
||||
$sql .= " and col_band ='" . $postdata['band'] . "'";
|
||||
}
|
||||
}
|
||||
$sql .= $this->addBandToQuery($postdata['band']);
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
|
||||
|
@ -305,15 +289,7 @@ class DXCC extends CI_Model {
|
|||
where station_id in (". $location_list .
|
||||
") and col_dxcc > 0";
|
||||
|
||||
if ($postdata['band'] != 'All') {
|
||||
if ($postdata['band'] == 'SAT') {
|
||||
$sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
|
||||
}
|
||||
else {
|
||||
$sql .= " and col_prop_mode !='SAT'";
|
||||
$sql .= " and col_band ='" . $postdata['band'] . "'";
|
||||
}
|
||||
}
|
||||
$sql .= $this->addBandToQuery($postdata['band']);
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
|
||||
|
|
|
@ -1,4 +1,36 @@
|
|||
|
||||
<style>
|
||||
#dxccmap {
|
||||
height: calc(100vh - 500px) !important;
|
||||
max-height: 900px !important;
|
||||
}
|
||||
/*Legend specific*/
|
||||
.legend {
|
||||
padding: 6px 8px;
|
||||
font: 14px Arial, Helvetica, sans-serif;
|
||||
background: white;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
line-height: 24px;
|
||||
color: #555;
|
||||
}
|
||||
.legend h4 {
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
margin: 2px 12px 8px;
|
||||
color: #777;
|
||||
}
|
||||
.legend span {
|
||||
position: relative;
|
||||
bottom: 3px;
|
||||
}
|
||||
.legend i {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
float: left;
|
||||
margin: 0 8px 0 0;
|
||||
opacity: 0.7;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<h2><?php echo $page_title; ?></h2>
|
||||
|
||||
|
@ -121,13 +153,37 @@
|
|||
<div class="form-group row">
|
||||
<label class="col-md-2 control-label" for="button1id"></label>
|
||||
<div class="col-md-10">
|
||||
<button id="button2id" type="reset" name="button2id" class="btn-sm btn-warning">Reset</button>
|
||||
<button id="button1id" type="submit" name="button1id" class="btn-sm btn-primary">Show</button>
|
||||
<button id="button2id" type="reset" name="button2id" class="btn btn-sm btn-warning">Reset</button>
|
||||
<button id="button1id" type="submit" name="button1id" class="btn btn-sm btn-primary">Show</button>
|
||||
<?php if ($dxcc_array) {
|
||||
?><button type="button" onclick="load_dxcc_map();" class="btn btn-info btn-sm"><i class="fas fa-globe-americas"></i> Show DXCC Map</button>
|
||||
<?php }?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" id="table-tab" data-toggle="tab" href="#table" role="tab" aria-controls="table" aria-selected="true">Table</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="map-tab" data-toggle="tab" href="#dxccmaptab" role="tab" aria-controls="home" aria-selected="false">Map</a>
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<div class="tab-content" id="myTabContent">
|
||||
<div class="tab-pane fade" id="dxccmaptab" role="tabpanel" aria-labelledby="home-tab">
|
||||
<br />
|
||||
|
||||
<div id="dxccmap"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade show active" id="table" role="tabpanel" aria-labelledby="table-tab">
|
||||
|
||||
<?php
|
||||
$i = 1;
|
||||
if ($dxcc_array) {
|
||||
|
@ -191,4 +247,6 @@
|
|||
echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>Nothing found!</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -44,6 +44,10 @@ function load_was_map() {
|
|||
<script id="cqmapjs" type="text/javascript" src="<?php echo base_url(); ?>assets/js/sections/cqmap.js" tileUrl="<?php echo $this->optionslib->get_option('option_map_tile_server');?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($this->uri->segment(1) == "awards" && ($this->uri->segment(2) == "dxcc") ) { ?>
|
||||
<script id="dxccmapjs" type="text/javascript" src="<?php echo base_url(); ?>assets/js/sections/dxccmap.js" tileUrl="<?php echo $this->optionslib->get_option('option_map_tile_server');?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($this->uri->segment(1) == "statistics") { ?>
|
||||
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/chart.js"></script>
|
||||
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/chartjs-plugin-piechart-outlabels.js"></script>
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
var osmUrl = $('#dxccmapjs').attr("tileUrl");
|
||||
|
||||
function load_dxcc_map() {
|
||||
$('.nav-tabs a[href="#dxccmaptab"]').tab('show');
|
||||
$.ajax({
|
||||
url: base_url + 'index.php/awards/dxcc_map',
|
||||
type: 'post',
|
||||
data: {
|
||||
band: $('#band2').val(),
|
||||
mode: $('#mode').val(),
|
||||
worked: +$('#worked').prop('checked'),
|
||||
confirmed: +$('#confirmed').prop('checked'),
|
||||
notworked: +$('#notworked').prop('checked'),
|
||||
qsl: +$('#qsl').prop('checked'),
|
||||
lotw: +$('#lotw').prop('checked'),
|
||||
includedeleted: +$('#includedeleted').prop('checked'),
|
||||
Africa: +$('#Africa').prop('checked'),
|
||||
Asia: +$('#Asia').prop('checked'),
|
||||
Europe: +$('#Europe').prop('checked'),
|
||||
NorthAmerica: +$('#NorthAmerica').prop('checked'),
|
||||
SouthAmerica: +$('#SouthAmerica').prop('checked'),
|
||||
Oceania: +$('#Oceania').prop('checked'),
|
||||
Antarctica: +$('#Antarctica').prop('checked'),
|
||||
},
|
||||
success: function(data) {
|
||||
load_dxcc_map2(data);
|
||||
},
|
||||
error: function() {
|
||||
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function load_dxcc_map2(data) {
|
||||
|
||||
// If map is already initialized
|
||||
var container = L.DomUtil.get('dxccmap');
|
||||
|
||||
if(container != null){
|
||||
container._leaflet_id = null;
|
||||
container.remove();
|
||||
$("#dxccmaptab").append('<div id="dxccmap"></div>');
|
||||
}
|
||||
|
||||
var map = L.map('dxccmap');
|
||||
L.tileLayer(
|
||||
osmUrl,
|
||||
{
|
||||
attribution: '© <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
|
||||
maxZoom: 18
|
||||
}
|
||||
).addTo(map);
|
||||
|
||||
var notworked = data.length;
|
||||
var confirmed = 0;
|
||||
var workednotconfirmed = 0;
|
||||
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var D = data[i];
|
||||
var mapColor = 'red';
|
||||
|
||||
if (D['status'] == 'C') {
|
||||
mapColor = 'green';
|
||||
confirmed++;
|
||||
notworked--;
|
||||
}
|
||||
if (D['status'] == 'W') {
|
||||
mapColor = 'orange';
|
||||
workednotconfirmed++;
|
||||
notworked--;
|
||||
}
|
||||
|
||||
const markerHtmlStyles = `
|
||||
background-color: ${mapColor};
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
display: block;
|
||||
position: relative;
|
||||
border-radius: 3rem 3rem 0;
|
||||
transform: rotate(45deg);
|
||||
border: 1px solid #FFFFFF`
|
||||
|
||||
const icon = L.divIcon({
|
||||
className: "my-custom-pin",
|
||||
iconAnchor: [0, 24],
|
||||
labelAnchor: [-6, 0],
|
||||
popupAnchor: [0, -36],
|
||||
html: `<span style="${markerHtmlStyles}" />`
|
||||
})
|
||||
|
||||
L.marker(
|
||||
[D['lat'], D['long']], {
|
||||
icon: icon,
|
||||
title: D['adif']
|
||||
}
|
||||
).addTo(map).on('click', onClick);
|
||||
}
|
||||
|
||||
/*Legend specific*/
|
||||
var legend = L.control({ position: "topright" });
|
||||
|
||||
legend.onAdd = function(map) {
|
||||
var div = L.DomUtil.create("div", "legend");
|
||||
div.innerHTML += "<h4>Colors</h4>";
|
||||
div.innerHTML += '<i style="background: green"></i><span>Confirmed ('+confirmed+')</span><br>';
|
||||
div.innerHTML += '<i style="background: orange"></i><span>Worked not confirmed ('+workednotconfirmed+')</span><br>';
|
||||
div.innerHTML += '<i style="background: red"></i><span>Not worked ('+notworked+')</span><br>';
|
||||
return div;
|
||||
};
|
||||
|
||||
legend.addTo(map);
|
||||
|
||||
map.setView([20, 0], 2);
|
||||
}
|
||||
|
||||
function onClick(e) {
|
||||
var marker = e.target;
|
||||
displayContacts(marker.options.title, $('#band2').val(), $('#mode').val(), 'DXCC2');
|
||||
}
|
Ładowanie…
Reference in New Issue