Получите x и y пиксель коснувшегося MapTile в мобильном SDK Carto - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть RasterTileLayer для отображения слоя wms, и мне нужно получить функции области касания из geoServer; но geoServer нужны координаты x и y коснувшегося mapTile в диапазоне от 0 до 256 (из-за размера плитки, установленного в 256); но я не знаю, как его получить или рассчитать, у вас есть какое-нибудь решение?

1 Ответ

0 голосов
/ 10 сентября 2018

В общем случае вы будете получать события кликов, зарегистрировав свой 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 с некоторыми статическими методами, которые выполняют те же вычисления, что и выше.

...