numpy_test.py 1.9 KB
# coding=utf-8
#author:        4N
#createtime:    2021/9/29
#email:         nheweijun@sina.com

def determine_level(xysize, origin_extent, extent, max_level):
    '''
    根据范围判断调用金字塔的哪一层
    :param xysize:
    :param origin_extent:
    :param extent:
    :param max_level:
    :return:
    '''
    x = xysize[0]
    y = xysize[1]
    level = -1
    pixel = x * y * (((extent[2] - extent[0]) * (extent[3] - extent[1])) / (
            (origin_extent[2] - origin_extent[0]) * (origin_extent[3] - origin_extent[1])))
    while pixel > 100000 and level < max_level - 1:
        level += 1
        x = x / 2
        y = y / 2
        pixel = x * y * (((extent[2] - extent[0]) * (extent[3] - extent[1])) / (
                (origin_extent[2] - origin_extent[0]) * (origin_extent[3] - origin_extent[1])))
    return level

import math
def determine_level2(xysize, origin_extent, extent, max_level):
    '''
    根据范围判断调用金字塔的哪一层
    :param xysize:
    :param origin_extent:
    :param extent:
    :param max_level:
    :return:
    '''
    x = xysize[0]
    y = xysize[1]

    level_up = round (math.sqrt( round (math.sqrt((x * y * (((extent[2] - extent[0]) * (extent[3] - extent[1])) / (
            (origin_extent[2] - origin_extent[0]) * (origin_extent[3] - origin_extent[1])))) / 100000))))


    return level_up - 1 if level_up < max_level else max_level - 1

import time
t1 = time.time()

print(determine_level2([108488,90777],[111.639350712, 28.9170588759, 111.751508603, 29.032941696],
                       [111.739350712, 29.0070588759, 111.751508603, 29.032941696],9))
print(time.time()-t1)
t1 = time.time()

print(determine_level([108488,90777],[111.639350712, 28.9170588759, 111.751508603, 29.032941696],
                       [111.739350712, 29.0070588759, 111.751508603, 29.032941696],9))

print(time.time()-t1)