用于构建osm工具的库
pyosmkit的Python项目详细描述
pyosmkit:构建osm工具库
此包包含用于围绕OSM磁贴生成工具的帮助程序。
since 0.11包名已从pyosm更改为pyosmkit以避免pypi冲突。
安装
# from pypi pip install --user pyosmkit # or from github where ${TAG} is the git version tag, eg v0.6 pip install --user git+https://github.com/tierpod/pyosmkit.git@${TAG}#egg=pyosmkit
开发
git clone https://github.com/tierpod/pyosmkit.git &&cd pyosmkit make venv source ./venv/bin/activate make init-dev
pyosmkit.point
创建点,转换坐标。
- z x y_到拉特龙(z,x,y)->;拉特龙
- latlong_到zxy(纬度、液化天然气、变焦)->;zxy
>>>importpyosmkit.point>>>p=pyosmkit.point.ZXY(z=10,x=697,y=321)>>>pyosmkit.point.zxy_to_latlong(p.z,p.x,p.y)LatLong(lat=55.5783,long=65.0391)
pyosmkit.tile
创建osm平铺,获取文件名。
- tile.from_url(url)->;tile
- tile.from_metatile(mt)->;tile
- tile.filepath(url)->;str
>>>frompyosmkit.tileimportTile>>>t=Tile.from_url("/style/1/1/1.png")>>>print(t)Tile(z:1,x:1,y:1,style:style,ext:.png)>>>t.filepath("/cache")'/cache/style/1/1/1.png'
pyosmkit.polygon
瓷砖列表可以分组到closed多边形。你可以检查这里面的拉特朗点 是否多边形(使用ray-casting算法):
>>>frompyosmkit.pointimportLatLong>>>frompyosmkit.polygonimportPolygon>>>polygon=Polygon([LatLong(0,0),LatLong(10,0),LatLong(10,10),...LatLong(0,10),LatLong(0,0)])>>>LatLong(1,2)inpolygonTrue>>>LatLong(11,12)inpolygonFalse
此外,多边形列表可以分组到region(在语句中支持)。
pyosmkit.metatile
超瓷砖
创建元平铺坐标,获取文件名:
- metatile.from_url(url)->;metatile
- metatile.from_tile(tile)->;metatile
- metatile.filepath(basedir)->;str
>>>frompyosmkit.tileimportTile>>>frompyosmkit.metatileimportMetatile>>>tile=Tile(z=10,x=697,y=321,style="mapname",ext=".png")>>>mt=Metatile.from_tile(tile)>>>print(mt)Metatile(z:10,x:696-703,y:320-327,style:mapname)>>>mt.filepath("/cache")'/cache/mapname/10/0/0/33/180/128.meta'
变质岩
尝试用pythonic方式实现元文件编解码器(灵感来自raymond hettinger 视频)。
- pyosmkit.metatile.open(文件名,模式)->;metatile file:打开文件进行读取(“rb”模式)或 写作(“WB”)。返回类文件对象。
用语句支持,在语句中支持,在点上支持迭代:
>>>importpyosmkit.metatile>>>mt=pyosmkit.metatile.open("tests/data/0.meta","rb")>>># check if tile (1, 2) contains in metatile>>>(1,2)inmtTrue>>>(10,10)inmtFalse>>># iterate over Points and print only points with x == 7>>>forpointinmt:...ifpoint.x==7:...print(point)Point(x=7,y=0)Point(x=7,y=1)Point(x=7,y=2)Point(x=7,y=3)Point(x=7,y=4)Point(x=7,y=5)Point(x=7,y=6)Point(x=7,y=7)>>># read all tiles data, iterate over Points and print only none-empty data:>>>tiles_data=mt.readtiles()>>>forpoint,dataintiles_data.items():...ifdata:...# do something with point(z, x, y) or data (bytes)...pass>>>mt.close()
- metatilefile.readtile(x,y)->;字节
- metatilefile.readtiles()->;dict{点(x,y):字节,…}
- metatilefile.write(x,y,z,data),其中z是metatile缩放级别,x,y是最低的 值,数据是dict{point(x,y):bytes,…}
元平铺格式说明
可在mod_tile项目中找到:
pyosmkit.mbtile
解码mbtiles文件,从mbtiles文件读取tile。在语句中使用,支持。
>>>importpyosmkit.mbtile>>>frompyosmkit.pointimportZXY>>>point=ZXY(z=1,x=1,y=0)>>>withpyosmkit.mbtile.open("tests/data/0.mbtiles")asmb:...print(pointinmb)...print(len(mb.readtile(point.z,point.x,point.y)))True26298
pyosmkit.mbtile.open(文件、模式、翻页)->;mbtile file:打开文件进行读取。退换商品 像文件一样的对象。
mbtilefile.readtile(z,x,y)->;缓冲区