捐血一袋救人一命

2012年11月14日 星期三

Yahoo Japan Maps for Mobile Atlas Creator

因為 Google Maps 在日本地區資訊很少,所以我又抓了 Yahoo Japan Map
請將以下程式碼存成 .bsh

PS. Yahoo Japan Map 到 Level 10 時,只剩下日本國土範圍有圖資!



/**
Yahoo Japan Map Example:
Input parameters for this script: "zoom", "x" and "y"
**/
String getTileUrl( int zoom, int x, int y ) {
if (zoom == 0) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + y + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 1) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (0 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 2) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (1 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 3) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (3 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 4) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (7 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 5) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (15 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 6) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (31 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 7) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (63 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 8) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (127 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 9) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (255 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 10) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (511 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 11) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (1023 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 12) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (2047 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 13) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (4095 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 14) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (8191 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 15) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (16383 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 16) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (32767 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 17) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (65535 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 18) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (131071 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 19) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (262143 - y) + "&z=" + (zoom + 1) + ".png";
}
if (zoom == 20) {
return "http://m.map.c.yimg.jp/m?r=1&x=" + x + "&y=" + (524287 - y) + "&z=" + (zoom + 1) + ".png";
}
}
void addHeaders( java.net.HttpURLConnection conn) {
// Optional: set HTTP Referer or Cookies
conn.addRequestProperty("Cookie","test=12345");
conn.addRequestProperty("Referer","http://www.openstreetmap.org");
}

tileType = "png"; // required - image format "png" "jpg" or "gif"

// Default size of each tile is 256x256 pixel
tileSize = 256; // optional
minZoom = 0; // optional
maxZoom = 19; // optional
name = "Yahoo Map";


tileUpdate = TileUpdate.None; // optional - possibilities:
// TileUpdate.IfNoneMatch, TileUpdate.ETag, TileUpdate.IfModifiedSince, TileUpdate.LastModified, TileUpdate.None




下圖是我從 Samsung Galaxy Note 2 上抓下來的,地圖上半部是 Yahoo Maps,下半部是 Google Maps



紅色線框是兩種地圖圖資交界處。



大家可以很明顯的看到 Yahoo Map 字體比 Google Map 清晰



配色效果也好些,街道寬度都差不多



所以在高階手機上看來,街道都很細… 傷心



2012-11-14-20-34-13


















反應:

15 意見:

壞小孩 提到...

耶,超讚的!
本來還打算用1.9的抓Google,1.8抓Yahoo,現在可以用同一套一起下載了。
感謝!

壞小孩 提到...

在日本Yahoo的圖資的確比Google好看,同樣的比例尺下,Yahoo的字比較大,而且一些小圖示也比Google大。
Google Maps在Android上,字體就會自動放大,看起來就不會很累(可以把用Mobile Atlas Creator下載的圖和手機上的Google Maps的圖比較)。

cflin 提到...

感謝提供。
剛剛試了一下,加入
&style=base:bold
這個參數,字體變得更大更清楚,適合手機上看。

Tom 提到...

感謝提供資訊呀....

另外,手機上顯示 Google Maps Apps 圖資,比用 MOBAC 抓的清楚,是因為多了一個 &scale=2 參數

以此參數抓圖資,會比原來大上4倍

因為新版 MOBAC 不支援 tileSize 參數,所以也無法用這個參數正常運作...:(

壞小孩 提到...

有看到您在TYT的網站留言,我覺得您可以不用執著於星跡地圖,因為他也說了,因為很忙,沒時間更新。
RMaps最近更新的蠻頻繁的,不但加入了下載器,也支援放大功能說,不過MOBAC製作的就只能當作圖片處理,跟星跡地圖一樣會模糊就是了,線上快取和下載的部份就好很多。

Tom 提到...

蠻可惜的,因為 RMaps 讀取超過 1GB 以上離線地圖檔,就會變得超慢...

Tom 提到...

蠻可惜的,因為 RMaps 讀取超過 1GB 的離線圖資,就會跑很慢... :(

George 提到...

Hi
版大你可以試看看Locus這個軟體,雖然他和rmap一樣需要預讀地圖,但所提供的功能在免費版就很完整,也提供 tileSize這個參數在online map上使用,不過卻會發生整個世界地圖只剩下北美洲的部分,且座標也全部大亂,所以猜測如果MOBAC可支援使用tileSize這個參數,但如果app不支援的情況下,也只能單純瀏覽,無法當作一般地圖使用,支援標記和搜尋地標等等功能。

Tom 提到...

Locus 看起來好專業的感覺,一堆設定...
稍微看了一下,好像內建沒有讀取 Google Maps

George 提到...

版大您好:
內建是沒有支援Google Map
請參考http://forum.locusmap.eu/viewtopic.php?f=43&t=1903
必需使用providers.xml去定義才可以使用。

匿名 提到...

板大您好
請問若我要找的位置是在
&x=3591 &y=422 &z=13
該如何輸入在您提供的範例中呢?
是否為

String getTileUrl( int zoom==13, int x==3591, int y ==422) {



Tom 提到...

是的

Che-Wei Shu 提到...

TOM 您好,謝謝回覆

壞小孩 提到...

好一陣子沒上來看了,這次去日本用了Yahoo Japan Maps。
現在有空再來研究一下Google的scale=2,想請教您,如果在Google Maps的xml裡加上這個參數後,您在Mobile Atlas Creator上看地圖會是正常的嗎?
我有弄了一個,發現直接在程式上看圖會一塊一塊的,不過隨便抓一個範圍後,拿到手機上看,發現是正常的說。
用了這個參數後,再搭配rmaps的放大功能,超清楚的。
謝謝!

壞小孩 提到...

另外,再請教一下,Yahoo Japan Maps有沒有支援scale=2呢?我本來看到裡面有tileSize = 256,想說直接改成512,沒想到就說不支援。