我正在开发一个应用程序,它在缩放级别25上加载一些自定义图块,但谷歌地图缩放级别限制为21.如何获得缩放级别25的图块值(无论谷歌地图图块是否可用)缩放级别)?
答案 0 :(得分:0)
瓷砖的X和Y值只是您所在世界位置的索引。 在此页面中,您可以看到关于切片方案如何工作的非常好的解释: http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/ 在页面的末尾有一些代码可以帮助您计算tile的边界或索引(It's python)。 GoogleMaps图块仅限于lev 21,但如果禁用Google地图图块(将地图类型设置为GoogleMap.TYPE_NONE),您应该可以进一步缩放。 下面的代码显示了如何使用x,y和z来获取切片坐标(使用wms服务),如果你知道边界和缩放以获得x和y,它应该很容易:
protected double[] getBoundingBox(int x, int y, int zoom) {
double tileSize = MAP_SIZE / Math.pow(2, zoom);
double minx = TILE_ORIGIN[ORIG_X] + x * tileSize;
double maxx = TILE_ORIGIN[ORIG_X] + (x + 1) * tileSize;
double miny = TILE_ORIGIN[ORIG_Y] - (y + 1) * tileSize;
double maxy = TILE_ORIGIN[ORIG_Y] - y * tileSize;
double[] bbox = new double[4];
bbox[MINX] = minx;
bbox[MINY] = miny;
bbox[MAXX] = maxx;
bbox[MAXY] = maxy;
return bbox;
}
此外,如果你有一个特定的点(如你的视图的中心),以米坐标,你可以得到相应的瓦片给出缩放:
private TileDataInfo getTileByCoordinate(double xmeters, double ymeters, int zoomLevel) {
final double tileDim = MAP_SIZE / Math.pow(2d, zoomLevel);
final int tileX = (int) ((pointX - TILES_ORIGIN[0]) / tileDim);
final int tileY = (int) ((TILES_ORIGIN[1] - pointY) / tileDim);
return new TileDataInfo(tileX, tileY, zoomLevel);
}
其中:
private static final double[] TILES_ORIGIN = {-20037508.34789244, 20037508.34789244};
// Size of square world map in meters, using WebMerc projection.
private static final double MAP_SIZE = 20037508.34789244 * 2;
private static final double ORIGIN_SHIFT = Math.PI * 6378137d;
从LatLng数据获取坐标的米:
/**
* Transform the lat in meters
*
* @param latitude the latitude of map
* @return meters of y coordinate
*/
private double inMetersYCoordinate(double latitude) {
if (latitude < 0) {
return -inMetersYCoordinate(-latitude);
}
return (Math.log(Math.tan((90d + latitude) * Math.PI / 360d)) / (Math.PI / 180d)) * ORIGIN_SHIFT / 180d;
}
/**
* Transform the lng in meters
*
* @param longitude the longitude of map
* @return meters of x coordinate
*/
private double inMetersXCoordinate(double longitude) {
return longitude * ORIGIN_SHIFT / 180.0;
}
希望有所帮助!