java getpixel_Java Tile.getPixelY方法代码示例

import org.mapsforge.core.model.Tile; //导入方法依赖的package包/类

/**

* Calculates the priority for the given tile based on the current position and zoom level of the supplied MapView.

* The smaller the distance from the tile center to the MapView center, the higher its priority. If the zoom level

* of a tile differs from the zoom level of the MapView, its priority decreases.

*

* @param tile

* the tile whose priority should be calculated.

* @param mapView

* the MapView whose current position and zoom level define the priority of the tile.

* @return the current priority of the tile. A smaller number means a higher priority.

*/

static double getPriority(Tile tile, MapView mapView) {

byte tileZoomLevel = tile.zoomLevel;

// calculate the center coordinates of the tile

long tileCenterPixelX = tile.getPixelX() + (Tile.TILE_SIZE >> 1);

long tileCenterPixelY = tile.getPixelY() + (Tile.TILE_SIZE >> 1);

double tileCenterLongitude = MercatorProjection.pixelXToLongitude(tileCenterPixelX, tileZoomLevel);

double tileCenterLatitude = MercatorProjection.pixelYToLatitude(tileCenterPixelY, tileZoomLevel);

// calculate the Euclidian distance from the MapView center to the tile center

MapPosition mapPosition = mapView.getMapViewPosition().getMapPosition();

GeoPoint geoPoint = mapPosition.geoPoint;

double longitudeDiff = geoPoint.longitude - tileCenterLongitude;

double latitudeDiff = geoPoint.latitude - tileCenterLatitude;

double euclidianDistance = Math.sqrt(longitudeDiff * longitudeDiff + latitudeDiff * latitudeDiff);

if (mapPosition.zoomLevel == tileZoomLevel) {

return euclidianDistance;

}

int zoomLevelDiff = Math.abs(mapPosition.zoomLevel - tileZoomLevel);

double scaleFactor = Math.pow(2, zoomLevelDiff);

double scaledEuclidianDistance;

if (mapPosition.zoomLevel < tileZoomLevel) {

scaledEuclidianDistance = euclidianDistance * scaleFactor;

} else {

scaledEuclidianDistance = euclidianDistance / scaleFactor;

}

double zoomLevelPenalty = zoomLevelDiff * ZOOM_LEVEL_PENALTY;

return scaledEuclidianDistance * zoomLevelPenalty;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值