xps座標計算

2022-08-28 23:39:34 字數 3027 閱讀 7976

[xscale,sin θ,-sin θ,yscale,offsetx,offsety]
def extractglyphs(glyphs,dstpagedic):

global order

canvasrendertransformmatrix = [1,0,0,1,0,0]

glyphsparent = glyphs.getparent()

if 'canvas' in glyphsparent.tag:

attribdic = glyphsparent.attrib

if attribdic.has_key('rendertransform'):

canvasrendertransformmatrix = [float(item) for item in attribdic['rendertransform'].split(',')]

glyphrendertransformmatrix = [float(item) for item in attribdic['rendertransform'].split(',')] if attribdic.has_key('rendertransform') else [1,0,0,1,0,0]
計算寬度佔比用

indices含義如下:

乙個glyphs節點如下:

其中,originx,originy為首字元左下角的原始座標系的x,y,需要轉化到變換後的座標系,計算思路如下:

x = canvasrendertransformmatrix[0]*(glyphrendertransformmatrix[0]*originx+glyphrendertransformmatrix[4])+canvasrendertransformmatrix[4]

y = canvasrendertransformmatrix[3]*(glyphrendertransformmatrix[3]*originy+glyphrendertransformmatrix[5])+canvasrendertransformmatrix[5]

w = w * glyphrendertransformmatrix[0] * (50 if ord(unicodestring[i].decode()) >=32 and ord(unicodestring[i].decode())<=126 else 100)/100

h = h * glyphrendertransformmatrix[3]

其中前邊字元寬度和演算法為:

widthsum = widthsum + float(( indiceslist[j].split(',')[1] if len(indiceslist[j].split(','))>1 else (50 if ord(unicodestring[j].decode()) >=32 and ord(unicodestring[j].decode())<=126 else 100) ))
其中,每個字元寬演算法為:

float(( indiceslist[j].split(',')[1] if len(indiceslist[j].split(','))>1 else (50 if ord(unicodestring[j].decode()) >=32 and ord(unicodestring[j].decode())<=126 else 100) ))
即:

然後需要通過寬度百分比和fontrenderingemsize算出前邊字元寬之和,以得到當前的x,y,w,h,其中,w,h的演算法要看indices的長度而定

如:

widthsum = widthsum/100 * fontrenderingemsize
if len(indices) == 1:

x = canvasrendertransformmatrix[0]*(glyphrendertransformmatrix[0]*(originx+widthsum)+glyphrendertransformmatrix[4])+canvasrendertransformmatrix[4]

y = canvasrendertransformmatrix[3]*(glyphrendertransformmatrix[3]*originy+glyphrendertransformmatrix[5])+canvasrendertransformmatrix[5]

。。。elif len(indices) == 4:

x = canvasrendertransformmatrix[0]*(glyphrendertransformmatrix[0]*(originx+fontrenderingemsize*float(indices[2])/100)+glyphrendertransformmatrix[4])+canvasrendertransformmatrix[4]

y = canvasrendertransformmatrix[3]*(glyphrendertransformmatrix[3]*(originy-fontrenderingemsize*float(indices[3])/100)+glyphrendertransformmatrix[5])+canvasrendertransformmatrix[5] #加上voffset

w = w * glyphrendertransformmatrix[0] * float(indices[1])/100

h = h * glyphrendertransformmatrix[3]

aw = float(indices[1])

有了這些,我們就可一提取到每個字元的座標資訊了, 今兒為後續進展作準備。

gdal geotiff 座標計算

tif中座標計算的方法如下,其中col表示該座標點處影象的列號,row表示該座標點處影象的行號,比如影象左上角col為0,row為0,影象右下角col為影象寬度,row為影象高度。xgeo gt 0 col gt 1 row gt 2 ygeo gt 3 col gt 4 row gt 5 col表...

mysql座標計算 MySQL計算兩座標距離並排序

環境 mysql5.6 表結構及資料 drop table if exists locationpoint create table locationpoint id int 11 not null auto increment,province varchar 20 not null,city v...

PHP計算座標距離

php 計算兩點地理座標之間的距離 param decimal longitude1 起點經度 param decimal latitude1 起點緯度 param decimal longitude2 終點經度 param decimal latitude2 終點緯度 param int unit...