三 打造地图拼接利器图源配置( 三 )


在前端,我们通过一个配置文件.txt,将能使用的图源地址进行配置:
//配置说明:竖线前为地图名称,后为TMS地址,方括号内为服务器序号,{x}\{y}\{z}分别代表瓦片坐标 。很多地图都需要key授权,天地图的key可以自行申请,每天都会受到使用次数限制openstreet交通|https://a.tile.openstreetmap.org/{z}/{x}/{y}.png高德影像|https://webst0[1-4].is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}高德矢量|http://wprd0[1-4].is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}高德注记|https://wprd0[1-4].is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8天地图交通|https://t[1-4].tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=c03258c0232becff8dfbd108c02a3265天地图卫星|https://t[1-4].tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=c03258c0232becff8dfbd108c02a3265天地图地形|https://t[1-4].tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=c03258c0232becff8dfbd108c02a3265天地图注记|https://t[1-4].tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=c03258c0232becff8dfbd108c02a3265
在主程序加载时,将图层分别绑定到地图和覆盖图上 。
private void InitMapurls(){string configfile = Application.StartupPath + "\\config.txt";if (File.Exists(configfile)){string[] configlines = File.ReadAllLines(configfile);for (int i = 0; i < configlines.Length; i++){if (!configlines[i].StartsWith("//")){curmapurls.Add(configlines[i].Split('|')[1]);break;}}DataTable dt = new DataTable();dt.Columns.Add("text");dt.Columns.Add("value");DataTable dt1 = dt.Clone();for (int i = 0; i < configlines.Length; i++){if (!configlines[i].StartsWith("//")){mapurls.Add(configlines[i]);DataRow row = dt.NewRow();row[0] = configlines[i].Split('|')[0];row[1] = configlines[i].Split('|')[1];dt.Rows.Add(row);dt1.Rows.Add(row.ItemArray);}}CBLayer1.DataSource = dt;CBLayer1.DisplayMember = "text";CBLayer1.ValueMember = "value";CBLayer2.DataSource = dt1;CBLayer2.DisplayMember = "text";CBLayer2.ValueMember = "value";}else{curmapurls.Add("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png");}}
当图源下拉框变化时,切换地图:
void changeMap(){if (isfirtload)return;curmapurls.Clear();curmapurls.Add(((DataRowView)CBLayer1.SelectedItem)[1].ToString());if (CBShow.CheckState==CheckState.Checked){curmapurls.Add(((DataRowView)CBLayer2.SelectedItem)[1].ToString());}gmapc.MapProvider = new TmsProvider(curmapurls);}
同时,将gmapc. =new ();设置为自定义图源 。其中为一个泛型,用来记录右上角选择的地图的地址 。