终于把高德变形后的数据,自己切图,最后无偏差的定位到高德地图上去了。接下来的事就将一马平川了。这里的高德地图是AMAP。
最后的结果其实很简单:
<%
String sx = request.getParameter("x");
String sy = request.getParameter("y");
String sz = request.getParameter("z");
long x = Long.parseLong(sx);
long y = Long.parseLong(sy);
long z = Long.parseLong(sz);
y = (long)Math.pow(2,z)-y-1;
long shift = z / 2;
long half = 2 << shift;
int digits = 1;
if (half > 10)
{
digits = (int) (Math.log10(half)) + 1;
}
long halfx = x / half;
long halfy = y / half;
String template = String.format("http://localhost:8080/gwcimgroot/test_BJ5W/EPSG_900913_%%02d/%%0%dd_%%0%dd/%%0%dd_%%0%dd.%%s", digits,digits,2*digits,2*digits);
String url = String.format(template, z, halfx, halfy, x, y, "png");
response.sendRedirect(url);
%>
但是中间却有血的教训。一个最为关键的地方是:AMAP的地图是EPSG:900913;而不是EPSG:4326。EPSG:900913也就是所谓的Web 墨卡托投影。
最开始犯的错误是切图以EPSG:4326进行,然后以切图后的缓存瓦片目录规则与AMAP自定义图层规则进行映射。结果中间总结的结果总不能完美的使用;而且还带来的一个非常严重的错误的观点:以为高德的地图层级与GeoWebCache的不一致。
中间系统的了解了下所有的投影概念,研究了OpenLayer的例子,看了各类地图的瓦片概念,最后做了个AMAP自定义图层的瓦片定位索引才搞明白。
评论