From 30f8fd69e76e3c8884407c39f646f05a48f85af5 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 30 Jul 2017 12:00:21 +0300 Subject: [PATCH] HighCharts Geolocation Map Attempts to fix error 12 --- .../plan/data/analysis/GeolocationPart.java | 41 ++--- .../plan/ui/html/graphs/SeriesCreator.java | 2 +- .../plan/ui/html/graphs/WorldMapCreator.java | 58 +++++++ Plan/src/main/resources/analysis.html | 156 ++++++++---------- 4 files changed, 144 insertions(+), 113 deletions(-) create mode 100644 Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldMapCreator.java diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java index 3c56d3ce0..1f4ea4008 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java @@ -1,5 +1,7 @@ package main.java.com.djrapitops.plan.data.analysis; +import main.java.com.djrapitops.plan.ui.html.graphs.WorldMapCreator; + import java.util.HashMap; import java.util.Map; @@ -19,10 +21,12 @@ public class GeolocationPart extends RawData { private final Map geoLocations; private final Map geoCodes; + private final Map geoCodeCounts; public GeolocationPart() { geoLocations = new HashMap<>(); geoCodes = new HashMap<>(); + geoCodeCounts = new HashMap<>(); String[] countries = new String[]{"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas, The", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burma", "Burundi", "Cabo Verde", "Cambodia", "Cameroon", "Canada", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Colombia", "Comoros", "Congo, Democratic Republic of the", "Congo, Republic of the", "Cook Islands", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Curacao", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Falkland Islands (Islas Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Polynesia", "Gabon", "Gambia, The", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guam", "Guatemala", "Guernsey", "Guinea-Bissau", "Guinea", "Guyana", "Haiti", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", "Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kosovo", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macau", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Mauritania", "Mauritius", "Mexico", "Micronesia, Federated States of", "Moldova", "Monaco", "Mongolia", "Montenegro", "Morocco", "Mozambique", "Namibia", "Nepal", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", "Nigeria", "Niger", "Niue", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Poland", "Portugal", "Puerto Rico", "Qatar", "Romania", "Russia", "Rwanda", "Saint Kitts and Nevis", "Saint Lucia", "Saint Martin", "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Sint Maarten", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Sudan", "Spain", "Sri Lanka", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Timor-Leste", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Virgin Islands", "West Bank", "Yemen", "Zambia", "Zimbabwe"}; String[] codes = new String[]{"AFG", "ALB", "DZA", "ASM", "AND", "AGO", "AIA", "ATG", "ARG", "ARM", "ABW", "AUS", "AUT", "AZE", "BHM", "BHR", "BGD", "BRB", "BLR", "BEL", "BLZ", "BEN", "BMU", "BTN", "BOL", "BIH", "BWA", "BRA", "VGB", "BRN", "BGR", "BFA", "MMR", "BDI", "CPV", "KHM", "CMR", "CAN", "CYM", "CAF", "TCD", "CHL", "CHN", "COL", "COM", "COD", "COG", "COK", "CRI", "CIV", "HRV", "CUB", "CUW", "CYP", "CZE", "DNK", "DJI", "DMA", "DOM", "ECU", "EGY", "SLV", "GNQ", "ERI", "EST", "ETH", "FLK", "FRO", "FJI", "FIN", "FRA", "PYF", "GAB", "GMB", "GEO", "DEU", "GHA", "GIB", "GRC", "GRL", "GRD", "GUM", "GTM", "GGY", "GNB", "GIN", "GUY", "HTI", "HND", "HKG", "HUN", "ISL", "IND", "IDN", "IRN", "IRQ", "IRL", "IMN", "ISR", "ITA", "JAM", "JPN", "JEY", "JOR", "KAZ", "KEN", "KIR", "KOR", "PRK", "KSV", "KWT", "KGZ", "LAO", "LVA", "LBN", "LSO", "LBR", "LBY", "LIE", "LTU", "LUX", "MAC", "MKD", "MDG", "MWI", "MYS", "MDV", "MLI", "MLT", "MHL", "MRT", "MUS", "MEX", "FSM", "MDA", "MCO", "MNG", "MNE", "MAR", "MOZ", "NAM", "NPL", "NLD", "NCL", "NZL", "NIC", "NGA", "NER", "NIU", "MNP", "NOR", "OMN", "PAK", "PLW", "PAN", "PNG", "PRY", "PER", "PHL", "POL", "PRT", "PRI", "QAT", "ROU", "RUS", "RWA", "KNA", "LCA", "MAF", "SPM", "VCT", "WSM", "SMR", "STP", "SAU", "SEN", "SRB", "SYC", "SLE", "SGP", "SXM", "SVK", "SVN", "SLB", "SOM", "ZAF", "SSD", "ESP", "LKA", "SDN", "SUR", "SWZ", "SWE", "CHE", "SYR", "TWN", "TJK", "TZA", "THA", "TLS", "TGO", "TON", "TTO", "TUN", "TUR", "TKM", "TUV", "UGA", "UKR", "ARE", "GBR", "USA", "URY", "UZB", "VUT", "VEN", "VNM", "VGB", "WBG", "YEM", "ZMB", "ZWE"}; @@ -32,6 +36,7 @@ public class GeolocationPart extends RawData { geoLocations.put(country, 0); geoCodes.put(country, countryCode); + geoCodeCounts.put(countryCode, 0); } } @@ -41,38 +46,20 @@ public class GeolocationPart extends RawData { } private void choroplethMapValues() { - StringBuilder locations = new StringBuilder("["); - StringBuilder z = new StringBuilder("["); - StringBuilder text = new StringBuilder("["); + String[] choropleth = WorldMapCreator.choroplethMapValues(geoLocations, geoCodes); - int i = 0; - int size = geoLocations.size(); - for (Map.Entry entrySet : geoLocations.entrySet()) { - String country = entrySet.getKey(); - String code = geoCodes.getOrDefault(country, "UNK"); - int amount = entrySet.getValue(); + addValue("geomapseries", WorldMapCreator.createDataSeries(geoCodeCounts)); - z.append("\"").append(amount).append("\""); - locations.append("\"").append(country).append("\""); - text.append("\"").append(code).append("\""); - - if (i < size - 1) { - locations.append(","); - z.append(","); - text.append(","); - } - } - - locations.append("]"); - z.append("]"); - text.append("]"); - - addValue("geomapz", z.toString()); - addValue("geomapcountries", locations.toString()); - addValue("geomapcodes", text.toString()); + addValue("geomapz", choropleth[0]); + addValue("geomapcountries", choropleth[1]); + addValue("geomapcodes", choropleth[2]); } public void addGeoloc(String country) { geoLocations.computeIfPresent(country, (computedCountry, amount) -> amount + 1); + String countryCode = geoCodes.get(country); + if (countryCode != null) { + geoCodeCounts.computeIfPresent(countryCode, (computedCountry, amount) -> amount + 1); + } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SeriesCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SeriesCreator.java index d35d4fedb..7b103efdb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SeriesCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SeriesCreator.java @@ -69,7 +69,7 @@ public class SeriesCreator { Point point = points.get(i); double y = point.getY(); long date = (long) point.getX(); - arrayBuilder.append("{x:").append(date).append(",y:").append(y).append("}"); + arrayBuilder.append("[").append(date).append(",").append(y).append("]"); if (i < size - 1) { arrayBuilder.append(","); } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldMapCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldMapCreator.java new file mode 100644 index 000000000..bf3f8f9e8 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldMapCreator.java @@ -0,0 +1,58 @@ +package main.java.com.djrapitops.plan.ui.html.graphs; + +import java.util.Map; + +public class WorldMapCreator { + + public static String createDataSeries(Map geoCodeCounts) { + StringBuilder arrayBuilder = new StringBuilder("["); + + int i = 0; + int size = geoCodeCounts.size(); + for (Map.Entry entry : geoCodeCounts.entrySet()) { + String geoCode = entry.getKey(); + Integer players = entry.getValue(); + if (players != 0) { + arrayBuilder.append("{'code':'").append(geoCode).append("','value':").append(players).append("}"); + if (i < size - 1) { + arrayBuilder.append(","); + } + } + i++; + } + + + arrayBuilder.append("]"); + return arrayBuilder.toString(); + } + + public static String[] choroplethMapValues(Map geoLocations, Map geoCodes) { + StringBuilder locations = new StringBuilder("["); + StringBuilder z = new StringBuilder("["); + StringBuilder text = new StringBuilder("["); + + int i = 0; + int size = geoLocations.size(); + for (Map.Entry entrySet : geoLocations.entrySet()) { + String country = entrySet.getKey(); + String code = geoCodes.getOrDefault(country, "UNK"); + int amount = entrySet.getValue(); + + z.append("\"").append(amount).append("\""); + locations.append("\"").append(country).append("\""); + text.append("\"").append(code).append("\""); + + if (i < size - 1) { + locations.append(","); + z.append(","); + text.append(","); + } + } + + locations.append("]"); + z.append("]"); + text.append("]"); + + return new String[]{z.toString(), locations.toString(), text.toString()}; + } +} diff --git a/Plan/src/main/resources/analysis.html b/Plan/src/main/resources/analysis.html index ddce7022c..e9816c7a0 100644 --- a/Plan/src/main/resources/analysis.html +++ b/Plan/src/main/resources/analysis.html @@ -7,7 +7,6 @@ -