GMap.net加载GeoServer发布的WMS图层

地图源提供类

public class WMSProvider : GMapProvider
{
    public static readonly WMSProvider Instance;

    WMSProvider()
    {
        MaxZoom = 24;
    }

    static WMSProvider()
    {
        Instance = new WMSProvider();

       // Type mytype = typeof(GMapProviders);
       // FieldInfo field = mytype.GetField("DbHash", BindingFlags.Static | BindingFlags.NonPublic);
       // Dictionary<int, GMapProvider> list = (Dictionary<int, GMapProvider>)field.GetValue(Instance);

       // list.Add(Instance.DbId, Instance);
    }

    #region GMapProvider Members

    readonly Guid id = new Guid("4574218D-B552-4CAF-89AE-F20951BBDB2B");

    public override Guid Id
    {
        get { return id; }
    }

    readonly string name = "WMS Custom";

    public override string Name
    {
        get { return name; }
    }

    GMapProvider[] overlays;

    public override GMapProvider[] Overlays
    {
        get
        {
            if (overlays == null)
            {
                overlays = new GMapProvider[] { this };
            }
            return overlays;
        }
    }

    public override PureProjection Projection
    {
        get { return MercatorProjection.Instance; }
    }

    public override PureImage GetTileImage(GPoint pos, int zoom)
    {
        string url = MakeTileImageUrl(pos, zoom, LanguageStr);

        return GetTileImageUsingHttp(url);
    }

    #endregion

    string MakeTileImageUrl(GPoint pos, int zoom, string language)
    {
        var px1 = Projection.FromTileXYToPixel(pos);
        var px2 = px1;

        px1.Offset(0, Projection.TileSize.Height);
        PointLatLng p1 = Projection.FromPixelToLatLng(px1, zoom);

        px2.Offset(Projection.TileSize.Width, 0);
        PointLatLng p2 = Projection.FromPixelToLatLng(px2, zoom);

        string ret;

        string extra = "?";

        if (CustomWMSURL.Contains("?"))
            extra = "&";

        //if there is a layer, use it  
        if (szWmsLayer != "")
        {
            ret = string.Format(CultureInfo.InvariantCulture,
                CustomWMSURL + extra + "VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS&layers=" + szWmsLayer +
                "&styles=&bbox={0},{1},{2},{3}&width={4}&height={5}&srs=EPSG:4326&format=image/png", p1.Lng, p1.Lat,
                p2.Lng, p2.Lat, Projection.TileSize.Width, Projection.TileSize.Height);
        }
        else
        {
            ret = string.Format(CultureInfo.InvariantCulture,
                CustomWMSURL + extra +
                "VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS&styles=&bbox={0},{1},{2},{3}&width={4}&height={5}&srs=EPSG:4326&format=image/png",
                p1.Lng, p1.Lat, p2.Lng, p2.Lat, Projection.TileSize.Width, Projection.TileSize.Height);
        }

        return ret;
    }

    public static string szWmsLayer = "ceishigis:gis_osm_railways_free_1";

    public static string CustomWMSURL =
        "http://localhost:8080/geoserver/ceishigis/wms";
}

加载方式

 //mapControl1.MapProvider = WMSProvider.Instance;//谷歌中国地图
 //mapControl1.Manager.Mode = AccessMode.ServerOnly;//设置从服务器获取地图数据//最小比例
 //mapControl1.MinZoom = 0;
 //mapControl1.MaxZoom = 20;//最大比例
 //mapControl1.Zoom = 10;
 //    //当前比例
 //mapControl1.ShowCenter = false;//不显示中心十字标记
 //mapControl1.DragButton = System.Windows.Forms.MouseButtons.Left; //左键拖拽地图
                                                                 
 //mapControl1.MouseWheelZoomType = MouseWheelZoomType.MousePositionWithoutCenter;//鼠标缩放模式

 //mapControl1.Position = new PointLatLng(32.037097,118.802816);//地图中心点

Gmap.net 好像不支持加载多个图层,目前我没有找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值