2022-12-11 16:47:36 +00:00
var osmUrl = $ ( '#iotamapjs' ) . attr ( "tileUrl" ) ;
function load _iota _map ( ) {
$ ( '.nav-tabs a[href="#iotamaptab"]' ) . tab ( 'show' ) ;
$ . ajax ( {
url : base _url + 'index.php/awards/iota_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 _iota _map2 ( data , worked , confirmed , notworked ) ;
} ,
error : function ( ) {
} ,
} ) ;
}
function load _iota _map2 ( data , worked , confirmed , notworked ) {
// If map is already initialized
var container = L . DomUtil . get ( 'iotamap' ) ;
if ( container != null ) {
container . _leaflet _id = null ;
container . remove ( ) ;
$ ( "#iotamaptab" ) . append ( '<div id="iotamap"></div>' ) ;
}
2023-03-19 15:58:41 +00:00
var map = new L . Map ( 'iotamap' , {
fullscreenControl : true ,
fullscreenControlOptions : {
position : 'topleft'
} ,
} ) ;
2022-12-11 16:47:36 +00:00
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 notworkedcount = data . length ;
var confirmedcount = 0 ;
var workednotconfirmedcount = 0 ;
for ( var i = 0 ; i < data . length ; i ++ ) {
var D = data [ i ] ;
if ( D [ 'status' ] != 'x' ) {
var mapColor = 'red' ;
if ( D [ 'status' ] == 'C' ) {
mapColor = 'green' ;
if ( confirmed != '0' ) {
addPolygon ( L , D , mapColor , map ) ;
addMarker ( L , D , mapColor , map ) ;
confirmedcount ++ ;
notworkedcount -- ;
}
}
if ( D [ 'status' ] == 'W' ) {
mapColor = 'orange' ;
if ( worked != '0' ) {
addPolygon ( L , D , mapColor , map ) ;
addMarker ( L , D , mapColor , map ) ;
workednotconfirmedcount ++ ;
notworkedcount -- ;
}
}
// Make a check here and hide what I don't want to show
if ( notworked != '0' ) {
if ( mapColor == 'red' ) {
addPolygon ( L , D , mapColor , map ) ;
addMarker ( L , D , mapColor , map ) ;
}
}
}
}
/*Legend specific*/
var legend = L . control ( { position : "topright" } ) ;
if ( notworked . checked == false ) {
notworkedcount = 0 ;
}
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 (' + confirmedcount + ')</span><br>' ;
div . innerHTML += '<i style="background: orange"></i><span>Worked not confirmed (' + workednotconfirmedcount + ')</span><br>' ;
div . innerHTML += '<i style="background: red"></i><span>Not worked (' + notworkedcount + ')</span><br>' ;
return div ;
} ;
legend . addTo ( map ) ;
map . setView ( [ 20 , 0 ] , 2 ) ;
}
/ *
* We need to fix some islands that would wrap around the whole map .
* That ' s why we add 360 degrees to some of them .
* The following island have this problem :
* AN - 016 , AS - 027 , AS - 092 , AS - 174 , OC - 016
* AN - 020 is and exception
* /
function addPolygon ( L , D , mapColor , map ) {
if ( D [ 'tag' ] != 'AN-016' ) {
if ( D [ 'lon1' ] > 0 && D [ 'lon2' ] < 0 && D [ 'lon1' ] - D [ 'lon2' ] > 180 ) {
D [ 'lon2' ] = parseFloat ( D [ 'lon2' ] ) + 360 ;
}
if ( D [ 'lon1' ] < 0 && D [ 'lon2' ] > 0 && D [ 'lon2' ] - D [ 'lon1' ] > 180 ) {
D [ 'lon1' ] = parseFloat ( D [ 'lon1' ] ) + 360 ;
}
}
// It seems to me that latitudes have the wrong sign to be drawn correctly in leaflet. That's why they are mulitipled with -1 to be drawn in the correct hemisphere.
var latlngs = [
[ D [ 'lat1' ] * - 1 , D [ 'lon1' ] ] ,
[ D [ 'lat2' ] * - 1 , D [ 'lon1' ] ] ,
[ D [ 'lat2' ] * - 1 , D [ 'lon2' ] ] ,
[ D [ 'lat1' ] * - 1 , D [ 'lon2' ] ]
] ;
var polygon = L . polygon ( latlngs , { color : mapColor } ) . addTo ( map ) ;
}
function addMarker ( L , D , mapColor , map ) {
var title = '<span><font style="color: ' + mapColor + '; text-shadow: 1px 0 #fff, -1px 0 #fff, 0 1px #fff, 0 -1px #fff, 1px 1px #fff, -1px -1px #fff, 1px -1px #fff, -1px 1px #fff;font-size: 14px; font-weight: 900;">' + D [ 'tag' ] + '</font></span>' ;
var myIcon = L . divIcon ( {
className : 'my-div-icon' ,
html : title ,
iconSize : [ 60 , 10 ]
} ) ;
2022-12-12 08:26:35 +00:00
var markerTitle = D [ 'tag' ] + ' - ' + D [ 'prefix' ] + ' - ' + D [ 'name' ] ;
2022-12-11 16:47:36 +00:00
// It seems to me that latitudes have the wrong sign to be drawn correctly in leaflet. That's why they are mulitipled with -1 to be drawn in the correct hemisphere.
L . marker (
[ D [ 'lat1' ] * - 1 , D [ 'lon1' ] ] , {
icon : myIcon ,
iota : D [ 'tag' ] ,
2022-12-12 08:26:35 +00:00
title : markerTitle ,
2022-12-11 16:47:36 +00:00
}
) . addTo ( map ) . on ( 'click' , onClick ) ;
}
function onClick ( e ) {
var marker = e . target ;
displayContacts ( marker . options . iota , $ ( '#band2' ) . val ( ) , $ ( '#mode' ) . val ( ) , 'IOTA' ) ;
}