private void loadPositions(Path baseDir) throws IOException {
        Path provinceDefinitionsPath = getFilePath(MapFile.POSITIONS, baseDir);

        Pattern pattern = Pattern.compile("(\\d+)=");
        Map<Integer, Province> provincesById = getProvincesById();
        try(BufferedReader reader = Files.newBufferedReader(provinceDefinitionsPath, MapUtilities.ISO_CHARSET)) {
            String line = "";

            while(line != null) {
                // Lines starting with # are comments, ignore them
                if(line.isEmpty() || line.startsWith("#")) {
                    line = reader.readLine();
                    continue;
                }

                Matcher matcher = pattern.matcher(line.trim());
                if(matcher.matches()){
                    int provinceId = Integer.parseInt(matcher.group(1));
                    reader.readLine(); // Open bracket
                    reader.readLine(); // position=
                    reader.readLine(); // Open bracket

                    String[] tokens = reader.readLine().trim().split(" ");
                    double cityX = Double.parseDouble(tokens[0]);
                    double cityY = height - Double.parseDouble(tokens[1]);
                    double unitX = Double.parseDouble(tokens[2]);
                    double unitY = height - Double.parseDouble(tokens[3]);
                    double textX = Double.parseDouble(tokens[2]);
                    double textY = height - Double.parseDouble(tokens[3]);
                    double tradeX = Double.parseDouble(tokens[2]);
                    double tradeY = height - Double.parseDouble(tokens[3]);
                    double portX = Double.parseDouble(tokens[2]);
                    double portY = height - Double.parseDouble(tokens[3]);
                    double combatX = Double.parseDouble(tokens[2]);
                    double combatY = height - Double.parseDouble(tokens[3]);

                    Province province = provincesById.get(provinceId);
                    province.addPosition(PositionType.CITY, new Point2D.Double(cityX, cityY));
                    province.addPosition(PositionType.UNIT, new Point2D.Double(unitX, unitY));
                    province.addPosition(PositionType.TEXT, new Point2D.Double(textX, textY));
                    province.addPosition(PositionType.TRADE, new Point2D.Double(tradeX, tradeY));
                    province.addPosition(PositionType.PORT, new Point2D.Double(portX, portY));
                    province.addPosition(PositionType.COMBAT, new Point2D.Double(combatX, combatY));

                    // Skip to next section
                    while(line != null && !line.startsWith("#"))
                        line = reader.readLine();
                }
            }
        }
    }