NND,openlayers跨域访问geoserver居然要用到代理,貌似Felx就不用,用C#编写代理网上普遍是这样的:
public class GeoServerProxy1 : IHttpHandler { public void ProcessRequest(HttpContext context) { if (context.Request.QueryString["URL"] != null) { string url = ""; url = context.Request.QueryString["URL"].ToString(); HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(url); loHttp.Timeout = 10000; // 10 secs loHttp.UserAgent = "Web Client"; HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse(); Encoding enc = Encoding.GetEncoding(65001); StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc); string lcHtml = loResponseStream.ReadToEnd(); context.Response.Write(lcHtml); loWebResponse.Close(); loResponseStream.Close(); } } public bool IsReusable { get { return false; } } }
但是上面这种情况,没有考虑post,不适用于openlayers官方的wfs协议访问,但是可以用于http查询方式的访问,例如:
vectorLayer = new OpenLayers.Layer.Vector("覆冰点", { protocol: new OpenLayers.Protocol.HTTP({ //url: "http://10.180.80.206:9000/geoserver/sdgis/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sdgis:V_YL_24&maxFeatures=50", //url: "http://10.180.80.206:9000/geoserver/sdgis/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sdgis:GIS_WEATHER_FORECAST&maxFeatures=50", url: "http://10.180.80.206:9000/geoserver/sdgis/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sdgis:V_FBJC_PT&maxFeatures=50", format: new OpenLayers.Format.GML() }), styleMap: new OpenLayers.StyleMap({ 'default': { strokeColor: "#00FF00", strokeOpacity: 1, strokeWidth: 2, fillColor: "#FF0000", fillOpacity: 1, pointRadius: 6, strokeDashstyle: 'longdashdot', pointerEvents: "visiblePainted", externalGraphic: "snow.gif", graphicWidth: 12, graphicHeight: 12, //label: "name: ${OWNER}, age: ${FLAGS}", fontColor: "${favColor}", fontSize: "12px", fontFamily: "Courier New, monospace", fontWeight: "bold", labelAlign: "${align}", labelXOffset: "${xOffset}", labelYOffset: "${yOffset}" } }), renderers: renderer, strategies: [new OpenLayers.Strategy.Fixed()] });
我们,先来看看openlayers官方wfs协议是怎么访问的:
var fbjcLayer = new OpenLayers.Layer.Vector("FBJC_PT", { strategies: [new OpenLayers.Strategy.BBOX()], protocol: new OpenLayers.Protocol.WFS({ version: "1.1.0", url: "http://10.180.80.206:9000/geoserver/wfs", featureType: "sdgis:V_FBJC_PT", featureNS: "sdgid" }), renderers: OpenLayers.Layer.Vector.prototype.renderers });
这是一个post请求,我们修改代理程序来支持,如果用网上流传的代理程序会报parameter missing异常,下面是改进后的C#代理:
public class GeoServerProxy1 : IHttpHandler { public void ProcessRequest(HttpContext context) { if (string.IsNullOrEmpty(context.Request["URL"])) return; HttpWebRequest request = (HttpWebRequest) WebRequest.Create(context.Request["URL"]); request.UserAgent = context.Request.UserAgent; request.ContentType = context.Request.ContentType; request.Method = context.Request.HttpMethod; byte[] trans = new byte[1024]; int offset = 0; int offcnt = 0; if (request.Method.ToUpper() == "POST") { Stream nstream = request.GetRequestStream(); while (offset < context.Request.ContentLength) { offcnt = context.Request.InputStream.Read(trans, offset, 1024); if (offcnt > 0) { nstream.Write(trans, 0, offcnt); offset += offcnt; } } nstream.Close(); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //Encoding enc = Encoding.GetEncoding(65001); context.Response.ContentType = response.ContentType; StreamReader loResponseStream = new StreamReader(response.GetResponseStream()); string lcHtml = loResponseStream.ReadToEnd(); context.Response.Write(lcHtml); response.Close(); loResponseStream.Close(); } public bool IsReusable { get { return false; } } }
相关推荐
利用openlayers加载geoserver wfs服务发布的矢量图层。
使用代理解决WFS服务跨域测试代码,代理请求的位置在ky.html的第123行
openlayer3加载geoserver发布的WFS服务,并通过openlayers中的line string实现人/车辆移动的轨迹信息
使用代理解决WFS服务跨域测试代码,代理请求的位置在ky.html的第123行 代理文件是Proxy.jsp
解决arcgis server跨域问题: 1、停掉ArcGIS Server的服务。 2、 打开<ArcGIS Server> \framework\runtime\tomcat\conf\web.xml,注册跨域bean 3、lib下拷贝 cors-filter-2.5.jar java-property-utils-1.9.1.jar包 4...
基于openlayer3、geoserver2.3.2的openlayer3访问geoserver发布的地图服务
google map wms wfs 图层叠加
此代码主要是编写了通过geoServer发布数据服务,postGis作为空间数据的数据库,通过openlayer完成几个数据的增加,修改,删除,查询,包括属性查询,并且提供元数据测试。
一段简单代码描述了用geoserver wfs服务获取图层数据并返回geojson数据
OpenLayers 支持Open GIS 协会制定的WMS(Web Mapping Service)和WFS(Web Feature Service)等网络服务规范,可以通过远程服务的方式,将以OGC 服务形式发布的地图数据加载到基于浏览器的OpenLayers 客户端中进行...
OpenLayers笔记1:加载矢量地图数据的方法以及应对跨域问题的解决方法加载矢量地图数据的两种方法加载本地geojson格式文件出现的跨域问题及解决方法。向geoserver请求WFS服务出现的跨域问题及解决方法。 加载矢量...
cesium加载WFS服务(GeoServer发布)-附件资源
请问在openlayers中如何删除Layer中的marker 3 在层中加了一个标记怎么永久的存到地图上 3 OpenLayers 如何设死地图边界 3 谁写过openlayers解析xml 3 openlayer.popup 3 OpenLayers 怎么做字段标注 4 字段标注不是...
示例在SuperMap Objects.NET 6R中实现打开WFS服务,并根据某一条件进行SQL查询,最终以闪烁的形式表达符合条件的结果。
开源js库,支持WMS,WFS标准,方便开发GIS相关的web应用
实例环境: VS2020 Asp.net + GeoServer
花费了很久整理的ol2的代码直接可用附带3级切片
openlayers 实现在地图上添加文字标注。为图片注记添加文本标签
比如OpenGIS的WMS和WFS规范。OpenLayers采用面向对象方式开发,并使用来自Prototype.js和Rico中的一些组件。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源...