Skip to content

Instantly share code, notes, and snippets.

@geobabbler
Created January 21, 2013 20:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geobabbler/4589175 to your computer and use it in GitHub Desktop.
Save geobabbler/4589175 to your computer and use it in GitHub Desktop.
Script for counting/totaling number of tiles with user-supplied bounds in a Google tiling scheme.
## Copyright (c) 2013, William Dollins
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are met:
##
## Redistributions of source code must retain the above copyright notice,
## this list of conditions and the following disclaimer.
##
## Redistributions in binary form must reproduce the above copyright notice,
## this list of conditions and the following disclaimer in the documentation
## and/or other materials provided with the distribution.
##
## Neither the name of the copyright owner nor the names of its contributors
## may be used to endorse or promote products derived from this software
## without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
## TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
## OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
## EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from globalmaptiles import GlobalMercator
import sys
import os
# usage - python tilecalc.py -count <level> <minlat> <minlon> <maxlat> <maxlon>
# python tilecalc.py -total <startlevel> <endlevel> <minlat> <minlon> <maxlat> <maxlon>
#
# -count - returns approximate count of Google tiles in specified bounds and specified zoom level
# -total - returns approximate total number of Google tiles in specified bounds of specified zoom levels
def countTiles(argv):
lod = int(argv[2])
minlat = float(argv[3])
minlon = float(argv[4])
maxlat = float(argv[5])
maxlon = float(argv[6])
mercator = GlobalMercator()
mxmin, mymin = mercator.LatLonToMeters( minlat, minlon )
tminx, tminy = mercator.MetersToTile( mxmin, mymin, lod )
gminx, gminy = mercator.GoogleTile( tminx, tminy, lod)
mxmax, mymax = mercator.LatLonToMeters( maxlat, maxlon )
tmaxx, tmaxy = mercator.MetersToTile( mxmax, mymax, lod )
gmaxx, gmaxy = mercator.GoogleTile( tmaxx, tmaxy, lod)
xdiff = gmaxx - gminx
ydiff = gmaxy - gminy
numtiles = xdiff * ydiff
return abs(numtiles)
def totalTiles(argv):
startlvl = int(argv[2])
endlvl = int(argv[3])
i = startlvl
tot = 0
while i <= endlvl:
params = [argv[0], argv[1], str(i), argv[4], argv[5], argv[6], argv[7]]
c = countTiles(params)
tot = tot + c
i = i + 1
return tot
argv = sys.argv
if argv[1] == '-count':
c = countTiles(argv)
print c
elif argv[1] == '-total':
t = totalTiles(argv)
print t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment