def to_meshpoint(meshcode, lat_multiplier, lon_multiplier):
    """地域メッシュコードから緯度経度を算出する。
        下記のメッシュに対応している。
                1次(80km四方):1
                40倍(40km四方):40000
                20倍(20km四方):20000
                16倍(16km四方):16000
                2次(10km四方):2
                8倍(8km四方):8000
                5倍(5km四方):5000
                4倍(4km四方):4000
                2.5倍(2.5km四方):2500
                2倍(2km四方):2000
                3次(1km四方):3
                4次(500m四方):4
                5次(250m四方):5
                6次(125m四方):6

    Args:
        meshcode: 指定次の地域メッシュコード
        lat_multiplier: 当該メッシュの基準点(南西端)から、緯度座標上の点の位置を当該メッシュの単位緯度の倍数で指定
        lon_multiplier: 当該メッシュの基準点(南西端)から、経度座標上の点の位置を当該メッシュの単位経度の倍数で指定
    Return:
        lat: 世界測地系の緯度(度単位)
        lon: 世界測地系の経度(度単位)

    """

    def mesh_cord(func_higher_cord, func_unit_cord, func_multiplier):
        return func_higher_cord() + func_unit_cord() * func_multiplier()

    lat_multiplier_lv = lambda: lat_multiplier

    lon_multiplier_lv = lambda: lon_multiplier

    lat_multiplier_lv1 = _functools.partial(
        lambda meshcode: int(meshcode[0:2]), meshcode=meshcode)

    lon_multiplier_lv1 = _functools.partial(
        lambda meshcode: int(meshcode[2:4]), meshcode=meshcode)

    lat_multiplier_40000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[4:5])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_40000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[4:5])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_20000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[5:6])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_20000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[5:6])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_16000 = _functools.partial(
        lambda meshcode: int(meshcode[4:5])/2, meshcode=meshcode)

    lon_multiplier_16000 = _functools.partial(
        lambda meshcode: int(meshcode[5:6])/2, meshcode=meshcode)

    lat_multiplier_lv2 = _functools.partial(
        lambda meshcode: int(meshcode[4:5]), meshcode=meshcode)

    lon_multiplier_lv2 = _functools.partial(
        lambda meshcode: int(meshcode[5:6]), meshcode=meshcode)

    lat_multiplier_8000 = _functools.partial(
        lambda meshcode: int(meshcode[4:5]), meshcode=meshcode)

    lon_multiplier_8000 = _functools.partial(
        lambda meshcode: int(meshcode[5:6]), meshcode=meshcode)

    lat_multiplier_5000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[6:7])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_5000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[6:7])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_4000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[7:8])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_4000 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[7:8])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_2500 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[7:8])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_2500 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[7:8])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_2000 = _functools.partial(
        lambda meshcode: int(meshcode[6:7])/2, meshcode=meshcode)

    lon_multiplier_2000 = _functools.partial(
        lambda meshcode: int(meshcode[7:8])/2, meshcode=meshcode)

    lat_multiplier_lv3 = _functools.partial(
        lambda meshcode: int(meshcode[6:7]), meshcode=meshcode)

    lon_multiplier_lv3 = _functools.partial(
        lambda meshcode: int(meshcode[7:8]), meshcode=meshcode)

    lat_multiplier_lv4 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[8:9])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_lv4 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[8:9])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_lv5 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[9:10])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_lv5 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[9:10])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    lat_multiplier_lv6 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[10:11])-1)[2:].zfill(2)[0:1]), meshcode=meshcode)

    lon_multiplier_lv6 = _functools.partial(
        lambda meshcode: int(bin(int(meshcode[10:11])-1)[2:].zfill(2)[1:2]), meshcode=meshcode)

    mesh_lv1_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=lambda: 0,
        func_unit_cord=_unit_lat_lv1,
        func_multiplier=lat_multiplier_lv1)

    mesh_lv1_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=lambda: 100,
        func_unit_cord=_unit_lon_lv1,
        func_multiplier=lon_multiplier_lv1)

    mesh_40000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lat,
        func_unit_cord=_unit_lat_40000,
        func_multiplier=lat_multiplier_40000)

    mesh_40000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lon,
        func_unit_cord=_unit_lon_40000,
        func_multiplier=lon_multiplier_40000)

    mesh_20000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_40000_default_lat,
        func_unit_cord=_unit_lat_20000,
        func_multiplier=lat_multiplier_20000)

    mesh_20000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_40000_default_lon,
        func_unit_cord=_unit_lon_20000,
        func_multiplier=lon_multiplier_20000)

    mesh_16000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lat,
        func_unit_cord=_unit_lat_16000,
        func_multiplier=lat_multiplier_16000)

    mesh_16000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lon,
        func_unit_cord=_unit_lon_16000,
        func_multiplier=lon_multiplier_16000)

    mesh_lv2_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lat,
        func_unit_cord=_unit_lat_lv2,
        func_multiplier=lat_multiplier_lv2)

    mesh_lv2_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lon,
        func_unit_cord=_unit_lon_lv2,
        func_multiplier=lon_multiplier_lv2)

    mesh_8000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lat,
        func_unit_cord=_unit_lat_8000,
        func_multiplier=lat_multiplier_8000)

    mesh_8000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lon,
        func_unit_cord=_unit_lon_8000,
        func_multiplier=lon_multiplier_8000)

    mesh_5000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lat,
        func_unit_cord=_unit_lat_5000,
        func_multiplier=lat_multiplier_5000)

    mesh_5000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lon,
        func_unit_cord=_unit_lon_5000,
        func_multiplier=lon_multiplier_5000)

    mesh_4000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_8000_default_lat,
        func_unit_cord=_unit_lat_4000,
        func_multiplier=lat_multiplier_4000)

    mesh_4000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_8000_default_lon,
        func_unit_cord=_unit_lon_4000,
        func_multiplier=lon_multiplier_4000)

    mesh_2500_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_5000_default_lat,
        func_unit_cord=_unit_lat_2500,
        func_multiplier=lat_multiplier_2500)

    mesh_2500_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_5000_default_lon,
        func_unit_cord=_unit_lon_2500,
        func_multiplier=lon_multiplier_2500)

    mesh_2000_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lat,
        func_unit_cord=_unit_lat_2000,
        func_multiplier=lat_multiplier_2000)

    mesh_2000_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lon,
        func_unit_cord=_unit_lon_2000,
        func_multiplier=lon_multiplier_2000)

    mesh_lv3_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lat,
        func_unit_cord=_unit_lat_lv3,
        func_multiplier=lat_multiplier_lv3)

    mesh_lv3_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lon,
        func_unit_cord=_unit_lon_lv3,
        func_multiplier=lon_multiplier_lv3)

    mesh_lv4_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv3_default_lat,
        func_unit_cord=_unit_lat_lv4,
        func_multiplier=lat_multiplier_lv4)

    mesh_lv4_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv3_default_lon,
        func_unit_cord=_unit_lon_lv4,
        func_multiplier=lon_multiplier_lv4)

    mesh_lv5_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv4_default_lat,
        func_unit_cord=_unit_lat_lv5,
        func_multiplier=lat_multiplier_lv5)

    mesh_lv5_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv4_default_lon,
        func_unit_cord=_unit_lon_lv5,
        func_multiplier=lon_multiplier_lv5)

    mesh_lv6_default_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv5_default_lat,
        func_unit_cord=_unit_lat_lv6,
        func_multiplier=lat_multiplier_lv6)

    mesh_lv6_default_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv5_default_lon,
        func_unit_cord=_unit_lon_lv6,
        func_multiplier=lon_multiplier_lv6)

    mesh_lv1_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lat,
        func_unit_cord=_unit_lat_lv1,
        func_multiplier=lat_multiplier_lv)

    mesh_lv1_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv1_default_lon,
        func_unit_cord=_unit_lon_lv1,
        func_multiplier=lon_multiplier_lv)

    mesh_40000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_40000_default_lat,
        func_unit_cord=_unit_lat_40000,
        func_multiplier=lat_multiplier_lv)

    mesh_40000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_40000_default_lon,
        func_unit_cord=_unit_lon_40000,
        func_multiplier=lon_multiplier_lv)

    mesh_20000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_20000_default_lat,
        func_unit_cord=_unit_lat_20000,
        func_multiplier=lat_multiplier_lv)

    mesh_20000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_20000_default_lon,
        func_unit_cord=_unit_lon_20000,
        func_multiplier=lon_multiplier_lv)

    mesh_16000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_16000_default_lat,
        func_unit_cord=_unit_lat_16000,
        func_multiplier=lat_multiplier_lv)

    mesh_16000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_16000_default_lon,
        func_unit_cord=_unit_lon_16000,
        func_multiplier=lon_multiplier_lv)

    mesh_lv2_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lat,
        func_unit_cord=_unit_lat_lv2,
        func_multiplier=lat_multiplier_lv)

    mesh_lv2_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv2_default_lon,
        func_unit_cord=_unit_lon_lv2,
        func_multiplier=lon_multiplier_lv)

    mesh_8000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_8000_default_lat,
        func_unit_cord=_unit_lat_8000,
        func_multiplier=lat_multiplier_lv)

    mesh_8000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_8000_default_lon,
        func_unit_cord=_unit_lon_8000,
        func_multiplier=lon_multiplier_lv)

    mesh_5000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_5000_default_lat,
        func_unit_cord=_unit_lat_5000,
        func_multiplier=lat_multiplier_lv)

    mesh_5000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_5000_default_lon,
        func_unit_cord=_unit_lon_5000,
        func_multiplier=lon_multiplier_lv)

    mesh_4000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_4000_default_lat,
        func_unit_cord=_unit_lat_4000,
        func_multiplier=lat_multiplier_lv)

    mesh_4000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_4000_default_lon,
        func_unit_cord=_unit_lon_4000,
        func_multiplier=lon_multiplier_lv)

    mesh_2500_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_2500_default_lat,
        func_unit_cord=_unit_lat_2500,
        func_multiplier=lat_multiplier_lv)

    mesh_2500_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_2500_default_lon,
        func_unit_cord=_unit_lon_2500,
        func_multiplier=lon_multiplier_lv)

    mesh_2000_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_2000_default_lat,
        func_unit_cord=_unit_lat_2000,
        func_multiplier=lat_multiplier_lv)

    mesh_2000_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_2000_default_lon,
        func_unit_cord=_unit_lon_2000,
        func_multiplier=lon_multiplier_lv)

    mesh_lv3_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv3_default_lat,
        func_unit_cord=_unit_lat_lv3,
        func_multiplier=lat_multiplier_lv)

    mesh_lv3_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv3_default_lon,
        func_unit_cord=_unit_lon_lv3,
        func_multiplier=lon_multiplier_lv)

    mesh_lv4_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv4_default_lat,
        func_unit_cord=_unit_lat_lv4,
        func_multiplier=lat_multiplier_lv)

    mesh_lv4_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv4_default_lon,
        func_unit_cord=_unit_lon_lv4,
        func_multiplier=lon_multiplier_lv)

    mesh_lv5_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv5_default_lat,
        func_unit_cord=_unit_lat_lv5,
        func_multiplier=lat_multiplier_lv)

    mesh_lv5_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv5_default_lon,
        func_unit_cord=_unit_lon_lv5,
        func_multiplier=lon_multiplier_lv)

    mesh_lv6_lat = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv6_default_lat,
        func_unit_cord=_unit_lat_lv6,
        func_multiplier=lat_multiplier_lv)

    mesh_lv6_lon = _functools.partial(
        mesh_cord,
        func_higher_cord=mesh_lv6_default_lon,
        func_unit_cord=_unit_lon_lv6,
        func_multiplier=lon_multiplier_lv)

    level = to_meshlevel(meshcode)

    if level == 1:
        return mesh_lv1_lat(), mesh_lv1_lon()

    if level == 40000:
        return mesh_40000_lat(), mesh_40000_lon()

    if level == 20000:
        return mesh_20000_lat(), mesh_20000_lon()

    if level == 16000:
        return mesh_16000_lat(), mesh_16000_lon()

    if level == 2:
        return mesh_lv2_lat(), mesh_lv2_lon()

    if level == 8000:
        return mesh_8000_lat(), mesh_8000_lon()

    if level == 5000:
        return mesh_5000_lat(), mesh_5000_lon()

    if level == 4000:
        return mesh_4000_lat(), mesh_4000_lon()

    if level == 2500:
        return mesh_2500_lat(), mesh_2500_lon()

    if level == 2000:
        return mesh_2000_lat(), mesh_2000_lon()

    if level == 3:
        return mesh_lv3_lat(), mesh_lv3_lon()

    if level == 4:
        return mesh_lv4_lat(), mesh_lv4_lon()

    if level == 5:
        return mesh_lv5_lat(), mesh_lv5_lon()

    if level == 6:
        return mesh_lv6_lat(), mesh_lv6_lon()

    raise ValueError("the level is unsupported.")