const propertiesArray = [{id:"35-MFC327964",pos:{lat:54.418310156034,lng:-7.5967698335144}},{id:"35-MFC911203",pos:{lat:54.477345478286,lng:-7.5995785700302}},{id:"35-MFC910330",pos:{lat:54.478125048784,lng:-7.5989853968263}},{id:"35-MFC831750",pos:{lat:54.450213185104,lng:-7.8280039597791}},{id:"35-MFC780531",pos:{lat:54.397147129149,lng:-7.7408077843056}},{id:"35-MFC773779",pos:{lat:54.39541103861,lng:-7.7268843138058}},{id:"35-MFC766549",pos:{lat:54.407322745971,lng:-7.6471926401243}},{id:"48-MCGO0A1",pos:{lat:54.500054,lng:-7.69372}},{id:"48-MCGO0A18",pos:{lat:54.2920735,lng:-7.6875096}},{id:"48-MCGO0A263",pos:{lat:54.388709,lng:-7.7878506}},{id:"48-MCGO0A266",pos:{lat:54.3070924918565,lng:-7.66708828008483}},{id:"48-MCGO0A276",pos:{lat:54.4716673,lng:-7.6340207}},{id:"48-MCGO0A291",pos:{lat:54.3779145323552,lng:-7.46024604504579}},{id:"48-MCGO0A298",pos:{lat:54.3440599,lng:-7.5610541}},{id:"48-MCGO0A308",pos:{lat:54.4474381,lng:-8.1217729}},{id:"48-MCGO0A343",pos:{lat:54.388709,lng:-7.7878506}},{id:"48-MCGO0A355",pos:{lat:54.4235811581146,lng:-7.64172951216431}},{id:"48-MCGO0A525",pos:{lat:54.3966303,lng:-7.7182985}},{id:"48-MCGO0A708",pos:{lat:54.4204819,lng:-8.0883451}},{id:"48-MCGO0A746",pos:{lat:54.3454461,lng:-7.6315801}},{id:"48-MCGO0A759",pos:{lat:54.5436918,lng:-7.7971376}},{id:"48-MCGO0A800",pos:{lat:54.3365699,lng:-7.6523044}},{id:"48-MCGO0A832",pos:{lat:54.3502298,lng:-7.6320039}},{id:"48-MCGO0A872",pos:{lat:54.3371208595758,lng:-7.83370795636812}},{id:"48-MCGO0A883",pos:{lat:54.3980426,lng:-7.792415}},{id:"48-MCGO0A884",pos:{lat:54.3980426,lng:-7.792415}},{id:"48-MCGO0A997",pos:{lat:54.3486774,lng:-7.6266844}},{id:"48-MCGO0A1044",pos:{lat:54.3929217,lng:-7.6983605}},{id:"57-SLC992274",pos:{lat:54.2823283,lng:-7.5748162}},{id:"48-MCGO0A1001",pos:{lat:54.3582648,lng:-7.6677655}},{id:"57-SLC992314",pos:{lat:54.4175949,lng:-7.8168441}},{id:"57-SLC992251",pos:{lat:54.3337833,lng:-7.6634624}},{id:"57-SLC992252",pos:{lat:54.3337833,lng:-7.6634624}},{id:"57-SLC992300",pos:{lat:54.3506967,lng:-7.6428576}},{id:"57-SLC992297",pos:{lat:54.4481473,lng:-7.7941309}},{id:"57-SLC992281",pos:{lat:54.4481473,lng:-7.7941309}},{id:"57-SLC992269",pos:{lat:54.3492736,lng:-7.6522907}},{id:"57-SLC992271",pos:{lat:54.4172341,lng:-7.8161441}},{id:"57-SLC797761",pos:{lat:54.487940893611,lng:-7.6504865958557}},{id:"18-CNRCJBE2168",pos:{lat:54.4730242008833,lng:-7.62297000891241}},{id:"48-MCGO0A1122",pos:{lat:54.5173153,lng:-7.9058307}},{id:"105-25f38ee02c614ad580ff517773c8a636",pos:{lat:54.3340973,lng:-7.7425982}},{id:"105-7b65a9bc80d54cd89fa976bc042682cf",pos:{lat:54.402407,lng:-7.5513836}},{id:"104-303816",pos:{lat:54.47353,lng:-7.63239}},{id:"104-347194",pos:{lat:54.348625826525,lng:-7.6270597595751}},{id:"104-678821",pos:{lat:54.442513054894,lng:-7.8296710201265}},{id:"104-678842",pos:{lat:54.442513054894,lng:-7.8296710201265}},{id:"104-728378",pos:{lat:54.350912028565,lng:-7.6097143203715}},{id:"104-764168",pos:{lat:54.312396504419,lng:-7.5413572093125}},{id:"104-770485",pos:{lat:54.345568889697,lng:-7.6223282900895}},{id:"104-958257",pos:{lat:54.42071,lng:-7.59466}},{id:"104-958258",pos:{lat:54.42071,lng:-7.59466}},{id:"104-875939",pos:{lat:54.477100237117,lng:-7.6939783621267}},{id:"104-941312",pos:{lat:54.297233764273,lng:-7.5722457780408}},{id:"57-SLC992366",pos:{lat:54.3596307,lng:-7.6114684}},{id:"57-SLC992379",pos:{lat:54.3060653,lng:-7.5096397}},{id:"48-MCGO0A1156",pos:{lat:54.2556486609304,lng:-7.68945336823121}},{id:"48-MCGO0A1159",pos:{lat:54.3365471,lng:-7.7225223}},{id:"48-MCGO0A1173",pos:{lat:54.4595341199309,lng:-8.11319510685424}},{id:"57-SLC737226",pos:{lat:54.345370632135,lng:-7.7608757134937}},{id:"57-SLC791217",pos:{lat:54.316469123967,lng:-7.5355379210991}},{id:"57-SLC992400",pos:{lat:54.4203551,lng:-7.8215779}},{id:"57-SLC992416",pos:{lat:54.4182417,lng:-7.7547574}},{id:"48-MCGO0A1221",pos:{lat:54.2229593,lng:-7.499498}},{id:"48-MCGO0A1222",pos:{lat:54.2675842820203,lng:-7.70802259619118}},{id:"57-SLC992418",pos:{lat:54.420838,lng:-7.832751}},{id:"48-MCGO0A930",pos:{lat:54.3507098,lng:-7.6460867}},{id:"150-WATT0A46",pos:{lat:54.2473991,lng:-7.4540691}},{id:"150-WATT0A75",pos:{lat:54.3823904,lng:-7.4589534}},{id:"150-WATT0A118",pos:{lat:54.2506048,lng:-7.4355553}},{id:"150-WATT0A135",pos:{lat:54.2678182,lng:-7.5064107}},{id:"150-WATT0A179",pos:{lat:54.2500193880607,lng:-7.2021306308509}},{id:"150-WATT0A368",pos:{lat:54.3340973,lng:-7.7425982}},{id:"150-WATT0A380",pos:{lat:54.3455664080356,lng:-7.62214688531113}},{id:"150-WATT0A402",pos:{lat:54.3191056,lng:-7.3429688}},{id:"150-WATT0A424",pos:{lat:54.2811534157106,lng:-7.7712646704575}},{id:"150-WATT0A437",pos:{lat:54.4225898758541,lng:-7.65989516737652}},{id:"150-WATT0A440",pos:{lat:54.261781245141,lng:-7.45027352787502}},{id:"150-WATT0A479",pos:{lat:54.2489587115939,lng:-7.44964156791066}},{id:"150-WATT0A500",pos:{lat:54.2280920595266,lng:-7.25825855719036}},{id:"150-WATT0A524",pos:{lat:54.3485381957933,lng:-7.46297347389768}},{id:"150-WATT0A540",pos:{lat:54.302233449685,lng:-7.48690198991308}},{id:"150-WATT0A553",pos:{lat:54.3583922754764,lng:-7.40795962782459}},{id:"150-WATT0A607",pos:{lat:54.3836703136337,lng:-7.46171075739929}},{id:"35-MFC668417",pos:{lat:54.3523315975193,lng:-7.77074673497925}},{id:"48-MCGO0A1238",pos:{lat:54.3291809,lng:-7.6604323}},{id:"48-MCGO0A1239",pos:{lat:54.3451379,lng:-7.6228956}},{id:"57-SLC992448",pos:{lat:54.4446662,lng:-8.052272}},{id:"57-SLC992450",pos:{lat:54.3497004,lng:-7.6521647}},{id:"35-MFC668427",pos:{lat:54.4025942349273,lng:-7.78911455923367}},{id:"57-SLC992460",pos:{lat:54.2647057,lng:-7.7301333}},{id:"57-SLC992466",pos:{lat:54.4114611,lng:-7.6433178}},{id:"150-WATT0A608",pos:{lat:54.3823904,lng:-7.4589534}},{id:"57-SLC992472",pos:{lat:54.3507273,lng:-7.6431289}},{id:"57-SLC992475",pos:{lat:54.4174861,lng:-7.8194917}},{id:"35-MFC668436",pos:{lat:54.432561769309,lng:-7.79904283893433}},{id:"57-SLC992483",pos:{lat:54.3567808,lng:-7.6341509}},{id:"150-WATT0A668",pos:{lat:54.201625,lng:-7.289027}},{id:"150-WATT0A669",pos:{lat:54.201625,lng:-7.289027}},{id:"150-WATT0A670",pos:{lat:54.201625,lng:-7.289027}},{id:"57-SLC992491",pos:{lat:54.3444126,lng:-7.6255683}},{id:"57-SLC992492",pos:{lat:54.4293688111936,lng:-7.59748392327882}},{id:"57-SLC992498",pos:{lat:54.3583024093545,lng:-7.61306423016358}},{id:"104-1006660",pos:{lat:54.363543336696,lng:-7.6296675167607}},{id:"48-MCGO0A1171",pos:{lat:54.3338119,lng:-7.6524517}},{id:"69-CAR250162",pos:{lat:54.360848,lng:-7.632441}},{id:"57-SLC992506",pos:{lat:54.358736,lng:-7.6092781}},{id:"105-e139c4fdcb444ae9be2febe9dcb76b2f",pos:{lat:54.359913,lng:-7.6727933}},{id:"57-SLC992509",pos:{lat:54.3172602,lng:-7.585166}},{id:"57-SLC992510",pos:{lat:54.3931988,lng:-7.7619914}},{id:"35-MFC668457",pos:{lat:54.3299038092105,lng:-7.67390660475464}},{id:"104-1010300",pos:{lat:54.338348652351,lng:-7.6478148306287}},{id:"150-WATT0A690",pos:{lat:54.3514977683624,lng:-7.64635480659108}},{id:"35-MFC668463",pos:{lat:54.3562854314983,lng:-7.66888827672119}},{id:"57-SLC992532",pos:{lat:54.2558911,lng:-7.6906453}},{id:"104-1013547",pos:{lat:54.480909329369,lng:-7.7076234826472}},{id:"35-MFC668468",pos:{lat:54.4248640418607,lng:-7.6004469}},{id:"35-MFC668470",pos:{lat:54.4282544788488,lng:-7.76872032581177}},{id:"57-SLC992545",pos:{lat:54.2721088862554,lng:-7.74827686403198}},{id:"104-1016098",pos:{lat:54.3370188,lng:-7.6503112}},{id:"48-MCGO0A1332",pos:{lat:54.3657688129827,lng:-7.69949752488403}},{id:"104-1017117",pos:{lat:54.36717349711,lng:-7.5361273046027}},{id:"48-MCGO0A1361",pos:{lat:54.4724522,lng:-7.7054605}},{id:"57-SLC992552",pos:{lat:54.3530454,lng:-7.6619389}},{id:"48-MCGO0A1365",pos:{lat:54.3392838,lng:-7.6231}},{id:"104-1019126",pos:{lat:54.423994628559,lng:-7.5986515367956}},{id:"105-7a90b3296dd24f43a5a0a6e28371e299",pos:{lat:54.3107856,lng:-7.4264877}},{id:"150-WATT0A707",pos:{lat:54.4239718,lng:-7.6021198}},{id:"48-MCGO0A1359",pos:{lat:54.3767017,lng:-7.4620194}},{id:"150-WATT0A712",pos:{lat:54.3162388433237,lng:-7.57901686366965}},{id:"57-SLC992562",pos:{lat:54.3386596,lng:-7.7210199}},{id:"104-1021770",pos:{lat:54.345566667118,lng:-7.6218634644592}},{id:"35-MFC668490",pos:{lat:54.3554310273378,lng:-7.59020816455688}},{id:"57-SLC992569",pos:{lat:54.3360688,lng:-7.6516543}},{id:"57-SLC992572",pos:{lat:54.3933687,lng:-7.6940612}},{id:"57-SLC992573",pos:{lat:54.295407,lng:-7.6391483}},{id:"48-MCGO0A1347",pos:{lat:54.3379481,lng:-7.6265555}},{id:"57-SLC992577",pos:{lat:54.3394647,lng:-7.6294744}},{id:"57-SLC992578",pos:{lat:54.3934564,lng:-7.7578506}},{id:"48-MCGO0A1410",pos:{lat:54.4767399,lng:-7.62729}},{id:"57-SLC992583",pos:{lat:54.3548073623437,lng:-7.63205857054383}},{id:"48-MCGO0A1247",pos:{lat:54.3355054,lng:-7.6636229}},{id:"57-SLC992586",pos:{lat:54.3357237,lng:-7.6647409}},{id:"57-SLC992587",pos:{lat:54.3091796,lng:-7.7330975}},{id:"57-SLC992589",pos:{lat:54.3448327,lng:-7.6566792}},{id:"48-MCGO0A1395",pos:{lat:54.3405315,lng:-7.4413675}},{id:"57-SLC992594",pos:{lat:54.4177699949191,lng:-7.81563988860778}},{id:"57-SLC992595",pos:{lat:54.3524882,lng:-7.6650478}},{id:"57-SLC992598",pos:{lat:54.3280972,lng:-7.6149976}},{id:"150-WATT0A723",pos:{lat:54.4244386936939,lng:-7.600116463198}},{id:"57-SLC992603",pos:{lat:54.3533378,lng:-7.6086827}},{id:"48-MCGO0A1425",pos:{lat:54.3456938,lng:-7.6493139}},{id:"3-LBR251477",pos:{lat:54.402846,lng:-7.613619}},{id:"35-MFC668511",pos:{lat:54.4778711663607,lng:-7.62613003173828}},{id:"57-SLC992604",pos:{lat:54.4379806991355,lng:-7.81328567088623}},{id:"104-1031905",pos:{lat:54.3589651,lng:-7.6124205}},{id:"104-1032897",pos:{lat:54.459553675536,lng:-7.8157217299401}},{id:"48-MCGO0A1446",pos:{lat:54.3338119,lng:-7.6524517}},{id:"104-1023191",pos:{lat:54.422298132682,lng:-7.6745803719419}},{id:"48-MCGO0A1355",pos:{lat:54.3952191,lng:-7.6973855}},{id:"57-SLC992612",pos:{lat:54.3560017,lng:-7.6353081}},{id:"57-SLC992613",pos:{lat:54.4174861,lng:-7.8194917}},{id:"48-MCGO0A1452",pos:{lat:54.5300456,lng:-7.6580741}},{id:"48-MCGO0A1455",pos:{lat:54.3657688129827,lng:-7.69949752488403}},{id:"48-MCGO0A1134",pos:{lat:54.4698805,lng:-7.6323475}},{id:"158-936740",pos:{lat:54.392829238324,lng:-7.6957262884274}},{id:"57-SLC992617",pos:{lat:54.347624,lng:-7.661441}},{id:"48-MCGO0A1420",pos:{lat:54.2968995,lng:-7.8715854}},{id:"35-MFC668525",pos:{lat:54.474035226073,lng:-7.64653570287171}},{id:"57-SLC992622",pos:{lat:54.2953529,lng:-7.6389652}},{id:"150-WATT0A729",pos:{lat:54.2822950170348,lng:-7.57263332043226}},{id:"158-1036662",pos:{lat:54.2822321,lng:-7.5749006}},{id:"35-MFC668526",pos:{lat:54.2822321,lng:-7.5749006}},{id:"48-MCGO0A1463",pos:{lat:54.2828272,lng:-7.5735669}},{id:"105-f3cbd8fcfb674360aaf41a213044216f",pos:{lat:54.5164852,lng:-7.8340742}},{id:"104-1037021",pos:{lat:54.361342431672,lng:-7.6761682474354}},{id:"48-MCGO0A1469",pos:{lat:54.3456056099301,lng:-7.63058353435206}},{id:"48-MCGO0A1466",pos:{lat:54.2973323,lng:-7.6481475}},{id:"48-MCGO0A1475",pos:{lat:54.4640668,lng:-7.6209034}},{id:"48-MCGO0A1449",pos:{lat:54.3543772,lng:-7.6099365}},{id:"57-SLC992630",pos:{lat:54.3529050720364,lng:-7.63863302206009}},{id:"35-MFC668533",pos:{lat:54.3512676264598,lng:-7.62244051957397}},{id:"104-1037628",pos:{lat:54.28198043769,lng:-7.5754723902444}},{id:"57-SLC992631",pos:{lat:54.3557346,lng:-7.6326988}},{id:"35-MFC668534",pos:{lat:54.4736755,lng:-7.6211771}},{id:"35-MFC668535",pos:{lat:54.3386541236365,lng:-7.6283134005249}},{id:"57-SLC992632",pos:{lat:54.3486435948546,lng:-7.58011015836419}},{id:"48-MCGO0A1406",pos:{lat:54.3989791,lng:-7.7245665}},{id:"57-SLC992634",pos:{lat:54.3480965,lng:-7.653744}},{id:"57-SLC992635",pos:{lat:54.4179591590219,lng:-7.81475755363078}},{id:"57-SLC992637",pos:{lat:54.294967,lng:-7.6431554}},{id:"57-SLC992641",pos:{lat:54.3476874,lng:-7.6518201}},{id:"57-SLC992640",pos:{lat:54.4117544,lng:-7.6565922}},{id:"57-SLC992642",pos:{lat:54.3589184,lng:-7.6733529}},{id:"57-SLC992645",pos:{lat:54.3993255,lng:-7.747616}},{id:"57-SLC992647",pos:{lat:54.3524928,lng:-7.6719567}},{id:"57-SLC992648",pos:{lat:54.2175302,lng:-7.6820707}},{id:"48-MCGO0A1477",pos:{lat:54.3548986,lng:-7.6261192}},{id:"35-MFC668545",pos:{lat:54.3480837,lng:-7.6539626}},{id:"48-MCGO0A1472",pos:{lat:54.2976919670593,lng:-7.87207888258791}},{id:"48-MCGO0A1494",pos:{lat:54.3478574,lng:-7.6287764}},{id:"57-SLC992649",pos:{lat:54.3485746,lng:-7.580042}},{id:"3-LBR251912",pos:{lat:54.500671,lng:-7.971182}},{id:"48-MCGO0A1497",pos:{lat:54.3767017,lng:-7.4620194}},{id:"57-SLC992650",pos:{lat:54.3543359,lng:-7.6485097}},{id:"35-MFC668548",pos:{lat:54.3155518,lng:-7.5382775}},{id:"158-1044528",pos:{lat:54.328962090436,lng:-7.6159165806068}},{id:"57-SMYL0A1937",pos:{lat:54.4020308730468,lng:-7.78635309792537}},{id:"104-1044657",pos:{lat:54.343678768806,lng:-7.6549605868121}},{id:"35-MFC668549",pos:{lat:54.3172210760705,lng:-7.50128810486299}},{id:"104-1044975",pos:{lat:54.354194913676,lng:-7.69160780944}},]; let map; let markersArray = []; let markersArrayAll = []; let markersArrayChanged = []; let clusterMarkersArray = []; const infoWindow = document.querySelector(".info-window-control"); async function initMap() { const { Map, InfoWindow } = await google.maps.importLibrary("maps","geometry"); const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); let sw = new google.maps.LatLng(54.019510, -8.349163); let ne = new google.maps.LatLng(55.343439, -5.438346); let bounds = new google.maps.LatLngBounds(sw, ne); // Map Options let mapOptions = { zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP, mapId: "1c886fcb938b1123", disableDefaultUI: false, streetViewControl: true, streetViewControlOptions: { position: google.maps.ControlPosition.RIGHT_TOP, }, }; map = new Map(document.getElementById("area_map"), mapOptions); var _markerCluster = new markerClusterer.MarkerClusterer({map,algorithmOptions: { radius: 80}}); buildMakers(propertiesArray, AdvancedMarkerElement, bounds, InfoWindow); setMapBounds(map, markersArray); setMapMarkers( _markerCluster, markersArray, "add"); let ClusterChanged = "N"; google.maps.event.addListener(map, "idle", () => { markersArray.length = 0; markersArrayChanged.length = 0; markersArrayAll.map((property, i) => { let position = { lat:property.position.lat, lng: property.position.lng }; if(map.getBounds().contains(position)){ markersArray.push(property); } else { markersArrayChanged.push(property); } }); if(markersArrayChanged.length != 0 ){ ClusterChanged = "Y"; setMapMarkers( _markerCluster, markersArrayChanged, "remove"); setMapMarkers( _markerCluster, markersArray, "add"); } if(markersArrayChanged.length == 0 && ClusterChanged == "Y"){ ClusterChanged = "N"; setMapMarkers( _markerCluster, markersArrayAll, "add"); } }); google.maps.event.addListener(_markerCluster, 'click', function(cluster) { clusterMarkersArray = [] var markers = cluster.markers; for (let i in markers) { let position = { lat:markers[i].position.lat, lng: markers[i].position.lng }; var clusterMarkers = clusterMarkersArray; for (i = 0; i < clusterMarkers.length; i++) { var p1 = new google.maps.LatLng(clusterMarkers[i].lat, clusterMarkers[i].lng), p2 = new google.maps.LatLng(position.lat, position.lng); if(p1.equals(p2)){ var quot = 360.0 / clusterMarkersArray.length; var newLat = position.lat + -.00012 * Math.cos(+quot * i); //+ -.00008 * Math.cos((+quot * i) / 180 * Math.PI); //x var newLng = position.lng + -.00012 * Math.sin(+quot * i); //+ -.0008 * Math.sin((+quot * i) / 180 * Math.PI); //Y markers[i].position = {lat:newLat,lng:newLng}; } } clusterMarkersArray.push(position); } }); } function buildMakers(properties, AdvancedMarkerElement, bounds, InfoWindow){ const infoWindow = new InfoWindow(); properties.map((property, i) => { let position = {lat:property.pos.lat,lng:property.pos.lng}; // check if maker is withing NI Bounds if(bounds.contains(position)){ const icon = document.createElement("img"); icon.src = "/images/pin32x.png"; const marker = new AdvancedMarkerElement({ map, position: position, content: icon, gmpClickable: true, }); // Add a click listener for each marker, and set up the info window. marker.addListener("click", () => { infoWindow.close(); markerClick(marker, property.id, infoWindow); }); // check if maker is withing NI Bounds if(bounds.contains(position)){ markersArray.push(marker); markersArrayAll.push(marker); } } }); //console.timeEnd('build markers'); $("#map-loading").addClass('hide'); } function markerClick(marker, id, infoWindow){ const request = new Request("/_search-includes/marker-info?id="+id) fetch(request) .then((response) => { if (response.status === 200) { return response.json(); } else { throw new Error("Something went wrong on API server!"); } }) .then((response) => { const infoWindowContent = buildContent(response); infoWindow.setContent(infoWindowContent); infoWindow.open(marker.map, marker); }) .catch((error) => { console.error(error); }); } function buildContent(property){ content = `
${property.add1}, ${property.add2}
${property.agent.name}
${property.statust}
New Home
${property.pricet} ${property.poa != 1 ? `£${property.price}${ property.sector === "RR" && !["Weekly", "Per Week", "Weekly Rental Of"].includes(property.pricet) ? 'pm' : '' }` : property.price }
  • ${property.beds}
  • ${property.reps}
  • ${property.baths}
${property.hline}

${property.add1}

${property.add2}
`; return content; } function setMapMarkers(_markerCluster, _MarkersArray, Action){ var mc = _markerCluster; var ma = _MarkersArray; if(Action == "add"){ mc.addMarkers(ma); } if(Action == "remove"){ mc.removeMarkers(ma); } if(Action == "clear"){ mc.clearMarkers(); } } function setMapBounds(map, markers){ var boundsmarkers = new google.maps.LatLngBounds(); for (var i = 0; i < markers.length; i++) { let position = { lat: markers[i].position.lat, lng: markers[i].position.lng }; boundsmarkers.extend(position); } map.fitBounds(boundsmarkers); }