萱萱小朋友的网页游戏

控制爱莎公主的走位,躲避来自火王子的攻击,w向上、s向下、a向左、d向右,加速按住shift键。看看谁的积分更高!

1.0版本上线!可以在手机和平板上玩哦。

美术制作:萱萱

人物设计:萱萱

故事情节:萱萱

程序设计:萱萱爸爸

三维日照分析

ArcGis提供了非常便捷的模型构建器,可以将简单的工具步骤组合起来,加入简单的代码后,就能组合形成能完成比较复杂任务的工具。

按照教程,一个初学者可能就能很快的利用cad道路网和地块信息来制作一张用地规划图。但大部分教程中不包含完善的道路网本身的批量化生成和制作。而我就更喜欢研究这类不在任何教程中出现的内容,这才能体现研究的价值。

这次展示的是我设计的利用ArcGis模型构建器设计的“三维日照分析”工具。在分析方面没有问题,但运行时间上还有很大空间。

上面提到的道路中线批量自动转路网(路口倒角)的工具,以后我将分享。

爬虫GIS地图服务数据

ArcGis地图服务是比较常用的一种在线地理信息共享发布的方式,一般通过网络浏览器进行访问,可以看到地图、查询等服务,但这些服务内容显然难以满足专业的规划设计工作者。

我编写的地图服务爬取代码,利用python的requests库对用户指定的ArcGis地图服务网站进行访问,可以将原始的EsriJson数据分门别类、统一下载。比较利用Qgis,更适合大批量成系统的数据获取工作。

请注意,爬取数据前应获得相应权限。

import json,requests,os,shutil
import pandas as pd


#???为需要爬取的网站
head={'Connection': 'keep-alive', 'Origin': 'http://???', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36', 'Accept': '*/*', 'Referer': 'http://???', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9'}


alllisturl = '???/js/menu.js'

#地图网站访问url格式
querynumurl = 'http://???/arcgis/rest/services/?/?/MapServer/1/query?f=json&where=1=1&returnIdsOnly=true'

querydetailurl =' http://???/arcgis/rest/services/?/?/MapServer/1/query?f=json&objectIds=624,625,626,627,628,629,630,631&inSR&outSR&returnGeometry=true&outFields=*&returnM=true&returnZ=true'


def getname(a):
    temp=[]
    if type(a)==list:
        for b in a:
            temp += [getname(b)]
    if type(a)==dict:
        if 'nodes' in a.keys():
            temp =  [a['TEXT'],getname(a['nodes'])]
        else:
            temp = [a['TEXT'],a['UPDATE'],a['CODE']]
    return(temp)

def getname_onlydata(a):
    temp=[]
    if type(a)==list:
        for b in a:
            temp += getname_onlydata(b)
    if type(a)==dict:
        if 'nodes' in a.keys():
            temp =  getname_onlydata(a['nodes'])
        else:
            temp = [[a['TEXT'],a['UPDATE'],a['CODE']]]
    return(temp)

def clearfullname(lists):
    out=[]
    for i in lists:
        if type(i[-1])==list:
            for j in i[-1]:
                if type(j)==list:
                    j1=i[:-1]+j
                out.append(j1)
        else:
            out.append(i)
    return(out)

def getlayers (url):    
    downlayers=[]
    i=0
    k=10
    while k:
        print('getting layers',i)
        try:
            link=url+'/{}'.format(str(i))
            link1 = link+'?f=json'
            a=requests.get(link1,headers=head).text
            b=json.loads(a)
            c=list(b.keys())
            if len(c)>0:
                i+=1
                if 'subLayers' in c :                
                    if b['subLayers'] == []:
                        downlayers.append([b['name'],link])
                        print(link1)
                else:
                    k-=1
            else :
                k-=1
        except:
            k-=1
            continue
    return(downlayers)
    
def getdataids (link):
    link1 = link+'/query?f=json&where=1%3D1&returnIdsOnly=true'
    t = 3
    datalist=[]
    while t:
        print('geting ids')
        try:
            a=requests.get(link1,headers=head).text            
            b=json.loads(a)
            if 'objectIds' in list(b.keys()):
                datalist = b['objectIds']
                print(link1)
                t=0
            else:
                t-=1
        except:
            t-=1
            continue
    return (datalist)

def getdatalen (link):
    link1 = link+'/query?f=json&where=1%3D1&returnCountOnly=true'
    t = 3
    datalist=[]
    while t:
        print('geting datalen')
        try:
            a=requests.get(link1,headers=head).text            
            b=json.loads(a)
            if 'count' in list(b.keys()):
                datalist = b['count']
                print(link1)
                t=0
            else:
                t-=1
        except:
            t-=1
            continue
    return (datalist)


def downesrijson(url,datalist):
    b=[]
    for i in range(0,len(datalist),200):
        print('getting datajson...'+'\n'+url+'\n'+str(i+200))
        section = str(datalist[i:i+200]).replace('[','').replace(']','')
        downurl = url+'/query?f=json&objectIds={}&returnGeometry=true&outFields=*'.format(section)
        t=3
        while t:
            try:
                a=requests.get(downurl,headers=head).text
                if i == 0:
                    b=json.loads(a)
                    if 'features' in list(b.keys()):
                        t=0
                    else:
                        t-=1
                elif i>0:
                    b1=json.loads(a)
                    if 'features' in list(b1.keys()):
                        b['features']+=b1['features']
                        t=0
                    else:
                        t-=1
            except:
                t-=1
                continue            
    return (b)


if 'datalist.json' not in os.listdir():
    a = requests.get(alllisturl,headers=head).text
    b=a[a.index('['):-1]
    b=b[:b.index('var')]
    b=b.replace('\t','')
    b=[i  for i in b.splitlines() if '//'not in i[:6]]
    b= ''.join(b)
    b=b.replace(',]',']')

    alllist =json.loads(b[:-1])

    datalist1 = getname(alllist)
    datalist = clearfullname(clearfullname(clearfullname(clearfullname(datalist1))))
    with open ('datalist.json','w',encoding='utf-8') as f:
        json.dump(datalist,f,ensure_ascii=False)
        f.close()

elif  'datalist.json' in os.listdir():
    with open ('datalist.json','r',encoding='utf-8') as f:
        datalist = json.load(f)
        f.close()

#namelevel1 =[i[0] for i in datalist]
#namelevel2 = [j[0] for i in datalist for j in i[1] if type(j)==list]
#namelevel3 = [k[0] for i in datalist for j in i[1] for k in j[1] if type(k)==list]
#namelevel4 = [l[0] for i in datalist for j in i[1] for k in j[1] if type(k)==list for l in k[1] if type(l)==list]


if '下载列表.json' not in os.listdir():
    alllayerslist=[]

    for i in datalist:
        tempdict ={}
        tempdict['数据名'] = i[0:-2]
        tempdict['更新时间'] = i[-2]
        tempdict['数据连接'] = i[-1]
        layer = getlayers (i[-1])
        layers =[]
        for j in layer:
            tempd = {}
            tempd['层名'] = j[0]
            tempd['连接'] = j[1]
            tempd['数据量'] = getdatalen (j[1])
            layers.append(tempd)    
        tempdict['下载层'] = layers
        alllayerslist.append(tempdict)


    #修改重复的层名
    for i in alllayerslist:
        names = [j['层名'] for j in i['下载层']]
        for k,l in enumerate(names):
            if names.count(l)>1:
                i['下载层'][k]['层名']+=i['下载层'][k]['连接'].split('/')[-1]


    with open ('下载列表.json','w',encoding='utf-8') as f:
        json.dump(alllayerslist,f,ensure_ascii=False)
        f.close()

elif '下载列表.json' in os.listdir():
    with open ('下载列表.json','r',encoding='utf-8') as f:
        alllayerslist = json.load(f)
        f.close()
    
    

for i in alllayerslist:
    path = './'+'/'.join(i['数据名'][:-1]).replace(':','_')+'/'
    filedir = i['数据名'][-1].replace(':','_')+'/'
    if not os.path.isdir(path+filedir):
        os.makedirs(path+filedir)
    for j in i['下载层']:
        name = j['层名'].replace(':','_')+'.json'
        if os.path.isfile(filedir+name):
            shutil.move( filedir+name, path+filedir+name)
            shutil.rmtree( filedir)
        elif os.path.isfile(filedir.replace('/','')+name):
            shutil.move(filedir.replace('/','')+name, path+filedir+name)
        elif not os.path.isfile(path+filedir+name):
            if type(j['数据量'])==int and 0<j['数据量'] :            
                downurl =j['连接']
                downlist = getdataids(downurl)
                datajson = downesrijson(downurl,downlist)
                with open (path+filedir+name,'w',encoding='utf-8') as f:
                    json.dump(datajson,f,ensure_ascii=False)
                    f.close()

极海json转shp

Json是网页数据的一类重要格式,对于使用GIS的规划工作者,最常见的两类是EsriJson和GeoJson。然而,这两类Json格式的数据冗余较大,国内的极海提出了新的数据格式,虽然网络传输便捷但不能直接使用arcgis或Qgis进行转换使用。

对付非通用格式的json数据,要花一点功夫,以下是我用python编写的极海Json转换代码,希望能够帮到您。

import os,json,time,requests
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from shapely import geometry

choose = input('转换文件夹内json选1,单个直接输入需要转shp的json名称,不带后缀名:')

def transjsontoshp(name):
    try:
        with open (name+'.json','r',encoding='utf8')as f:
            jasondata = json.load(f)
            f.close()
    except Exception as Argument:
        print (Argument,'\n ......try:gbk')
        with open (name+'.json','r',encoding='gbk')as f:
            jasondata = json.load(f)
            f.close()
    listdata =[]       
    for i in jasondata['data']['features']:        
        if 'geom' in i.keys() and type( i['geom'])==dict:
            listdata .append( {**{'id':i['id']},**i['attrs'],**i['geom']})
        elif 'geom' in i.keys() and type( i['geom'])==list:
            listdata .append({**{'id':i['id']},**i['attrs'],**{'m':[i['geom']]}})

    pddata = pd.DataFrame(listdata)

    if 'Point' in jasondata['data']['geometryType']:
        pddata['geometry']= [geometry.MultiPoint([geometry.Point(i) for i in j]) for j in pddata['m']]

    elif 'Polyline' in jasondata['data']['geometryType']:
        pddata['geometry']= [geometry.MultiLineString([geometry.LineString(i) for i in j]) for j in pddata['m']]

    elif 'Polygon' in jasondata['data']['geometryType']:
        pddata['geometry']= [geometry.MultiPolygon([geometry.Polygon(i) for j in k for i in j]) for k in pddata['m']]

    pddata.drop(['m'],axis=1,inplace= True)
    gpddata = gpd.GeoDataFrame(pddata)
    try:
        gpddata.to_file(name+'.shp',driver='ESRI Shapefile',encoding='gbk')
    except:
        gpddata.to_file(name+'geo.json',driver='GeoJSON',encoding='utf-8')
        

if choose == '1':
    files = [i.split('.json')[0] for i in os.listdir() if '.json'in i]
    for f in files:
        transjsontoshp(f)

else:

    name = choose
    transjsontoshp(name)

舌尖上的减肥2——补剂

舌尖上的减肥2——补剂
闷蛋 Geektips 2018-03-22 09:30

大家好,我是闷蛋。欢迎大家关注超业余的我来钻健身牛角尖。


今天仍然继续为您带来减肥方面的tips,主题是补剂。


今天的tips可是我花了不少学费才换来的,文中出现的所有补剂图片都是我用过的,看了一遍购物记录后我自己都害怕了……


一、对补剂的态度


补剂对于健身和减肥应该是锦上添花的作用,属于有了更好、没有也行,对最终目标的实现不起决定性作用。那有人问什么起决定性作用?相信仔细看前面几期文章的同学们都会领悟,那就是决心和意志力。


话说这个东西真要有了,干什么不成呢?


二、我对补剂的分类

大类分为用过的 和 没用过的,用过的里面可以分为以下几类:



提高运动能力的

肌酸

图片



提高燃脂效率的

左旋肉碱

图片

CLA共轭亚油酸(有单独配方的,但我买的是复合配方的,图在下面)



增加基础代谢的

咖啡因、育亨宾、番椒提取物、柑橘提取物(每个厂商配方不同,基本都是混合出现)

图片



帮助运动恢复的(这个方面我买的最多,还可以细分3类)


补充蛋白质和氨基酸的

蛋白粉

图片

图片

图片

BCAA(L-亮氨酸、L-异亮氨酸、L-缬氨酸)

图片


提高激素分泌

D-天冬氨酸 

图片

ZMA (天冬氨酸镁、天冬氨酸锌、维生素B6)

图片

图片

DHEA(前激素类,不推荐)

图片

刺蒺藜、精氨酸(不推荐)

图片


保护关节和抗氧化的

复合氨糖(氨糖、硫酸软骨素、MSM),对长期运动,尤其是跑步者的关节进行修护;

图片

葡萄籽提取物、番茄红素等植物抗氧化剂,防止自由基侵害;

图片

复合维生素

图片

钙镁锌,运动者需要额外补充一些重要的营养元素,防止抽筋和一些其他不良状况;

图片


其他没用过的我不敢瞎说,不过觉得下面两种东西最好别碰。

减肥茶、几丁质多糖等阻止营养或脂肪吸收的,不知道会不会误伤友军、造成营养不良的别碰;

被专业组织禁用的也别碰,比如麻黄碱类、瘦肉精类,虽然处方药还能开而且在被禁前用的很广泛,但毕竟医学在进步,发现什么副作用也有可能。


三、推荐的补剂

本着确实有用、性价比高的原则,我良心推荐下面几种情况,比较适合运动减肥的朋友们。

基础款:蛋白粉、钙镁锌;

进阶款:肌酸、蛋白粉、ZMA、复合维生素、左旋肉碱;

高级款:肌酸、蛋白粉、ZMA、复合维生素、左旋肉碱、D-天冬氨酸 、提高基础代谢或产热类的补剂、氨糖。


四、选购心得

选择了适合自己的补剂后,最重要的是渠道。

不是不爱国,一些原本平价的补剂国内卖超贵,并且不能保证货源质量。比如ZMA,虽说主要是锌镁和维生素B6,但有的淘宝不用天冬氨酸镁和天冬氨酸锌,改用便宜的氧化镁和氧化锌。不知道是不专业还是偷工减料,总之太不靠谱了。

所以我只用两个渠道,一是iherb买的最多,因为可以免运费,报关手续简单;二是bodybuilding,最专业最全面,打折力度最大,但运费超贵。


今天的tips就到这里。各位想减肥的小伙伴继续加油吧!

微信扫一扫
关注该公众号

舌尖上的减肥1——常规饮食

舌尖上的减肥1——常规饮食
闷蛋 Geektips 2018-03-21 07:30

大家好,我是闷蛋。欢迎大家关注超业余的我来钻健身牛角尖。


今天仍然继续为您带来减肥方面的tips,主题是饮食管理。


网上充斥着大量关于减肥该吃什么的文章,看来看去觉得不靠谱的太多。当然,还是老样子,出门右拐有比较靠谱和全面的文章推荐给大家。读了许多文章,闷蛋化繁为简总结了一些小小的tips,减肥主要是靠多消耗、少摄入,简单地说减肥要关心的是不吃什么和该怎么吃。


一、少吃多餐


施瓦辛格在他的书里写关于“吃的频率”,认为少吃多餐能够促进增肌减脂。理由很简单,假如每天把热量控制在合理范围,多餐可以使你很少在极其饥饿的情况下进食,身体就没有理由把摄入的食物储存成脂肪。


图片州长好有道理


当然,这个方法对缺乏自控力,一开吃就停不下来的减肥者绝对无效。


二、选择轻食


“轻食”就是低盐、低糖、低脂肪和纤维丰富的食物,同样的卡路里总量,轻食更能填饱肚皮,即拒绝了饥肠辘辘,又保证总体热量在控制范围内。


图片


某个只吃土豆的减肥者,成效确实很显著。


从另一个方面讲,选择轻食就必须要戒掉零食和高糖饮料。一块巧克力可以抵得上三碗米饭,一瓶可乐里面有十分之一是糖分,油炸食品、奶油蛋糕就更不用提了。常吃零食绝对可以毁掉一个人的身材。


三、注重平衡,碳水化合物和脂肪摄入不要过于苛刻


还是来自州长的书——

碳水化合物缺乏会导致酮症,身体中的脂肪代谢需要碳水化合物参与,而不进食碳水会导致脂肪不完全燃烧形成酮体,酮体的效率比糖原要低,就会造成行动迟缓、思维不佳、肌肉分解和脱水。

健康饮食中,脂肪是绝对不可或缺的,饮食中可以控制脂肪但不能没有脂肪。而且,有些脂肪是“好脂肪”,比如鱼、坚果等含不饱和脂肪酸的食物,可以补充大脑、调节激素分泌,甚至帮助你燃烧脂肪。而越饱和的脂肪越稳定越难以分解代谢,成为身体里的钉子户,甚至堵塞动脉。


图片

基于上面这些分析,可以尝试做一个饮食计划,每天三个正餐可以只吃原来份量的一半,吃的内容不变(考虑到工作餐不好变),另外增加两餐,用水果、蛋白粉、糙米土豆等复杂碳水化合物,以及少量坚果(毕竟脂肪热量高)来填补一些,份量控制为正餐的一半。这样一天下来可以做到比原来减少约1/3的热量摄入。


今天的tips就到这里。各位小伙伴也可以尝试制定自己的饮食计划吧。

微信扫一扫
关注该公众号