1.說明
水經(jīng)注離線谷歌衛(wèi)星地圖加載服務(wù)中間件可利用離線地圖的.dat文件在本地建立服務(wù)端,并生成影像、標簽、高程等服務(wù)地址,可以在Google API中直接調(diào)用該服務(wù)地址,并將請求到的服務(wù)資源顯示在前端,當請求的地圖資源不存在可通過網(wǎng)絡(luò)直接下載缺失的地圖,并儲存在.dat文件中。
百度網(wǎng)盤下載:http://pan.baidu.com/s/1bnjZDZx
詳情請咨詢水經(jīng)注QQ群 329081749
2.實現(xiàn)
2.1準備GoogleMapAPIV3
下載GoogleMapAPIV3.rar。
在其目錄下新建一個html文件“RiverMapServerSample For Google API.html”,如下圖。
利用記事本打開“RiverMapServerSample For Google API.html”并進行編輯,具體內(nèi)容如下。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" c />
<title>RiverMapServerSample For Google API</title>
<link href="mapfiles/css/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="mapapi.js"></script>
<script>
function tlen(len, mystr){
mystr = String(mystr);
var num = len - mystr.length;
for (var i = 0; i <= num; i++)
{
mystr = "0" + mystr;
}
return mystr;
};
function CoordMapType(tileSize) {
this.tileSize = tileSize;
}
CoordMapType.prototype.getTile = function(coord, zoom, ownerDocument) {
var div = ownerDocument.createElement('DIV');
var ymax = 1 << zoom;
var y = coord.y;
y = tlen(5,y);
var x = tlen(5,coord.x);
zoom = tlen(1,zoom+1);
div.innerHTML = y + "," + x + "," + zoom;
div.style.width = this.tileSize.width + 'px';
div.style.height = this.tileSize.height + 'px';
div.style.fontSize = '10';
div.style.borderStyle = 'solid';
div.style.borderWidth = '1px';
div.style.borderColor = '#AAAAAA';
return div;
};
function LocalMapType() {}
LocalMapType.prototype.tileSize = new google.maps.Size(256, 256);
LocalMapType.prototype.maxZoom = 20;
LocalMapType.prototype.minZoom = 0;
LocalMapType.prototype.name = "本地";
LocalMapType.prototype.alt = "顯示本地地圖";
LocalMapType.prototype.getTile = function(coord, zoom, ownerDocument) {
var img = ownerDocument.createElement("img");
img.style.width = this.tileSize.width + "px";
img.style.height = this.tileSize.height + "px";
var ymax = 1 << zoom;
var y = coord.y;
y = tlen(5,y);
var x = tlen(5,coord.x);
zoom = tlen(1,zoom+1);
var strURL = "http://127.0.0.1:1002/getDefinedImage?" + "x=" + x + "&y=" + y + "&z=" + zoom;
img.src = strURL;
return img;
};
var localMapType = new LocalMapType();
function initialize() {
var myLatlng = new google.maps.LatLng(30, 103);
var myOptions = {
center: myLatlng,
zoom: 4,
streetViewControl: false,
mapTypeControlOptions: {
mapTypeIds: ["local", google.maps.MapTypeId.ROADMAP]
}
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
map.mapTypes.set('local', localMapType);
map.setMapTypeId('local');
map.overlayMapTypes.insertAt(0, new CoordMapType(new google.maps.Size(256, 256)));
}
</script>
</head>
<body >
<div id="map_canvas" style="width: 640px; height: 480px;"></div>
</body>
</html>
其中【strURL=”http://localhost:1002/getDefinedImage?”】表示請求的是影像、地圖、地形、標簽、影像+標簽、影像+地圖、影像+地形或Dem。具體根據(jù)RiverMapServer的啟動配置參數(shù)來確定。
例如:RiverMapServer.exe “1002” “Image_Label” “c:\test\tile” “c:\test\label”表示此應(yīng)用輸出合并底圖(可以為影像、地圖、地形任意一種)和標簽兩個地圖瓦片。RiverMapServer.exe “1002” “Image” “c:\test\tile”表示此應(yīng)用輸出地圖底圖(可以為影像、地圖、地形任意一種)
2.2啟動RiverMapServer
啟動RiverMapServer有兩種方式都可以正常運行。
2.2.1直接運行RiverMapServer
通過config.ini文件配置參數(shù),如下圖。
PORT=1002表示端口為1002;GetFileType=Image_Label表示此應(yīng)用輸出合并底圖(可以為影像、地圖、地形任意一種)和標簽兩個地圖瓦片,后面必須跟兩個瓦片工程文件目錄;TileDir=..\dat\tile表示影像數(shù)據(jù)路徑;LabelDir=..\dat\label 表示標簽數(shù)據(jù)路徑;DemDir=..\dat\dem 表示高程數(shù)據(jù)路徑。
2.2.2 通過cmd.exe輸入啟動參數(shù)運行
新建一個bat文件,設(shè)置配置參數(shù),如下圖。
雙擊.bat啟動服 務(wù)。運行效果和直接運行RiverMapServer效果一致。
3.運行結(jié)果
瀏覽器打開RiverMapServerSample For Google API.html效果,如下圖。
附錄:
啟動參數(shù)說明
1.瓦片文件類型:Image_Lable 表示此應(yīng)用輸出合并底圖(可以為影像、地圖、地形任意一種)和標簽兩個地圖瓦片,后面必須跟兩個瓦片工程文件目錄)
例子:RiverMapServer.exe “1002” “Image_Label” “c:\test\tile” “c:\test\label”
2.瓦片文件類型:Image 表示此應(yīng)用輸出地圖底圖(可以為影像、地圖、地形任意一種)
后面必須只需一個瓦片工程文件目錄
例子:RiverMapServer.exe “1002” “Image” “c:\test\tile”
3.瓦片文件類型:Label表示此應(yīng)用輸出地圖標簽 后面必須只需一個瓦片工程文件目錄
例子:RiverMapServer.exe “1002” “Label” “c:\test\label”
4.(待)瓦片文件類型:dem表示此應(yīng)用輸出地圖位置高程 后面必須只需一個地圖位置高程工程文件目錄
例子:RiverMapServer.exe “1002” “dem” “c:\test\dem”
輸入?yún)?shù)大小寫不敏感,啟動時需檢查瓦片文件類型與工程文件是否匹配
請求接口說明
根據(jù)啟動參數(shù)輸出相應(yīng)類型圖片(影像、地圖、地形、標簽、影像+標簽、影像+地圖、影像+地形、Dem)
http://localhost:1002/getDefinedImage?x=1&y=1&z=1
輸出地圖底圖(影像、地圖、地形任意一種)
http://localhost:1002/getTileImage?x=1&y=1&z=1
輸出標簽
http://localhost:1002/getLabelImage?x=1&y=1&z=1
輸出高程
http://localhost:1002/getDemImage?x=1&y=1&z=1
刪除地圖地圖(影像、地圖、地形任意一種)
http://localhost:1002/delTileImage?x=1&y=1&z=1
地圖服務(wù)啟動日志輸出
[attach]323285[/attach]
2 .服務(wù)正常啟動與運行輸出:
@@RUN:WAITING 正常啟動后和服務(wù)空閑時每分鐘輸出
@@RUN:Exception:異常消息(不能有回車換上等控制字符)服務(wù)啟動異常后輸出
服務(wù)正常啟動后建立與瓦片工程文件數(shù)據(jù)源的連接
@@DSCOK:瓦片工程文件 連接正常
@@DSCFAIL:瓦片工程文件 連接失敗
@@PORT:端口
3 .瓦片輸出
@@TileOK:X=1&y=1&z=1 底圖瓦片下載成功(已下載正常輸出瓦片不輸出日志)
@@LabelOK:X=1&y=1&z=1 標簽瓦片下載成功(已下載正常輸出瓦片不輸出日志)
@@TileNoExists:X=1&y=1&z=1 底圖瓦片不存在
@@LabelNoExists:X=1&y=1&z=1 標簽瓦片不存在
@@TileOverRange:X=1&y=1&z=1 底圖瓦片超出工程文件覆蓋范圍
@@LabelOverRange:X=1&y=1&z=1 標簽瓦片超出工程文件覆蓋范圍