问题标签 [mapserver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 如何使用 PHP 在地图服务器中查询单击的多边形?
每个人。请允许我简单介绍一下。
例如:我的地图服务器使用CGI模式。我有一个名为 的 shapefile 'us_states.shp'
,其中有一列'state_name'
。如果我编写了正确的'.map'
文件和'.html'
模板,当我单击“表单”标签中的地图图像时,我应该会得到一个美国州的特定名称。为什么会发生这种情况?因为 '.html' 模板有一个字符串:[state_name]。
现在,我做了一些改变:
- 空间数据在postgreSQL数据库中,还有一个名为
'state_name'
; - 我正在使用PHP来显示查询图。
那么,我怎样才能得到 的值'state_name'
呢?如何改变点击状态的颜色?
我的进度:
- 一个。我可以使用 postgreSQL 显示来自“.map”文件的原始地图图像,还可以显示图像中所有州的名称;
- 湾。
'QUERYMAP'
“.map”文件中已经存在一个简单的段落; - C。我将这些代码添加到我的“.php”文件中:
$point->setXY($img_x, $img_y);
$map->queryByPoint($point, 'MS_SINGLE', -1);
$image=$map->drawQuery();
但是,首先,图像的坐标不是数据库的坐标,数据库中的坐标也不是纬度或经度!我需要改造它们吗?其次,方法'queryByPoint'
无法获取状态名称,需要我使用'queryByAttributes'
吗?如何使用它?
我不知道……我真的不知道……我需要你的帮助。
php - 将查询参数传递给 mapserver 中的查询语句
我正在使用 mapserver 和 openlayers 来创建 GIS。
我正在使用 php mapscript 并希望从 html 表单传递查询的参数,以便只有满足查询的多边形在 WFS 层中突出显示。
我是地图服务器的新手,openlayers 和 php 的新手,所以在尝试完成上述操作时需要帮助。
我在我的 php mapscript 顶部看到以下内容:
我猜我可以用它在url上传递一些变量。由于我使用的是表格,因此它将$_POST
改为...对吗?
我有两个问题:
- 如何使用上面的代码将参数从 html 表单传递到 mapscript
- 然后如何将这些传递给查询语句?
希望我问的有道理
c# - 如何使用 mapscript 处理图层模板以响应 WMS GetFeatureInfo 请求
我正在尝试使用 c# mapscript 处理 GetFeaturInfo WMS 请求。在使用 mapscript 之前,我们的软件将 WMS 请求传递到托管在 IIS 上的 CGI 地图服务器。这处理了与每个查询层关联的 html 模板,并用模板中的一些标记替换了数据。
我们不能使用 mapserver cgi 实现,所以我试图通过 C# mapscript 机制使用 mapscript 重新实现这个机制。
我到目前为止的代码摘要在这里。问题在于对 processQueryTemplate 的调用会导致抛出 AccessViolation 异常。
关联的地图文件如下:
地图文件中的各种项目都被标记化(即 sql 插件位置和应用于数据的过滤器) 这通过在前一个方法中调用 ProcessLayers 来处理。这种机制在绘制地图时似乎不会造成任何问题。对 queryByPoint 的调用有效。它返回成功并且针对 sql db 运行的查询返回预期数据。
我不确定从哪里开始以及需要做什么才能从模板生成输出。我期待对 processQueryTemplate 的调用返回填充的模板。我也不太清楚 prepareQuery 应该做什么。
干杯
paste - WMS/WFS 服务器:我自己写的疯了吗?
我是一个“自己动手”的人,但我想确保我不会因为试图咬掉的东西超过我能咀嚼的东西而自取其辱。
我正在编写一个基于浏览器的地图应用程序,该应用程序需要选择在最终用户的机器上独立运行(无互联网连接)。也就是说,应用程序是某种服务器,在许多情况下,它会安装在最终用户的机器上,并且浏览器将指向某个 localhost URL 来访问它。
我将在客户端使用 MapLayers,而服务器端将有一堆特定于应用程序的自定义逻辑,例如以某些自定义方式处理地图上的点击事件,在特定时间在地图上创建各种自定义对象,等等。
对于服务器的“业务逻辑”部分,我很高兴将 paste/webob 与 python 一起使用。这是一个简单的基础架构,让我可以轻松地放入所有这些自定义逻辑。
我一直认为客户端将与两个服务器进行通信:这个粘贴/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 地图样式图块命名方案来存储和访问它们OpenLayers 所期望的)
能够为这些图块的修改版本提供服务器,其中我在本地存储的某些数据绘制在图块的顶部。例如,我可能在一个“层”上有 10000 个点,在另一层上有 10000 个多边形,当用户激活这些层时,我将提供相同的基础图块,但是当我提供这些图块时,我将渲染这些附加功能在它们之上,并且可能我会实现一个简单的缓存方案来将这些过度渲染的图块保留一段时间。
所以我的问题是:尽管我知道有现有的工具可以做这些事情(MapServer、GeoServer、TileCache 等),但我实际上觉得仅仅响应一些简单的 WMS 消息对我来说工作量较小,并且在 python 中自己在我的瓷砖上进行额外的过度绘制,确保一切都正确投影,等等。我不需要为这些覆盖层绘制花哨的宽阔街道或任何东西,只需简单的线条、图标,也许还有标签。拥有一个仅限 python 的解决方案听起来确实不错且简单。
我想如果我需要扩展以支持更多的 WMS/WFS 协议,或者进行更高级的过度绘制,我可以在那个时候插入 MapServer/GeoServer。
这里有我没有考虑的陷阱吗?
android - 如何在 Android 上使用地图服务器
我可以在 Android 上使用地图服务器吗?我想制作一个独立的应用程序,实现平铺、缩放和平移。我每次都需要动态操作 .map 文件。谁能建议我如何采取方法或如何使用 php mapscript 来调用 mapserver?
c# - WCF / WFS - ASP.NET
现在我正在使用 Mapcript / Mapserver。我想知道如何在 ASP.NET 中使用 WFS(Web 功能服务)。
我想我需要使用 WCF,对吗?有教程或框架吗?
谢谢!
load-balancing - 使用 MapServer 在 Ubuntu 服务器中进行负载平衡
我有 3 台安装和配置了 MapServer 的 Ubuntu 10.04 机器。我需要在这 3 台机器之间进行负载平衡。我发现有一些具有不同功能的第三方应用程序。我想知道是否有人有特定的偏好或遇到任何可能是开始在 MapServer 中进行负载平衡的良好起点的文档。
先感谢您!
穆克什
mapserver - 地图服务器:loadWeb():未知标识符。(C) 附近的解析错误:(第 1 行)
我是地图服务器的新手。我已经完成了示例应用程序..
我的 Html 文件是:
它在临时文件夹中生成图像。
当我单击“单击我”按钮时,它说 loadWeb(): Unknown identifier。(C) 附近的解析错误:(第 1 行)
我正在使用 MapServer 5.6.6 版
请任何人帮助我。
提前致谢。
google-maps - 使用地图服务器的 NAD83 到 WGS84
我正在向谷歌地图添加 WAC 覆盖。
地图瓦片以 NAD83 (lcc) 投影,谷歌地图为 WGS84 (mercator)。
WAC 瓦片被分解成各自的区域,如下所示:http: //map.aeroplanner.com/mapping/chart/smartchart.cfm所以有相当多的瓦片。也就是说,我目前在定位单个瓷砖时遇到问题。
世界文件似乎已正确形成,因为 ArcGIS 使用关联的世界文件正确显示切片。
当使用 LCC 投影并设置它们预期填充的纬度/经度时,构成 WAC 扇区的南北瓷砖彼此正确对齐。
http://img716.imageshack.us/img716/1742/waclcc.jpg - 在这张图片中,您可以看到 CF16 A&B 和 CF17 A&B。投影看起来工作正常,但位置错误。必须分配绝对纬度/经度,因为将它们排除在外会导致 MapServer 抛出定位错误。
这是生成上述输出的映射文件中的一段:
图层类型栅格名称“16_40_NORTH”组“wac”数据“/opt/fgs/www/htdocs/WAC/CF-16 WAC 40 North.tif”
其他类型的定位(例如 UTM)提供了不正确的投影(因为线不水平)并且类似地定位不正确。
为什么 MapServer 定位如此不正确,尽管给定了绝对值,ArcGIS 使用世界文件显示切片没有任何问题?
是不是 MapServer 的版本有问题,还是更可能是我们的 mapfile?
postgis - 在 Mapserver mapfile 中使用 WFS 和 PostGis 时发生异常
我正在尝试使用 Mapserver 生成的 GML 来创建带有 openlayers 的弹出窗口,如果数据源来自 shp 文件,则一切正常,但是,postgis 数据源会带来异常,例如“这可能是由于堆损坏,这表明HTTPFormServer.exe 或它已加载的任何 DLL 中的错误。” 另一个,如果我只是从 postgis 读取图层数据来渲染标签而不是 WFS,它也可以正常工作
谁能帮忙告诉一下发生了什么?
环境:mapserver5.6.1、postgis8.4、openlayers2.10