В общем случае вы будете получать события кликов, зарегистрировав свой RasterTileEventListener. Но полученный аргумент (RasterTileClickInfo) в настоящее время не предоставляет точные координаты клика. В версиях SDK до 4.1.4 некоторые вычисления необходимо выполнять вручную. Следующий фрагмент должен помочь вам:
rasterLayer.setRasterTileEventListener(new RasterTileEventListener() {
@Override
public boolean onRasterTileClicked(RasterTileClickInfo clickInfo) {
MapTile mapTile = clickInfo.getMapTile();
Projection proj = rasterLayer.getDataSource().getProjection();
double projTileWidth = proj.getBounds().getDelta().getX() / (1 << mapTile.getZoom());
double projTileHeight = proj.getBounds().getDelta().getY() / (1 << mapTile.getZoom());
double projTileX0 = proj.getBounds().getMin().getX() + mapTile.getX() * projTileWidth;
double projTileY0 = proj.getBounds().getMin().getY() + ((1 << mapTile.getZoom()) - 1 - mapTile.getY()) * projTileHeight;
double normTileX = (clickInfo.getClickPos().getX() - projTileX0) / projTileWidth;
double normTileY = (clickInfo.getClickPos().getY() - projTileY0) / projTileHeight;
Log.d("", "Clicked at: " + (int) (normTileX * 256) + ", " + (int) (normTileY * 256));
return true;
}
});
Обратите внимание, что вам может понадобиться перевернуть координату y, поскольку она начинается снизу.
В качестве примечания, SDK 4.1.4 предоставляет класс TileUtils с некоторыми статическими методами, которые выполняют те же вычисления, что и выше.