GeoServer根据GPLv2获得许可.我知道这意味着我不能从这个应用程序中制作衍生商业作品.例如,我无法将新接口,插件等作为封闭源应用程序添加到GeoServer.
但是,我可以将它用作后端服务器来支持封闭源应用程序吗?符合oGC标准的地图服务器,它公开了某些符合OGC标准的接口,用于使用地图和数据.还有其他几种GIS服务器可以执行此操作,例如MapServer(免费)和ArcGIS Server(商业).
因此,假设我创建了一个封闭源Flex GIS框架,用于通过符合OGC标准的Web服务来使用数据.如果我出售此应用程序,并且包含GeoServer(未修改)作为安装的一部分(包括相应的许可证),我是否会违反GPL?
如果有的话,如何在商业闭源应用程序中使用GeoServer?
我是一个"自己动手"的那种人,但是我想确保我不会因为尝试咬掉比我能咀嚼更多的东西.
我正在编写一个基于浏览器的地图应用程序,需要在最终用户的计算机上运行独立(无互联网连接).也就是说,应用程序是某种服务器,在许多情况下,它将安装在最终用户的计算机上,浏览器将指向某个localhost URL来访问它.
我将在客户端使用MapLayers,服务器端将有一堆特定于应用程序的自定义逻辑,例如以某些自定义方式处理地图上的点击事件,在特定时间在地图上创建各种自定义对象,等等.
对于服务器的"业务逻辑"部分,我很高兴使用带有python的paste/webob.这是一个简单的基础架构,可以让我轻松地放入所有这些自定义逻辑.
我一直在想客户端会与两台服务器进行通信:这个粘贴/ webob业务逻辑服务器,以及一台服务于WMS和WFS地图元素的服务器.所以我看着MapServer和GeoServer处理地图部分......我不高兴.
我不高兴,因为我不想在客户端机器上安装和担心"野兽".对于MapServer,我真的不想安装像Apache这样的成熟的Web服务器,并且必须处理CGI,PHP和MapScript.对于GeoServer,可能(可能)安装Java,并处理GeoServer设置和管理的各种复杂性.
部分原因只是学习曲线问题.如果我可以避免它,我对学习MapServer或GeoServer的复杂性并不是特别感兴趣.我安装了GeoServer,将其指向我的一些数据,并且能够使用GeoServer良好的Web管理员内置的MapLayers预览来查看我的数据.但当我尝试使用我自己的GeoServer指向的MapLayers网页提供真实的数据时,我崩溃了GeoServer.我可能会崩溃服务器只是从客户端发送一些可能是格式错误的请求对我来说是非常令人惊讶的.我可以深入研究GeoServer日志,试图弄清楚我做错了什么,但是......我真的不想花很多时间在那上面.
所以,我正在考虑使用我已经拥有的粘贴/ webob服务器自己实现WMS和WFS接口的部分.事实上,我可能只需要WMS,因为我可以通过一个简单的自定义协议来处理矢量对象,我将这些协议传递给客户端,然后客户端可以使用OpenLayers直接创建和操作对象.
我查看了WMS的规范和示例消息(在WFS上稍微少一点).我自己实现这个协议似乎并不那么困难,特别是因为在这种情况下我完全控制了客户端 - 这不像我需要能够充当通用的WMS或WFS服务器; 我只需要让我自己的OpenLayers客户满意.
我需要WMS服务器的两个主要功能是:
从我提前创建的预渲染瓷砖商店中提供瓷砖(我将使用OpenStreetMap数据预渲染瓷砖,使用mapnik作为渲染引擎;我将使用普通的Google Maps样式瓷砖命名方案存储和访问它们那个OpenLayers预计)
能够服务器修改这些瓦片的版本,其中我在本地存储的某些数据被绘制在瓦片之上.例如,我可能在一个"图层"上有10000个点,在另一个图层上有10000个多边形,当用户激活这些图层时,我将提供相同的基础图块,但是当我提供这些图块时,我将呈现这些附加功能在它们之上,可能我将实现一个简单的缓存方案,以保持这些过度渲染的磁贴一段时间.
所以我的问题是:尽管我知道现有的工具可以做这些事情(MapServer,GeoServer,TileCache等),但实际上我觉得仅仅回应一些简单的WMS消息对我来说就不那么重要了,在python中自己对我的瓷砖进行额外的过度绘图,确保所有内容都能正确投影等.我不需要为这些过度图层绘制花哨的宽街道或任何东西,只需简单的线条,图标和标签.拥有一个只有python的解决方案听起来很简单.
我想如果我需要扩展到支持更多的WMS/WFS协议,或者进行更高级的透支,我可以在那时插入MapServer/GeoServer.
这里有陷阱我不考虑吗?
有谁知道QGIS中是否支持WMS-T?
通过应用程序,我可以添加WMS图层,但我不能使用WMS-T(没有地方设置时间参数).
我一直在浏览Python插件,虽然有一些与时间有关(时间管理器,多时间和多变量数据可视化),但它们不支持WMS协议(它们直接与数据库一起工作).
问候
注意 - 我正在使用GeoServer
我在我的服务器上使用 GeoServer 和种子切片。平铺已成功创建,但我不知道目录结构遵循哪种模式...(即.../EPSG_4326_05/0_0/00_06.png)我想在 OpenLayers 应用程序中使用平铺,并且我想使用OSM 源使用 XYZ 模式,该模式通常用作图块服务的 URL 模式。有没有办法告诉地理服务器它应该创建具有 XYZ 结构的图块?
我已经从 Geoserver 添加了 WMS 层以显示在 Leaflet 上。但是,我想将地图自动缩放并居中到特定要素或多边形。有人对此有任何想法吗?所附图片是我想做的。
这是我的代码:
\n\n <div style="width:400px; height:400px" id="map"></div>\n <script>\n var osm = new L.TileLayer(\'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\',\n { attribution: \'Map data \xc2\xa9 <a href="http://openstreetmap.org">OpenStreetMap</a> contributors\' }\n );\n // Mapquest layer\n var mapquest = new L.TileLayer(\'http://otile{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png\', {\n maxZoom: 18,\n minZoom: 5,\n attribution: "\xc2\xa9<a href=\'http://openstreetmap.org/\' target=\'_blank\'>OpenStreetMap</a> contributors, Tiles Courtesy of <a href=\'http://open.mapquest.com\' target=\'_blank\'>MapQuest</a>",\n subdomains: [\'1\',\'2\',\'3\',\'4\']\n });\n //create map object\n var map = new L.Map(\'map\', {\n center: [12.565679, 104.990963],\n zoom: 8,\n layers: [mapquest]\n });\n\n var myLayer = new L.GeoJSON().addTo(map); \n\n …Run Code Online (Sandbox Code Playgroud) 我在 localhost:80 上使用 apache Web 服务器,并在 localhost:8080 上使用 Tomcat 提供的 Geoserver
我最近在 apache 上安装了 SSL 证书,它工作正常,除了我收到消息说我有不安全的内容,我认为它们是 GeoServer 层。所以现在我正在尝试为 GeoServer 启用 SSL 并拥有 Openlayers 内容,例如 htis https://example.org:8080/geoserver,但仍然不确定最好的方法是什么。
我有一个geoserver实例,其中包含我们的数据。通过 GET 请求可以正常工作并返回预期结果。但遗憾的是它不适用于 POST。
准确地说,这是对带有 GET 的 Capabilities 的请求,它返回一个有效的 GetCapabilities-Response:
http://myserver:8080/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities
Run Code Online (Sandbox Code Playgroud)
我用 wget 对此进行了测试,因此命令如下所示:
wget -O wfs 'http://myserver:8080/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities'
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用 POST 的 Capabilities-request。我创建一个包含以下内容的请求(命名请求)文件:
<GetCapabilities
service="WFS"
xmlns="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"/>
Run Code Online (Sandbox Code Playgroud)
我使用以下 wget 对 Geoserver 运行:
wget -O wfs --post-file=request 'http://myserver:8080/geoserver/wfs'
Run Code Online (Sandbox Code Playgroud)
但现在我得到一个 OWS-Exception:
<ows:ExceptionReport xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0.0" xsi:schemaLocation="http://www.opengis.net/ows/1.1 http://moa:8080/geoserver/schemas/ows/1.1.0/owsAll.xsd">
<ows:Exception exceptionCode="MissingParameterValue" locator="request">
<ows:ExceptionText>Could not determine geoserver request from http request org.geoserver.platform.AdvancedDispatchFilter$AdvancedDispatchHttpRequest@1e5c2cc</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>
Run Code Online (Sandbox Code Playgroud)
这看起来好像没有发送 POST-body 或者它被忽略了。我在这里做错了什么?
编辑:好的,我解决了这个问题。问题是 Geoserver 需要一个 Content-Type-Header 来发布 XML 文件。所以正确的请求如下所示:
wget -O wfs --header='Content-Type: text/xml' --post-file=request.xml 'http://myserver:8080/geoserver/wfs' …Run Code Online (Sandbox Code Playgroud) 我使用OpenLayers3创建了一个地图.我可以使用以下代码成功缩放到地图上的图层:
map.getView().fit(extent, map.getSize());
Run Code Online (Sandbox Code Playgroud)
然而,我喜欢用动画方式类似的东西.
我知道以下动画:
ol.animation.pan
ol.animation.zoom
Run Code Online (Sandbox Code Playgroud)
通过使用这些我无法缩放到一个图层,使用ol.animation.pan我只能平移到一个点(而不是一个边界框)并使用ol.animation.zoom我可以缩放到一个分辨率(而不是一个分辨率)外接矩形框).所以我正在寻找的是一个动画.fit,所以我可以缩放动画到一定程度.
关于如何实现这一点的任何建议将不胜感激:)
我在 Ubuntu 主机上的 docker 容器上有一个 Geoserver 实例。目前,对 Geoserver 容器的请求通过主机的 Apache Web 服务器转发。我正在从 JavaScript Web 应用程序发出这些请求。
我想保护 Geoserver 上的一些图层的安全。
我的问题:如何提供正确的凭据(大概是用户名和密码)来从我的 javascript 应用程序访问这些层,而不在源代码中以普通视图显示它们?
GeoServer 正在提供地图框矢量切片图层(大约 500K 个特征点和多行字符串)。
我使用 mapbox-gl-js 在客户端绘制图层,并使用表达式来更改某些样式(例如线条颜色)
我有一个外部 API,它将为我提供每个资产的属性列表
[{ id: 123, prop1: 45, prop2: 78 }, ...]
现在,我想将这些属性分配给相应的功能,以便我能够编写基于“prop1”的表达式来操作样式。
表达:
[ 'let', 'load_value', ['to-number', ['get', 'prop1']],
[
'case',
[ 'all', ['>=', ['var', 'load_value'], 0], ['<', ['var', 'load_value'], 50] ], 'gray',
[ 'all', ['>=', ['var', 'load_value'], 50], ['<', ['var', 'load_value'], 70] ], 'yellow',
['>=', ['var', 'load_value'], 70], 'red',
'gray'
]
];
Run Code Online (Sandbox Code Playgroud)
我尝试过使用 setFeatureState 方法并且它有效。问题是,这样做后地图速度非常慢。我相信这是因为我需要为 500K 个特征设置特征状态。
设置功能状态:
data.forEach((datum) => {
this.map.setFeatureState({
source: 'geoserver-source',
sourceLayer: 'mvt-layer',
id: datum.id
}, {
prop1: datum.prop1 …Run Code Online (Sandbox Code Playgroud)