def clip(self, n, min, max):
if n < min:
n = min
if n > max:
n = max
return n
def longlat2tile(self, x1, y1, level):
M_PI = 3.1415926
EarthRadiusInMeters = 6378137
PixelsPerTile = 256
EarthCircumferenceInMeters = 2 * M_PI * EarthRadiusInMeters
rad_long = x1 * M_PI / 180
rad_lat = y1 * M_PI / 180
x_meters = EarthRadiusInMeters * rad_long
sin_latitude = math.sin(rad_lat)
i_log = math.log((1 + sin_latitude) / (1 - sin_latitude))
y_meters = EarthRadiusInMeters / 2 * i_log
num_pixels = long(PixelsPerTile << level)
meters_per_pixel = EarthCircumferenceInMeters / num_pixels
tile_long = int(self.clip((EarthCircumferenceInMeters / 2 + x_meters) / meters_per_pixel + 0.5, 0, num_pixels - 1))
tmp = long((EarthCircumferenceInMeters / 2 - y_meters))
tile_lat = int(self.clip(tmp / meters_per_pixel + 0.5, 0, num_pixels - 1))
return tile_long, tile_lat
计算直线距离
def getDistance(self, x1,y1,x2,y2):
dx = x2 - x1
dy = y2 - y1
sx = math.cos(x1* 0.01745329252)
dis = math.sqrt(dx*dx*sx*sx + dy*dy) * 111195.0
return dis