日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

嵌入式linux离线地图,基于gmap.net制作离线地图下载器

發(fā)布時間:2023/12/20 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式linux离线地图,基于gmap.net制作离线地图下载器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、gmap.net 源碼下載http://greatmaps.codeplex.com/

2、Gmap.net基本使用。下載源碼后源碼結(jié)構(gòu)如下圖所示:

制作下載器需要用到的兩個庫是gmap.net.core和gmap.net.windowsforms兩個庫,編譯后可以把多余的工程刪掉,新建一個DownMap工程。

然后將gmap.net.core和gmap.net.windowsforms兩個庫添加到DownMap下,將工具欄中GmapControl的控件拖到窗體中,然后load事件中添加以下幾個參數(shù)運行后能看到相應(yīng)地圖顯示了。

3、下載器編制作。其實gmap.net本身已自帶下載工能,只是離線圖片下載到sqlit中,現(xiàn)將其擴展一下,支持多種方式存儲。最終界面如下圖所示,界面什么的都是次要的只要懂得原理即可

gmap自帶很多地圖數(shù)據(jù)源,但缺少國內(nèi)地圖數(shù)據(jù)源,擴展一個像高德地圖數(shù)據(jù)源也非常簡單,其他數(shù)據(jù)源也類似,百度有點特殊。下面擴展一個高德數(shù)據(jù)源。在gmap.net.core中添加一個amap文件夾,

AMapProviderBase代碼:

public abstract classAMapProviderBase : GMapProvider

{publicAMapProviderBase()

{

MaxZoom= null;

RefererUrl= "http://www.XX.com/";

Copyright= string.Format("?{0} XX Corporation, ?{0} NAVTEQ, ?{0} Image courtesy of NASA", DateTime.Today.Year);

}public overridePureProjection Projection

{get{return MercatorProjection.Instance;//高德采用webMercator投影

}

}

GMapProvider[] overlays;public overrideGMapProvider[] Overlays

{get{if (overlays == null)

{

overlays= new GMapProvider[] { this};

}returnoverlays;

}

}

}

AMapProvider?代碼:

1 public classAMapProvider : AMapProviderBase2 {3 public override stringToString()4 {5 return "AMap";6 }7

8 public static readonlyAMapProvider Instance;9

10 readonly Guid id = new Guid("EF3DD303-3F74-4938-BF40-232D0595EE88");//每個數(shù)據(jù)源有不同的ID

11 public overrideGuid Id12 {13 get { returnid; }14 }15

16 readonly string name = "高德地圖--柵格";17 public override stringName18 {19 get

20 {21 returnname;22 }23 }24 staticAMapProvider()25 {26 Instance = newAMapProvider();27 }28

29 public override PureImage GetTileImage(GPoint pos, intzoom)30 {31

32 string url =MakeTileImageUrl(pos, zoom, LanguageStr);33 returnGetTileImageUsingHttp(url);34

35

36 }37

38 string MakeTileImageUrl(GPoint pos, int zoom, stringlanguage)39 {40 int serviceIndex = 0;41 Random rd = newRandom();42 serviceIndex = rd.Next(1, 4);43 //string url = string.Format(UrlFormat, zoom, pos.X, pos.Y, Uri);

44 string url = string.Format(UrlFormat, pos.X, pos.Y, zoom, "0" +serviceIndex);45 returnurl;46 }47

48

49 static readonly string UrlFormat = "http://webst{3}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={0}&y={1}&z={2}";50

51 }52 }

UrlFormat說明:

用瀏覽器打高德地圖按F12監(jiān)視一下就能獲取到相應(yīng)URL,然后替換到UrlFormat中即可。

然后在GMapProviders中添加剛新增的數(shù)據(jù)源:

public static readonly AMapProvider AMap = AMapProvider.Instance;

然后修改gmapControl1.mapprovider=GMapProviders.AMap;

運行后能看到相應(yīng)高德地圖底圖了

當(dāng)你按住alt鍵畫下載區(qū)域(this.mapControl1.SelectedArea)或根據(jù)行政區(qū)域(計算多邊形最小外接矩形)得到一個下載區(qū)域時會得到一個相應(yīng)矩形:

得到這個矩形(this.mapControl1.SelectedArea)的左上角坐標(biāo)和右下角坐標(biāo)去計算相應(yīng)要下載的瓦片,具體接口

GPoint topLeft =_provider.Projection.FromPixelToTileXY(_provider.Projection.FromLatLngToPixel(rect.LocationTopLeft, Convert.ToInt32(level)));

GPoint rightBottom=_provider.Projection.FromPixelToTileXY(_provider.Projection.FromLatLngToPixel(rect.LocationRightBottom, Convert.ToInt32(level)));//_provider當(dāng)前選擇的mapProvider,rect為當(dāng)前選擇的區(qū)域,level為選擇等級//載循環(huán)獲取瓦片:

for (long x = (topLeft.X); x <= (rightBottom.X); x++)

{for (long y = (topLeft.Y); y <= (rightBottom.Y); y++)

{//這里實現(xiàn)下載獲得圖片:

PureImage img= GMaps.Instance.GetImageFrom(_provider, new gpoint(x,y), level, out ex);//接下載就可以自行存儲了。(可以存到文件夾啊數(shù)據(jù)庫啊等等)Level/x_y.png}

}

4、gmap使用離線地圖(將瓦片發(fā)布在IIS中):

首先在MapProviders中的XXXProvider.CS代碼最后面都能看到UrlFormat字段。替換你自己的路徑即可。

那么將urlFormat的路徑代替為

即可。

4、當(dāng)然下載的瓦片也可以對接在openlayer和leaflet等開源的webgis中,

以上就是全部步驟,希望對您有所幫助。如果凝問可以聯(lián)系我。

總結(jié)

以上是生活随笔為你收集整理的嵌入式linux离线地图,基于gmap.net制作离线地图下载器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。