【问题标题】:sending wms request to geoserver via brutile/sharpmap to load tiled map (tiled=true)通过 brutile/sharpmap 向 geoserver 发送 wms 请求以加载平铺地图 (tiled=true)
【发布时间】:2016-11-08 11:56:42
【问题描述】:

我想在 SharpMap 的地图框中加载平铺地图。我有 GeoServer 并向其发送 WMS 请求,但我只收到单个瓦片地图。 如何接收多瓦地图? 这是我的代码:

    Dim wmsUrl As String = "http://192.168.21.202:8080/geoserver/threem/gwc/service/wms?tiled=true&version=1.1.0"
    Dim layWms As New SharpMap.Layers.WmsLayer("threem_zoom", wmsUrl)
    layWms.AddLayer("threem_zoom")
    layWms.SetImageFormat("image/png")
    layWms.TimeOut = 5000
    layWms.SRID = 4326
    layWms.Version = "1.1.0"
    MapBox1.Map.Layers.Add(layWms)
    MapBox1.PanOnClick = True
    MapBox1.Map.ZoomToExtents()
    MapBox1.Refresh()

【问题讨论】:

    标签: c# vb.net geoserver sharpmap


    【解决方案1】:

    这可以使用 SharpMap 的 TileLayerAsync 来实现。请参阅 TileLayerAsync here 的示例。您需要指定合适的磁贴来源。

    使用 GeoServer 的 tile=true it looks 您仍然可以将其作为普通 WMS 发布,但要考虑标签放置。在这种情况下,您需要像这样here

    也许更好的是使用 GeoServer 将其发布为使用 TMS、WMTS 或 WMS-C 的适当切片图层。在这种情况下,您需要通过 BruTile 的 HttpTileSource 访问它。

    【讨论】:

    • 在 gis stackexchange 上也可以看到这个答案:gis.stackexchange.com/questions/183904/…
    • 谢谢@pauldendulk。你是对的。我使用 TileLayerAsync 和 WmscTileSource.CreateFromWmscCapabilties 做到了这一点。我会为其他人发布我的代码。关于 GeoServer 的 tile=true 的优点。
    【解决方案2】:

    documentation 看来,似乎支持简单的 WMS 图层 - 因此您需要自己处理拼贴边界的构建并发出多个 WMS 请求以获取平铺图像。

    WMS 层支持目前非常基础。您必须自己解读服务器功能,并在资源属性中指定必要的层和其他属性。

    【讨论】:

      【解决方案3】:

      我用这段代码解决了这个问题:

      Try
              form1.Mapbox1.Map.Layers.Clear()
              Dim Map As Map = New Map()
              Dim xmlDoc As New XmlDocument()
              If My.Settings.Cache Then
                  xmlDoc.Load("http://" & My.Settings.ServerIP & ":" & My.Settings.ServerPort & "/" & My.Settings.ServerName & "/gwc/service/wms?SERVICE=WMS&VERSION=" & My.Settings.WMSVer & "&REQUEST=getcapabilities&TRANSPARENT=TRUE&TILED=true")
              Else
                  xmlDoc.Load("http://" & My.Settings.ServerIP & ":" & My.Settings.ServerPort & "/" & My.Settings.ServerName & "/wms?SERVICE=WMS&VERSION=" & My.Settings.WMSVer & "&REQUEST=getcapabilities&TRANSPARENT=TRUE&TILED=true")
              End If
              Dim xDoc = Program.ConvertToXDocument(xmlDoc)
              Dim source As List(Of ITileSource)
              source = WmscTileSource.CreateFromWmscCapabilties((xDoc))
              Dim tileSource = source.FirstOrDefault(Function(x) x.Schema.Name = My.Settings.WorkSapce & ":" & My.Settings.LayerName)
              Dim tileLayer = New TileAsyncLayer(tileSource, My.Settings.WorkSapce & ":" & My.Settings.LayerName) With {.SRID = My.Settings.SRIDNum}
              tileLayer.OnlyRedrawWhenComplete = True
              form1.Mapbox1.Map.Layers.Add(tileLayer)
              form1.Mapbox1.PanOnClick = True
              Dim env = New Envelope(44.0509701, 25.0652748, 63.3556599, 39.796795)
              form1.Mapbox1.Map.ZoomToBox(env)
              form1.Mapbox1.Map.ZoomToExtents()
              form1.Mapbox1.Map.Center = New Coordinate(53.682362, 32.420654)
              form1.Mapbox1.Refresh()
          Catch ex As Exception
              MessageBox.Show(ex.Message)
          End Try
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        • 2012-06-05
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多