/* * Copyright (c) 2016 by Gerrit Grunwald * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package eu.hansolo.fx.world; import eu.hansolo.fx.world.World.Resolution; import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.CornerRadii; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; import org.kordamp.ikonli.javafx.FontIcon; import org.kordamp.ikonli.materialdesign.MaterialDesign; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.MissingResourceException; import java.util.Random; import static eu.hansolo.fx.world.Country.*; import static eu.hansolo.fx.world.Country.GB; import static eu.hansolo.fx.world.Country.PL; /** * User: hansolo * Date: 20.09.16 * Time: 13:37 */ public class Main extends Application { private static final Random RND = new Random(); private World world; private CountryRegion europeanUnion; @Override public void init() { europeanUnion = new CountryRegion("EU", BE, GR, LT, PT, BG, ES, LU, RO, CZ, FR, HU, SI, DK, HR, MT, SK, DE, IT, NL, FI, EE, CY, AT, SE, IE, LV, PL, GB); //europeanUnion.setColor(Color.LIGHTBLUE); //for (Country country : europeanUnion.getCountries()) { // country.setColor(Color.rgb(RND.nextInt(127) + 100, 0, RND.nextInt(127) + 128)); //} CountryRegion myRegion = new CountryRegion("BENELUX", BE, NL, LU); BusinessRegion.EU.setColor(Color.rgb(124, 208, 255)); //BusinessRegion.APAC.setColor(Color.LIGHTSALMON); world = WorldBuilder.create() .resolution(Resolution.HI_RES) //.backgroundColor(Color.web("#4aa9d7")) //.fillColor(Color.web("#dcb36c")) //.strokeColor(Color.web("#987028")) //.hoverColor(Color.web("#fec47e")) //.pressedColor(Color.web("#6cee85")) //.locationColor(Color.web("#0000ff")) //.selectedColor(Color.MAGENTA) .locationIconCode(MaterialDesign.MDI_STAR) .locations(new Location("SFO", 37.619751, -122.374366), new Location("YYC", 51.128148, -114.010791), new Location("ORD", 41.975806, -87.905294), new Location("YOW", 45.321867, -75.668200), new Location("JFK", 40.642660, -73.781232), new Location("GRU", -23.427337, -46.478853), new Location("RKV", 64.131830, -21.945686), new Location("MAD", 40.483162, -3.579211), new Location("CDG", 49.014162, 2.541908), new Location("LHR", 51.471125, -0.461951), LocationBuilder.create() .name("FRA").latitude(50.040864).longitude(8.560409) .color(Color.CRIMSON) .iconCode(MaterialDesign.MDI_HEART) .mouseEnterHandler(e -> ((FontIcon) e.getSource()).setFill(Color.CYAN)) .mousePressHandler(e -> { System.out.println("Frankfurt Airport"); ((FontIcon) e.getSource()).setFill(Color.MAGENTA); }) .mouseReleaseHandler(e -> ((FontIcon) e.getSource()).setFill(Color.CYAN)) .mouseExitHandler(e -> ((FontIcon) e.getSource()).setFill(Color.CRIMSON)) .build(), new Location("SVO", 55.972401, 37.412537), new Location("DEL", 28.555839, 77.100956), new Location("PEK", 40.077624, 116.605458), new Location("NRT", 35.766948, 140.385254), new Location("SYD", -33.939040, 151.174996)) .mousePressHandler(evt -> { CountryPath countryPath = (CountryPath) evt.getSource(); Locale locale = countryPath.getLocale(); System.out.println(locale.getDisplayCountry() + " (" + locale.getISO3Country() + ")"); System.out.println(Country.valueOf(countryPath.getName()).getValue() + " million people"); }) .zoomEnabled(true) .selectionEnabled(true) .build(); // Population per country in 2016 Map<String, Double> data = new HashMap<>(); addPopulationData(data); for (Country country : Country.values()) { try { String iso3Key = new Locale("", country.name()).getISO3Country(); Double value = data.get(iso3Key); country.setValue(new PopulationValueObject(null == value ? -1 : value)); } catch (MissingResourceException e) {} } } private static class PopulationValueObject implements ValueObject { private final double value; private PopulationValueObject(final double VALUE) { value = VALUE; } @Override public String toString() { return String.valueOf((int) value); } } private void addPopulationData(final Map<String, Double> DATA) { DATA.put("AFG", 32.739); DATA.put("ALB", 2.885); DATA.put("DZA", 40.654); DATA.put("AGO", 25.868); DATA.put("ATG", 0.09); DATA.put("ARG", 43.564); DATA.put("ARM", 2.991); DATA.put("AUS", 24.434); DATA.put("AUT", 8.594); DATA.put("AZE", 9.492); DATA.put("BHS", 0.368); DATA.put("BHR", 1.319); DATA.put("BGD", 161.513); DATA.put("BRB", 0.28); DATA.put("BLR", 9.451); DATA.put("BEL", 11.434); DATA.put("BLZ", 0.371); DATA.put("BEN", 11.128); DATA.put("BTN", 0.791); DATA.put("BOL", 11.725); DATA.put("BIH", 3.854); DATA.put("BWA", 2.154); DATA.put("BRA", 206.082); DATA.put("BRN", 0.423); DATA.put("BGR", 7.126); DATA.put("BFA", 18.42); DATA.put("BDI", 9.648); DATA.put("CPV", 0.531); DATA.put("KHM", 15.776); DATA.put("CMR", 23.685); DATA.put("CAN", 36.188); DATA.put("CAF", 4.888); DATA.put("TCD", 11.855); DATA.put("CHL", 18.196); DATA.put("CHN", 1381.454); DATA.put("COL", 48.75); DATA.put("COM", 0.823); DATA.put("COD", 84.13); DATA.put("COG", 4.46); DATA.put("CRI", 4.9); DATA.put("CIV", 24.327); DATA.put("HRV", 4.204); DATA.put("CYP", 0.864); DATA.put("CZE", 10.561); DATA.put("DNK", 5.683); DATA.put("DJI", 0.993); DATA.put("DMA", 0.071); DATA.put("DOM", 10.098); DATA.put("ECU", 16.529); DATA.put("EGY", 90.203); DATA.put("SLV", 6.403); DATA.put("GNQ", 0.821); DATA.put("ERI", 6.938); DATA.put("EST", 1.312); DATA.put("ETH", 91.196); DATA.put("FJI", 0.894); DATA.put("FIN", 5.5); DATA.put("FRA", 64.569); DATA.put("GAB", 1.881); DATA.put("GMB", 2.035); DATA.put("GEO", 3.678); DATA.put("DEU", 82.773); DATA.put("GHA", 27.573); DATA.put("GRC", 10.79); DATA.put("GRD", 0.107); DATA.put("GTM", 16.673); DATA.put("GIN", 12.654); DATA.put("GNB", 1.818); DATA.put("GUY", 0.769); DATA.put("HTI", 10.848); DATA.put("HND", 8.606); DATA.put("HKG", 7.357); DATA.put("HUN", 9.835); DATA.put("ISL", 0.332); DATA.put("IND", 1309.713); DATA.put("IDN", 258.802); DATA.put("IRN", 80.46); DATA.put("IRQ", 36.067); DATA.put("IRL", 4.675); DATA.put("ISR", 8.528); DATA.put("ITA", 61.151); DATA.put("JAM", 2.829); DATA.put("JPN", 126.541); DATA.put("JOR", 6.976); DATA.put("KAZ", 17.947); DATA.put("KEN", 45.478); DATA.put("KIR", 0.116); DATA.put("KOR", 50.835); DATA.put("UVK", 0.0); DATA.put("KWT", 4.225); DATA.put("KGZ", 6.059); DATA.put("LAO", 7.163); DATA.put("LVA", 1.976); DATA.put("LBN", 4.597); DATA.put("LSO", 1.937); DATA.put("LBR", 4.399); DATA.put("LBY", 6.385); DATA.put("LTU", 2.875); DATA.put("LUX", 0.577); DATA.put("MAC", 0.698); DATA.put("MKD", 2.076); DATA.put("MDG", 24.916); DATA.put("MWI", 18.632); DATA.put("MYS", 31.523); DATA.put("MDV", 0.354); DATA.put("MLI", 16.817); DATA.put("MLT", 0.431); DATA.put("MHL", 0.055); DATA.put("MRT", 3.794); DATA.put("MUS", 1.259); DATA.put("MEX", 128.632); DATA.put("FSM", 0.103); DATA.put("MDA", 3.553); DATA.put("MNG", 3.014); DATA.put("MNE", 0.623); DATA.put("MAR", 33.827); DATA.put("MOZ", 28.751); DATA.put("MMR", 52.254); DATA.put("NAM", 2.24); DATA.put("NPL", 28.758); DATA.put("NLD", 17.01); DATA.put("NZL", 4.687); DATA.put("NIC", 6.342); DATA.put("NER", 18.194); DATA.put("NGA", 183.636); DATA.put("NOR", 5.263); DATA.put("OMN", 3.957); DATA.put("PAK", 189.87); DATA.put("PLW", 0.018); DATA.put("PAN", 4.086); DATA.put("PNG", 7.911); DATA.put("PRY", 7.115); DATA.put("PER", 32.405); DATA.put("PHL", 104.195); DATA.put("POL", 38.003); DATA.put("PRT", 10.419); DATA.put("PRI", 3.472); DATA.put("QAT", 2.578); DATA.put("ROU", 19.869); DATA.put("RUS", 146.3); DATA.put("RWA", 11.59); DATA.put("WSM", 0.195); DATA.put("SMR", 0.031); DATA.put("STP", 0.208); DATA.put("SAU", 32.013); DATA.put("SEN", 15.406); DATA.put("SRB", 7.132); DATA.put("SYC", 0.093); DATA.put("SLE", 6.439); DATA.put("SGP", 5.584); DATA.put("SVK", 5.418); DATA.put("SVN", 2.065); DATA.put("SLB", 0.601); DATA.put("ZAF", 55.831); DATA.put("SSD", 12.499); DATA.put("ESP", 46.317); DATA.put("LKA", 21.252); DATA.put("KNA", 0.056); DATA.put("LCA", 0.174); DATA.put("VCT", 0.11); DATA.put("SDN", 39.599); DATA.put("SUR", 0.563); DATA.put("SWZ", 1.298); DATA.put("SWE", 10.027); DATA.put("CHE", 8.337); DATA.put("SYR", 0.0); DATA.put("TWN", 23.551); DATA.put("TJK", 8.655); DATA.put("TZA", 48.633); DATA.put("THA", 68.981); DATA.put("TLS", 1.187); DATA.put("TGO", 7.514); DATA.put("TON", 0.104); DATA.put("TTO", 1.364); DATA.put("TUN", 11.224); DATA.put("TUR", 78.559); DATA.put("TKM", 5.463); DATA.put("TUV", 0.011); DATA.put("UGA", 41.087); DATA.put("UKR", 42.501); DATA.put("ARE", 9.856); DATA.put("GBR", 65.572); DATA.put("USA", 324.328); DATA.put("URY", 3.427); DATA.put("UZB", 31.343); DATA.put("VUT", 0.275); DATA.put("VEN", 31.416); DATA.put("VNM", 92.637); DATA.put("YEM", 29.132); DATA.put("ZMB", 16.717); DATA.put("ZWE", 13.554); } @Override public void start(Stage stage) { StackPane pane = new StackPane(world); pane.setBackground(new Background(new BackgroundFill(world.getBackgroundColor(), CornerRadii.EMPTY, Insets.EMPTY))); Scene scene = new Scene(pane); //scene.getStylesheets().add(Main.class.getResource("custom-styles.css").toExternalForm()); stage.setTitle("World Map"); stage.setScene(scene); stage.show(); //world.zoomToCountry(Country.DE); //world.zoomToRegion(europeanUnion); world.zoomToRegion(BusinessRegion.EU); } @Override public void stop() { System.exit(0); } public static void main(String[] args) { launch(args); } }