def test_getTileBounds(self): self.assertNearlyEqual(getTileBounds(level=1, x=0, y=0), (-180, -90, 0, 90)) self.assertNearlyEqual(getTileBounds(level=1, x=1, y=0), (0, -90, 180, 90)) self.assertNearlyEqual(getTileBounds(level=3, x=2, y=2), (-90, 0, -45, 45))
def mapTileImage(request, dayCode, level, x, y): level = int(level) x = int(x) y = int(y) genTilePath = os.path.join(os.path.dirname(__file__), 'genTile.py') coordArgs = ('--west=%s --south=%s --east=%s --north=%s' % tile.getTileBounds(level, x, y)) fd, outPath = tempfile.mkstemp('-genTileOutput.png') os.close(fd) ret = dosys('%s %s %s' % (genTilePath, coordArgs, outPath)) if ret == 0: img = outPath mimetype = 'image/png' else: # stupid fallback if genTile doesn't work. for example, if matplotlib is not installed. img = os.path.join(os.path.dirname(__file__), 'static', 'style', 'isruApp', 'resolveLogo70.png') mimetype = 'image/gif' try: pass # os.remove(outPath) except OSError: pass return HttpResponse(file(img, 'r').read(), content_type=mimetype)
def mapTileKml(request, layerId, dayCode, level, x, y): level = int(level) x = int(x) y = int(y) # make links to sub-tiles if necessary if level < settings.XGDS_PLOT_MAP_ZOOM_RANGE[1] - 1: linkList = [] subLevel = level + 1 for offset in ((0, 0), (0, 1), (1, 0), (1, 1)): subX = 2 * x + offset[0] subY = 2 * y + offset[1] subUrl = (request.build_absolute_uri( reverse('xgds_plot_mapTileKml', args=[layerId, dayCode, subLevel, subX, subY]))) linkList.append(""" <NetworkLink> <Region> %(box)s <Lod> <minLodPixels>%(minLodPixels)s</minLodPixels> <maxLodPixels>-1</maxLodPixels> </Lod> </Region> <Link> <href>%(subUrl)s</href> <viewRefreshMode>onRegion</viewRefreshMode> </Link> </NetworkLink> """ % dict(box=tile.getLatLonAltBox(tile.getTileBounds(subLevel, subX, subY)), subUrl=subUrl, minLodPixels=settings.XGDS_PLOT_MAP_PIXELS_PER_TILE // 2)) netLinks = '\n'.join(linkList) else: netLinks = '' #tileUrl = request.build_absolute_uri(reverse('mapTileImage', args=[level, x, y])) tileUrl = request.build_absolute_uri( '%s/%s/%s/%d/%d/%d.png' % (MAP_DATA_PATH, layerId, dayCode, level, x, y)) bounds = tile.getTileBounds(level, x, y) minZoom, maxZoom = settings.XGDS_PLOT_MAP_ZOOM_RANGE if level < maxZoom - 1: maxLodPixels = settings.XGDS_PLOT_MAP_PIXELS_PER_TILE * 2 else: maxLodPixels = -1 if level > minZoom: minLodPixels = settings.XGDS_PLOT_MAP_PIXELS_PER_TILE // 2 else: minLodPixels = -1 return KmlUtil.wrapKmlDjango(""" <Folder> %(netLinks)s <GroundOverlay> <Icon> <href>%(tileUrl)s</href> <refreshMode>onInterval</refreshMode> <refreshInterval>5</refreshInterval> </Icon> %(llBox)s <drawOrder>%(level)s</drawOrder> <Region> %(llaBox)s <Lod> <minLodPixels>%(minLodPixels)s</minLodPixels> <maxLodPixels>%(maxLodPixels)s</maxLodPixels> </Lod> </Region> </GroundOverlay> <Style> <ListStyle> <listItemType>checkHideChildren</listItemType> </ListStyle> </Style> </Folder> """ % dict(netLinks=netLinks, llBox=tile.getLatLonBox(bounds), llaBox=tile.getLatLonAltBox(bounds), tileUrl=tileUrl, level=level, minLodPixels=minLodPixels, maxLodPixels=maxLodPixels))
def mapTileKml(request, layerId, dayCode, level, x, y): level = int(level) x = int(x) y = int(y) # make links to sub-tiles if necessary if level < settings.XGDS_PLOT_MAP_ZOOM_RANGE[1] - 1: linkList = [] subLevel = level + 1 for offset in ((0, 0), (0, 1), (1, 0), (1, 1)): subX = 2 * x + offset[0] subY = 2 * y + offset[1] subUrl = (request.build_absolute_uri (reverse ('xgds_plot_mapTileKml', args=[layerId, dayCode, subLevel, subX, subY]))) linkList.append(""" <NetworkLink> <Region> %(box)s <Lod> <minLodPixels>%(minLodPixels)s</minLodPixels> <maxLodPixels>-1</maxLodPixels> </Lod> </Region> <Link> <href>%(subUrl)s</href> <viewRefreshMode>onRegion</viewRefreshMode> </Link> </NetworkLink> """ % dict(box=tile.getLatLonAltBox(tile.getTileBounds(subLevel, subX, subY)), subUrl=subUrl, minLodPixels=settings.XGDS_PLOT_MAP_PIXELS_PER_TILE // 2)) netLinks = '\n'.join(linkList) else: netLinks = '' #tileUrl = request.build_absolute_uri(reverse('mapTileImage', args=[level, x, y])) tileUrl = request.build_absolute_uri('%s/%s/%s/%d/%d/%d.png' % (MAP_DATA_PATH, layerId, dayCode, level, x, y)) bounds = tile.getTileBounds(level, x, y) minZoom, maxZoom = settings.XGDS_PLOT_MAP_ZOOM_RANGE if level < maxZoom - 1: maxLodPixels = settings.XGDS_PLOT_MAP_PIXELS_PER_TILE * 2 else: maxLodPixels = -1 if level > minZoom: minLodPixels = settings.XGDS_PLOT_MAP_PIXELS_PER_TILE // 2 else: minLodPixels = -1 return KmlUtil.wrapKmlDjango(""" <Folder> %(netLinks)s <GroundOverlay> <Icon> <href>%(tileUrl)s</href> <refreshMode>onInterval</refreshMode> <refreshInterval>5</refreshInterval> </Icon> %(llBox)s <drawOrder>%(level)s</drawOrder> <Region> %(llaBox)s <Lod> <minLodPixels>%(minLodPixels)s</minLodPixels> <maxLodPixels>%(maxLodPixels)s</maxLodPixels> </Lod> </Region> </GroundOverlay> <Style> <ListStyle> <listItemType>checkHideChildren</listItemType> </ListStyle> </Style> </Folder> """ % dict(netLinks=netLinks, llBox=tile.getLatLonBox(bounds), llaBox=tile.getLatLonAltBox(bounds), tileUrl=tileUrl, level=level, minLodPixels=minLodPixels, maxLodPixels=maxLodPixels))