В общем получилось вот что:
property var mapObjects: [
{ "row": 4, "col": 2, "wsize": 1, "hsize": 1, "wpos": 0, "hpos": 0,
"source": "qrc:/tiles/002-000-00.png", "width": 500, "height": 373 },
{ "row": 4, "col": 2, "wsize": 2, "hsize": 2, "wpos": 1, "hpos": 1,
"source": "qrc:/tiles/001-001-00.png", "width": 2079, "height": 3249 }, // tree
{ "row": 4, "col": 3, "wsize": 2, "hsize": 2, "wpos": 1, "hpos": 1,
"source": "qrc:/tiles/001-002-00.png", "width": 1100, "height": 823 }, // tree
{ "row": 4, "col": 2, "wsize": 1, "hsize": 1, "wpos": 1, "hpos": 1,
"source": "qrc:/tiles/002-000-00.png", "width": 500, "height": 373 },
{ "row": 4, "col": 3, "wsize": 1, "hsize": 1, "wpos": 1, "hpos": 0,
"source": "qrc:/tiles/002-000-00.png", "width": 500, "height": 373 },
{ "row": 4, "col": 3, "wsize": 1, "hsize": 1, "wpos": 1, "hpos": 1,
"source": "qrc:/tiles/002-000-00.png", "width": 500, "height": 373 },
]
function createMapObjects() {
mapObjects.map(function(tileInfo) {
// нормализация размера создаваемого тайла
var tile_w = tileWidth * tileInfo.wsize / cellDivider
var tile_h = tileWidth/tileInfo.width * tileInfo.height * tileInfo.hsize / cellDivider
// левая верхняя координата описывающего клетку прямоугольника
var tile_sx = (map.width/2 + tileInfo.col*tileWidth/2 - tileInfo.row*tileWidth/2 - tileWidth/2)
var tile_sy = (tileInfo.row*tileHeight/2 + tileInfo.col*tileHeight/2) - tile_h
// координата создаваемого тайла
var tile_x = tile_sx + tileWidth/cellDivider * tileInfo.wsize/cellDivider
+ (tileWidth/cellDivider * tileInfo.wsize/cellDivider * tileInfo.wpos) * (cellDivider - tileInfo.wsize)
- (tileHeight/cellDivider * tileInfo.hsize * tileInfo.hpos)
var tile_y = tile_sy + tileHeight/cellDivider * tileInfo.hsize/cellDivider
+ (tileHeight/cellDivider * tileInfo.hsize/cellDivider * tileInfo.hpos) * (cellDivider - tileInfo.hsize)
+ (tileHeight/cellDivider * tileInfo.wsize/cellDivider * tileInfo.wpos) * (cellDivider - tileInfo.wsize)
})
}
Формулы дикие и, как выяснилось, подходят только для cellDivider = 2 ;-(
уверен, можно сделать проще и правильнее :D