android 具有自定义 wms 切片提供程序的地图视图
android mapview with custom wms tile provider
我想加载我的 wms 服务器以从那里显示图块。我使用 carto/nutiteq 一切正常,但我希望它是开源的或免费许可的。然后我尝试了 osmdroid 库,但我无法实现我的 wms 谁能帮助我?
// Web Mercator n/w corner of the map.
private static final double[] TILE_ORIGIN = {-20037508.34789244, 20037508.34789244};
//array indexes for that data
private static final int ORIG_X = 0;
private static final int ORIG_Y = 1; //
private static String mLayername = "";
// Size of square world map in meters, using WebMerc projection.
private static final double MAP_SIZE = 20037508.34789244 * 2;
// array indexes for array to hold bounding boxes.
protected static final int MINX = 0;
protected static final int MAXX = 1;
protected static final int MINY = 2;
protected static final int MAXY = 3;
private String layer = "";
/**
* Constructor
*
* @param aName a human-friendly name for this tile source
* @param aBaseUrl the base url(s) of the tile server used when constructing the url to download the tiles http://sedac.ciesin.columbia.edu/geoserver/wms
*/
public WMSTileProvider(String aName, String[] aBaseUrl, String layername) {
super(aName, 8, 22, 255, "image/png", aBaseUrl);
mLayername = layername;
}
final String WMS_FORMAT_STRING =
"http://dev.shiveh.com/shiveh?service=WMS&request=GetMap&layers=Shiveh%3AShivehGSLD256&styles=&format=image%2Fpng&transparent=false&version=1.1.1&height=256&width=256&srs=EPSG%3A4326&bbox=";
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;
}
您的 url EPSG:4326 中的坐标参考系是 lat/lon wgs84。然而,您所看到的方程式看起来像是从易滑的地图坐标转换为 EPSG:900913 的方程式。
您的服务器支持该 CRS 吗?尝试将 CRS url 参数切换为 EPSG:900913 或更改方程式以计算所请求图块的坐标
我想加载我的 wms 服务器以从那里显示图块。我使用 carto/nutiteq 一切正常,但我希望它是开源的或免费许可的。然后我尝试了 osmdroid 库,但我无法实现我的 wms 谁能帮助我?
// Web Mercator n/w corner of the map.
private static final double[] TILE_ORIGIN = {-20037508.34789244, 20037508.34789244};
//array indexes for that data
private static final int ORIG_X = 0;
private static final int ORIG_Y = 1; //
private static String mLayername = "";
// Size of square world map in meters, using WebMerc projection.
private static final double MAP_SIZE = 20037508.34789244 * 2;
// array indexes for array to hold bounding boxes.
protected static final int MINX = 0;
protected static final int MAXX = 1;
protected static final int MINY = 2;
protected static final int MAXY = 3;
private String layer = "";
/**
* Constructor
*
* @param aName a human-friendly name for this tile source
* @param aBaseUrl the base url(s) of the tile server used when constructing the url to download the tiles http://sedac.ciesin.columbia.edu/geoserver/wms
*/
public WMSTileProvider(String aName, String[] aBaseUrl, String layername) {
super(aName, 8, 22, 255, "image/png", aBaseUrl);
mLayername = layername;
}
final String WMS_FORMAT_STRING =
"http://dev.shiveh.com/shiveh?service=WMS&request=GetMap&layers=Shiveh%3AShivehGSLD256&styles=&format=image%2Fpng&transparent=false&version=1.1.1&height=256&width=256&srs=EPSG%3A4326&bbox=";
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;
}
您的 url EPSG:4326 中的坐标参考系是 lat/lon wgs84。然而,您所看到的方程式看起来像是从易滑的地图坐标转换为 EPSG:900913 的方程式。
您的服务器支持该 CRS 吗?尝试将 CRS url 参数切换为 EPSG:900913 或更改方程式以计算所请求图块的坐标