用于构建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)->;缓冲区

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在一个问题被连续正确回答三次/并添加差异后,我如何将程序循环回开始   Java中未实例化的匿名类   java如何在Android中录制视频,只允许横向模式和最长时间录制时间   java从另一个活动发送实时消息   多线程java线程和互斥   java禁用Spring安全日志   JAVA伊奥。StreamCorruptedException:在与子级和父级ProcessBuilder通信时写入子级中的标准输出时,流头无效   使用Java(HttpURLConnection)对Restheart进行身份验证(对于Mongodb)   java如何解决Jenkins中的SAXParseException?   java为什么我需要mockito来测试Spring应用程序?   计算sin-cos和tan时缺乏精度(java)   java Hibernate。不同项目中相同一对一映射的不同行为   java图像滑块:如何使用JavaFX将图像放在另一个图像上   java Mockito在使用when时抛出NotAMockException   http Java servlet发送回响应