parallels.append(specpar) par = par - stepsize # correct near-zero imprecision of floats if par > -1e-10 and par < 1e-10: par = 0 # avoid multiple guide instances: record all present guides: existing_guides = list() for guide in namedview.getElementsByTagName("sodipodi:guide"): existing_guides.append(guide.getAttribute("id")) n_guides = 0 # iterate over meridians list... for lon in meridians: # calculate position and id guide_pos = x + (OSMTools.lon_to_x(lon,args.ZOOM) - args.X0) * width / args.NX guide_id = "meridian{0}".format(lon) # check if guide is already present (id in use) if guide_id not in existing_guides: # create Inkscape guide element, populate it and append it to the # named view of the SVG document guide = svg.createElement("sodipodi:guide") guide.setAttribute("id",guide_id) guide.setAttribute("orientation","1,0") guide.setAttribute("position","{0},{1}".format(guide_pos,0)) namedview.appendChild(guide) print("Added guide for meridian={0}° at x={1}.".format(lon,guide_pos)) n_guides = n_guides + 1 else: print("Skipping already existing guide for meridian={0}°.".format(lon))
except IndexError: print("Invalid source URL provided!") sys.exit(1) # check bounding box values if args.EAST <= args.WEST or args.NORTH <= args.SOUTH: print("Invalid bounding box values! Required: WEST < EAST and SOUTH < NORTH") sys.exit(1) # check zoom factor if args.ZOOM < 0 or args.ZOOM > 18: print("Invalid zoom factor!") sys.exit(1) # upper left corner of map x0 = int(OSMTools.lon_to_x(args.WEST,args.ZOOM)) y0 = int(OSMTools.lat_to_y(args.NORTH,args.ZOOM)) # lower right corner of map # (i.e. lower right tile next to the one which contains EAST/SOUTH -> +1) x1 = int(OSMTools.lon_to_x(args.EAST, args.ZOOM))+1 y1 = int(OSMTools.lat_to_y(args.SOUTH,args.ZOOM))+1 tiles = [(args.ZOOM,x,y) for x in range(x0,x1) for y in range(y0,y1)] n = len(tiles) # calculate image dimensions based on the standard 256x256 tile w = (x1 - x0) * 256 h = (y1 - y0) * 256 # open map image file