Search in sources :

Example 6 with LBLFile

use of uk.me.parabola.imgfmt.app.lbl.LBLFile in project mkgmap by openstreetmap.

the class MapBuilder method processPOIs.

private void processPOIs(Map map, MapDataSource src) {
    LBLFile lbl = map.getLblFile();
    boolean checkedForPoiDispFlag = false;
    for (MapPoint p : src.getPoints()) {
        // special handling for highway exits
        if (p.isExit()) {
            processExit(map, (MapExitPoint) p);
        } else // * all POIs except roads in case the no-poi-address option is set
        if (!p.isCity() && !p.hasExtendedType() && poiAddresses) {
            String countryStr = p.getCountry();
            String regionStr = p.getRegion();
            String zipStr = p.getZip();
            String cityStr = p.getCity();
            if (locationAutofill.contains("nearest") && (countryStr == null || regionStr == null || (zipStr == null && cityStr == null))) {
                MapPoint nextCity = locator.findNearbyCityByName(p);
                if (nextCity == null)
                    nextCity = locator.findNextPoint(p);
                if (nextCity != null) {
                    if (countryStr == null)
                        countryStr = nextCity.getCountry();
                    if (regionStr == null)
                        regionStr = nextCity.getRegion();
                    if (zipStr == null) {
                        String cityZipStr = nextCity.getZip();
                        if (cityZipStr != null && cityZipStr.indexOf(',') < 0)
                            zipStr = cityZipStr;
                    }
                    if (cityStr == null)
                        cityStr = nextCity.getCity();
                }
            }
            if (countryStr != null && !checkedForPoiDispFlag) {
                // Different countries require different address notation
                poiDisplayFlags = locator.getPOIDispFlag(countryStr);
                checkedForPoiDispFlag = true;
            }
            POIRecord r = lbl.createPOI(p.getName());
            if (cityStr != null || regionStr != null || countryStr != null) {
                r.setCity(calcCity(lbl, cityStr, regionStr, countryStr));
            }
            if (zipStr != null) {
                Zip zip = lbl.createZip(zipStr);
                r.setZip(zip);
            }
            if (p.getStreet() != null) {
                Label streetName = lbl.newLabel(p.getStreet());
                r.setStreetName(streetName);
            }
            String houseNumber = p.getHouseNumber();
            if (houseNumber != null && !houseNumber.isEmpty()) {
                if (!r.setSimpleStreetNumber(houseNumber))
                    r.setComplexStreetNumber(lbl.newLabel(houseNumber));
            }
            String phone = p.getPhone();
            if (phone != null && !phone.isEmpty()) {
                if (!r.setSimplePhoneNumber(phone))
                    r.setComplexPhoneNumber(lbl.newLabel(phone));
            }
            poimap.put(p, r);
        }
    }
    lbl.allPOIsDone();
}
Also used : Zip(uk.me.parabola.imgfmt.app.lbl.Zip) MapPoint(uk.me.parabola.mkgmap.general.MapPoint) Label(uk.me.parabola.imgfmt.app.Label) POIRecord(uk.me.parabola.imgfmt.app.lbl.POIRecord) LBLFile(uk.me.parabola.imgfmt.app.lbl.LBLFile)

Example 7 with LBLFile

use of uk.me.parabola.imgfmt.app.lbl.LBLFile in project mkgmap by openstreetmap.

the class MapBuilder method processPoints.

/**
 * Step through the points, filter and create a map point which is then added
 * to the map.
 *
 * Note that the location and resolution of map elements is relative to the
 * subdivision that they occur in.
 *
 * @param map	The map to add points to.
 * @param div	The subdivision that the points belong to.
 * @param points The points to be added.
 */
private void processPoints(Map map, Subdivision div, List<MapPoint> points) {
    LBLFile lbl = map.getLblFile();
    div.startPoints();
    int res = div.getResolution();
    boolean haveIndPoints = false;
    int pointIndex = 1;
    // points (not 1)
    for (MapPoint point : points) {
        if (point.isCity() && point.getMinResolution() <= res) {
            ++pointIndex;
            haveIndPoints = true;
        }
    }
    for (MapPoint point : points) {
        if (point.isCity() || point.getMinResolution() > res)
            continue;
        String name = point.getName();
        Point p = div.createPoint(name);
        p.setType(point.getType());
        if (point.hasExtendedType()) {
            ExtTypeAttributes eta = point.getExtTypeAttributes();
            if (eta != null) {
                eta.processLabels(lbl);
                p.setExtTypeAttributes(eta);
            }
        }
        Coord coord = point.getLocation();
        try {
            p.setLatitude(coord.getLatitude());
            p.setLongitude(coord.getLongitude());
        } catch (AssertionError ae) {
            log.error("Problem with point of type 0x" + Integer.toHexString(point.getType()) + " at " + coord.toOSMURL());
            log.error("  Subdivision shift is " + div.getShift() + " and its centre is at " + div.getCenter().toOSMURL());
            log.error("  " + ae.getMessage());
            continue;
        }
        POIRecord r = poimap.get(point);
        if (r != null)
            p.setPOIRecord(r);
        map.addMapObject(p);
        if (!point.hasExtendedType()) {
            if (name != null && div.getZoom().getLevel() == 0) {
                if (pointIndex > 255)
                    log.error("Too many POIs at location " + div.getCenter().toOSMURL() + " - " + name + " will be ignored");
                else if (point.isExit()) {
                    Exit e = ((MapExitPoint) point).getExit();
                    if (e != null)
                        e.getHighway().addExitPoint(name, pointIndex, div);
                } else if (makePOIIndex)
                    lbl.createPOIIndex(name, pointIndex, div, point.getType());
            }
            ++pointIndex;
        }
    }
    if (haveIndPoints) {
        div.startIndPoints();
        // reset to 1
        pointIndex = 1;
        for (MapPoint point : points) {
            if (!point.isCity() || point.getMinResolution() > res)
                continue;
            String name = point.getName();
            Point p = div.createPoint(name);
            p.setType(point.getType());
            Coord coord = point.getLocation();
            try {
                p.setLatitude(coord.getLatitude());
                p.setLongitude(coord.getLongitude());
            } catch (AssertionError ae) {
                log.error("Problem with point of type 0x" + Integer.toHexString(point.getType()) + " at " + coord.toOSMURL());
                log.error("  Subdivision shift is " + div.getShift() + " and its centre is at " + div.getCenter().toOSMURL());
                log.error("  " + ae.getMessage());
                continue;
            }
            map.addMapObject(p);
            if (name != null && div.getZoom().getLevel() == 0) {
                // retrieve the City created earlier for this
                // point and store the point info in it
                City c = cityMap.get(point);
                if (pointIndex > 255) {
                    System.err.println("Can't set city point index for " + name + " (too many indexed points in division)\n");
                } else {
                    c.setPointIndex((byte) pointIndex);
                    c.setSubdivision(div);
                }
            }
            ++pointIndex;
        }
    }
}
Also used : Coord(uk.me.parabola.imgfmt.app.Coord) MapPoint(uk.me.parabola.mkgmap.general.MapPoint) ExtTypeAttributes(uk.me.parabola.imgfmt.app.trergn.ExtTypeAttributes) POIRecord(uk.me.parabola.imgfmt.app.lbl.POIRecord) LBLFile(uk.me.parabola.imgfmt.app.lbl.LBLFile) MapPoint(uk.me.parabola.mkgmap.general.MapPoint) MapExitPoint(uk.me.parabola.mkgmap.general.MapExitPoint) Point(uk.me.parabola.imgfmt.app.trergn.Point) City(uk.me.parabola.imgfmt.app.lbl.City) MapPoint(uk.me.parabola.mkgmap.general.MapPoint) MapExitPoint(uk.me.parabola.mkgmap.general.MapExitPoint) Point(uk.me.parabola.imgfmt.app.trergn.Point) Exit(uk.me.parabola.imgfmt.app.Exit)

Aggregations

LBLFile (uk.me.parabola.imgfmt.app.lbl.LBLFile)7 MapPoint (uk.me.parabola.mkgmap.general.MapPoint)5 City (uk.me.parabola.imgfmt.app.lbl.City)3 POIRecord (uk.me.parabola.imgfmt.app.lbl.POIRecord)3 Point (uk.me.parabola.imgfmt.app.trergn.Point)3 MapExitPoint (uk.me.parabola.mkgmap.general.MapExitPoint)3 Exit (uk.me.parabola.imgfmt.app.Exit)2 Label (uk.me.parabola.imgfmt.app.Label)2 Highway (uk.me.parabola.imgfmt.app.lbl.Highway)2 Zip (uk.me.parabola.imgfmt.app.lbl.Zip)2 Coord (uk.me.parabola.imgfmt.app.Coord)1 Country (uk.me.parabola.imgfmt.app.lbl.Country)1 ExitFacility (uk.me.parabola.imgfmt.app.lbl.ExitFacility)1 Region (uk.me.parabola.imgfmt.app.lbl.Region)1 Numbers (uk.me.parabola.imgfmt.app.net.Numbers)1 ExtTypeAttributes (uk.me.parabola.imgfmt.app.trergn.ExtTypeAttributes)1 RGNFile (uk.me.parabola.imgfmt.app.trergn.RGNFile)1 TREFile (uk.me.parabola.imgfmt.app.trergn.TREFile)1 FileSystem (uk.me.parabola.imgfmt.fs.FileSystem)1 CityInfo (uk.me.parabola.mkgmap.general.CityInfo)1