package cn.com.egova.mobileInspector.map;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Rect;
public class MapConfig {
/**
* 当前地图的最大级别
*/
public static int MaxLevel = 0;
/**
* 当前地图的最小级别
*/
public static int MinLevel = 0;
/**
* 地图经纬度
*/
public static double OriginX;
/**
* 地图经纬度
*/
public static double OriginY;
/**
* 单个瓦片宽度
*/
public static int TileCols;
/**
* 单个瓦片高度
*/
public static int TileRows;
/**
* 单个瓦片分辨率
*/
public static int DPI;
/**
* 地图中心位置坐标
*/
public static Point CenterPoint = null;
/**
* 当前的地图级别
*/
public static int Curlevel;
/**
* 当前屏幕中央的X坐标
*/
private static double curPointX;
/**
* 当前屏幕中央的Y坐标。
*/
private static double curPointY;
/**
* 每个缓存图片是由CACHEZOOMRATE×CACHEZOOMRATE个瓦片组成的
*/
public static int CACHEZOOMRATE = 4;
/**
* 缓存图片左上角对应的瓦片行号
*/
public static int cache_Y = 0;
/**
* 缓存图片左上角对应的瓦片列号。
*/
public static int cache_X = 0;
/**
* 屏幕显示图片区域的宽度
*/
public static int DisWidth;
/**
* 屏幕显示图片区域的高度
*/
public static int DisHeight;
/**
* 当前显示的地图相对于缓存图片的x像素。
*/
public static int display_x = 0;
/**
* 当前显示的地图相对于缓存图片的y像素。
*/
public static int display_y = 0;
/**
* 每个缓存图片矩形的宽度
*/
private static int CACHESIZE_WIDTH = 0;
/**
* 每个缓存图片矩形的高度
*/
private static int CACHESIZE_HEIGHT = 0;
/**
* 这个变量以后再通过初始化来修改。
*/
static int beforeNum = 1;
/**
* 这两个变量以后再通过初始化来修改。
*/
private static int afterNum = 3;
/**
* 瓦片各级别的相关信息
*
* @author 江晓峰
*
*/
private class LODInfo {
/**
* 地图级别
*/
public int LevelID;
/**
* 放大倍数
*/
public int Scale;
/**
* 分辨率
*/
public double Resolution;
public LODInfo(int LevelID, int Scale, double Resolution) {
this.LevelID = LevelID;
this.Scale = Scale;
this.Resolution = Resolution;
}
}
// 二级缓存
public class SubCache2 {
/**
* 列
*/
public int Cx;
/**
* 行
*/
public int Cy;
public int Level;
public Bitmap Bmp;
public int Count;
public SubCache2(int cx, int cy, int level, Bitmap bmp, int count) {
this.Cx = cx;
this.Cy = cy;
this.Level = level;
this.Bmp = bmp;
this.Count = count;
}
}
public static ArrayList<LODInfo> lodInfo_list = new ArrayList<LODInfo>();
/*
* 二级缓存
*/
public static ArrayList<SubCache2> subCacheList = new ArrayList<SubCache2>();
/**
* 初始化Map信息
*/
public static void initMapConfig(int viewWidth, int viewHeight) {
// 以 DOM 方式解析 XML
DocumentBuilderFactory docBuilderFactory = null;
DocumentBuilder docBuilder = null;
Document doc = null;
try {
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse(new ByteArrayInputStream(HttpServer.getConfigXml()));
org.w3c.dom.Element root = doc.getDocumentElement();
TileCols = Integer.parseInt(root.getElementsByTagName("TileCols").item(0).getChildNodes().item(0)
.getNodeValue());
TileRows = Integer.parseInt(root.getElementsByTagName("TileRows").item(0).getChildNodes().item(0)
.getNodeValue());
DPI = Integer.parseInt(root.getElementsByTagName("DPI").item(0).getChildNodes().item(0).getNodeValue());
OriginX = Double.parseDouble(root.getElementsByTagName("TileOrigin").item(0).getChildNodes().item(0)
.getChildNodes().item(0).getNodeValue());
OriginY = Double.parseDouble(root.getElementsByTagName("TileOrigin").item(0).getChildNodes().item(1)
.getChildNodes().item(0).getNodeValue());
NodeList nodeList = root.getElementsByTagName("LODInfo");
for (int i = 0; i < nodeList.getLength(); i++) {
Node nd = nodeList.item(i);
int lv = Integer.parseInt(nd.getChildNodes().item(0).getFirstChild().getNodeValue());
int sca = Integer.parseInt(nd.getChildNodes().item(1).getFirstChild().getNodeValue());
double res = Double.parseDouble(nd.getChildNodes().item(2).getFirstChild().getNodeValue());
lodInfo_list.add(new MapConfig().new LODInfo(lv, sca, res));
}
// 初始化最大最小的level
MaxLevel = Integer.MIN_VALUE;
MinLevel = Integer.MAX_VALUE;
for (LODInfo tInfo : lodInfo_list) {
if (tInfo.LevelID < MinLevel) {
MinLevel = tInfo.LevelID;
}
if (tInfo.LevelID > MaxLevel) {
MaxLevel = tInfo.LevelID;
}
}
beforeNum = 1; // 这里可能还调整。
afterNum = CACHEZOOMRATE; //
// 屏幕显示区域的高度和宽度
DisWidth = viewWidth;
DisHeight = viewHeight;
CACHESIZE_WIDTH = TileCols * CACHEZOOMRATE;
CACHESIZE_HEIGHT = TileRows * CACHEZOOMRATE;
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} finally {
doc = null;
docBuilder = null;
docBuilderFactory = null;
}
}
/**
* 从二级缓存中获取对应的地图切片
*
* @param level
* @param r
* @param c
* @return
*/
public static Bitmap getBitmapFromSubCache(int level, int r, int c) {
for (SubCache2 sCh2 : subCacheList) {
if (sCh2.Cx == c && sCh2.Cy == r && sCh2.Level == level) {
return sCh2.Bmp;
}
}
return null;
}
/**
* 根据给定的级别得到放大的级别和分辨率
*
* @param level
* @return
*/
public static LODInfo getLODInfoBylevel(int level) {
for (LODInfo lif : lodInfo_list) {
if (lif.LevelID == level) {
return lif;
}
}
return null;
}
/**
* 计算地图中心位置坐标, 近似值。
*/
public static void CalcInitialCentrlXY() {
CenterPoint = new Point();
int ic_cacheX = 2; // 地图中心点附近的 cacheX
int ic_cacheY = 3; // 地图中心点附近的 cacheY
int ic_level = 0; // 取最小级别
double x = 0;
double y = 0;
double res = getLODInfoBylevel(ic_level).Resolution;
x = ((ic_cacheX) * TileCols) * res + OriginX;
y = OriginY - ((ic_cacheY) * TileRows) * res;
CenterPoint.x = (int) x;
CenterPoint.y = (int) y;
}
/**
* 根据实际位置坐标和level来显示图片,这个可以作为整个画图的入口。
*
* @param x
* 给定中心点的X坐标
* @param y
* 给定中心点的Y坐标
* @param level
* 视野范围级别
*/
private static void DrawbyGivenPara(double x, double y, int level) {
Curlevel = level;
curPointX = x;
curPointY = y;
CalcDisplayPara(curPointX, curPointY, Curlevel);
// DebugLog.debug("===========激活二级缓存更新线程==========" +
// Environment.TickCount.ToString());
// needUpdateEvent.Set(); //使之在初始化界面能首先访问图片文件。
// DebugLog.debug("===========开始更新一级缓存==========" +
// Environment.TickCount.ToString());
// UpdateCacheBmp(cache_X, cache_Y);
// m_bitmap_display = GetPartOfImage(m_bitmap_display, m_bitmap_cache,
// display_x, display_y);
// this.DrawMap();
}
/**
* 根据级别默认地图中心点定位,用于初始化显示地图
*
* @param level
* 显示级别
*/
public static void LocateMapInitial(int level) {
// 初始化显示地图开始
int curX = 0;
int curY = 0;
CalcInitialCentrlXY();
curX = CenterPoint.x
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
EgovaMobileMap(1.1).rar (43个子文件)
EgovaMobileMap
bin
classes.dex 21KB
cn
com
egova
mobileInspector
map
WapianZones.class 2KB
MapConfig$SubCache2.class 875B
MapConfig.class 9KB
ChinaMapDAO.class 324B
R$layout.class 436B
R$drawable.class 685B
R$attr.class 382B
R.class 635B
ChinaMapActivity.class 1KB
MapConfig$LODInfo.class 710B
WapianZones$WapianZone.class 846B
R$string.class 469B
ChinaMapActivity$MySurfaceView$MapDrawTask.class 2KB
R$color.class 463B
HttpServer.class 5KB
ChinaMapActivity$MySurfaceView.class 5KB
resources.ap_ 98KB
EgovaMobileMap.apk 111KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable
fff.png 8KB
ccc.png 10KB
hhh.png 9KB
iii.png 10KB
aaa.png 12KB
ggg.png 12KB
ddd.png 10KB
eee.png 7KB
bbb.png 9KB
values
colors.xml 145B
strings.xml 195B
drawable-mdpi
icon.png 3KB
layout
main.xml 419B
assets
default.properties 364B
gen
cn
com
egova
mobileInspector
map
R.java 1KB
src
cn
com
egova
mobileInspector
map
MapConfig.java 13KB
HttpServer.java 5KB
WapianZones.java 3KB
ChinaMapActivity.java 8KB
.project 850B
.classpath 280B
AndroidManifest.xml 903B
共 43 条
- 1
不再风流
- 粉丝: 24
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页