BingMapsSilverlight访问WMS地图

本文介绍如何使用Bing Maps API加载自定义WMS图层,通过Geoserver发布地图服务,并实现地图瓦片的正确显示。文章提供了一个具体的C#实现案例,包括地图服务请求参数设置、地图坐标转换方法等。

 

代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Maps.MapControl;
using Microsoft.Maps.MapControl.Core;

namespace BingMaps
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            MapTileLayer tileLayer = new MapTileLayer();
            WMSTileSourse wmsts = new WMSTileSourse();
            tileLayer.TileSources.Add(wmsts);
            myMap.Children.Add(tileLayer);           
            this.myMap.Mode = new MercatorMode();
        }
        public class WMSTileSourse : TileSource
        {
            // Fields
            public const int TILE_SIZE = 0x100;
            // Methods
            public WMSTileSourse()
                : base("http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=GuangZhou&styles=&BBox={0},{1},{2},{3}&Width={4}&Height={4}&srs=EPSG:4326&format=image/png")
            {
            }

            public override Uri GetUri(int tilePositionX, int tilePositionY, int tileLevel)
            {
                int zoom = tileLevel;
                double num2 = 0.00135;
                double num3 = 0.00058;
                double num4 = TileToWorldPosX((double)tilePositionX, zoom) + num2;
                double num5 = TileToWorldPosY((double)tilePositionY, zoom) + num3;
                double num6 = TileToWorldPosX((double)(tilePositionX + 1), zoom) + num2;
                double num7 = TileToWorldPosY((double)(tilePositionY + 1), zoom) + num3;
                return new Uri(string.Format(base.UriFormat, new object[] { num4, num7, num6, num5, 0x100 }));
            }

            public static double TileToWorldPosX(double tile_x, int zoom)
            {
                return (double)((float)(((tile_x / Math.Pow(2.0, (double)zoom)) * 360.0) - 180.0));
            }

            public static double TileToWorldPosY(double tile_y, int zoom)
            {
                double num = 3.1415926535897931 - ((6.2831853071795862 * tile_y) / Math.Pow(2.0, (double)zoom));
                return (double)((float)(57.295779513082323 * Math.Atan(Math.Sinh(num))));
            }

        }
    }
}
注:地图我是用geoserver发布的
在geoserver可预览


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值