Mapserver一种比Geoserver更好用的GIS引擎(一、技术方案探索)

近日有心对MapServer和GeoServer做一次对比,讲真,如果要想做二次开发一定是基于MapServer,如果只是简单用一下,首选肯定得是GeoServer。MapServer是基于C语言的,而且是CGI模式,很好用其它语言包装(Wrapper)。

Mapserver为什么不被大众熟知,主要还是因为它没有可视化的操作界面,其官网使用和阅读起来也很困难。

所以后续我将投入精力基于Mapserver来构建一套GIS服务引擎,当然我可能会收费,但是价格将会极低。

参考信息:

Mapserver官网

MS4W版本:4.0.5

ms4w下载地址

(Mapserver编译过程较复杂,本次将不介绍编译过程,直接采用已编译好的ms4w内的相关包,直接下载zip Archive,里面带有数据。MS4W是目前唯一一个Mapserver在Windows上维护得还可以用的已编译好版本,主要基于Apache进行CGI的实现,另外还集成了GDAL、proj等GIS专业库)

ms4w_4.0.5.zip解压后文件结构:


image

实验环境:windows10

Node.js版本:10.17.0

Node.js框架:EGG2.2.1

研究过程:

晚上研究到1.30,眼睛都快瞎了,终于找到了问题的关键。

一些关键点:

解压ms4w_4.0.5.zip

复制ms4w\Apache\cgi-bin文件夹内容到自己需要的地方

复制ms4w\apps\local-demo文件夹内容到自己需要的地方

修改local-demo/local.map的内容如下(主要是注释掉一些会报错的东西,如:SYMBOLSET、FONTSET、PROJECTION、IMAGEPATH、IMAGEURL、FONT等),:

/*
 Description:  Simple map to display on MS4W localhost ( http://127.0.0.1 )
               Also configured for WMS service, and includes GeoJSON output
 Data source:  NaturalEarth dataset, in SpatiaLite format.
 Other notes:  Open this mapfile in Notepad++, and use the color syntax file
               from https://ms4w.com/trac/wiki/Notepad++MapServerStyle
 Author:       Jeff McKenna, GatewayGeo, info@gatewaygeomatics.com
 Last updated: 2020-11-24
*/
 
MAP
NAME "local-demo"
STATUS ON
SIZE 600 400
# SYMBOLSET "../etc/symbols.txt"
EXTENT -180 -90 180 90
UNITS DD
SHAPEPATH "./data"
IMAGECOLOR 255 255 255
# FONTSET "../etc/fonts.txt"
# PROJECTION
#   "init=epsg:4326"
# END  

WEB
  IMAGEPATH "/temp/"
  IMAGEURL "/temp/"
  METADATA
    "wms_title"             "MS4W Demo WMS Server"
    "wms_abstract"          "This demonstration server was setup by GatewayGeo (https://gatewaygeomatics.com/) and is powered by MS4W (https://ms4w.com/)."      
    "wms_onlineresource"    "http://127.0.0.1/cgi-bin/mapserv.exe?map=/ms4w/apps/local-demo/local.map"
    "wms_service_onlineresource" "https://gatewaygeomatics.com/"    
    "wms_contactperson"     "Jeff McKenna" 
    "wms_contactorganization" "GatewayGeo"
    "wms_contactposition"   "President"
    "wms_contactelectronicmailaddress" "info@gatewaygeomatics.com"
    "wms_srs"               "EPSG:4326 EPSG:3857 EPSG:4269"
    "wms_getfeatureinfo_formatlist" "text/plain,text/html,application/json,application/vnd.ogc.gml,gml"
    "wms_enable_request"    "*"
  END
END

OUTPUTFORMAT
  NAME "png"
  DRIVER AGG/PNG
  MIMETYPE "image/png"
  IMAGEMODE RGB
  EXTENSION "png"
  FORMATOPTION "GAMMA=0.75"
END

OUTPUTFORMAT
  NAME "application/json"
  DRIVER "OGR/GEOJSON"
  MIMETYPE "application/json"
  FORMATOPTION "FORM=SIMPLE"
  FORMATOPTION "STORAGE=memory"
END

/* Ocean */
LAYER
  NAME "ocean"
  METADATA
    "wms_title" "Ocean"
    "wms_include_items" "all"
    "gml_include_items" "all"
    "gml_featureid"     "ogc_fid"   
  END
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "demo.db"
  DATA "ocean"
  # PROJECTION
  #   "init=epsg:4326"
  # END 
  CLASS
    NAME "Ocean"
    STYLE
      COLOR 134 204 249
    END
  END
  TEMPLATE "ttt.html"
END # layer

/* Countries */
LAYER
  NAME "countries"
  METADATA
    "wms_title"         "World Countries"
    "wms_include_items" "all"
    "gml_include_items" "all"
    "gml_featureid"     "ogc_fid"
  END
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "demo.db"
  DATA "countries"
  # PROJECTION
  #   "init=epsg:4326"
  # END
  LABELITEM "name"
  CLASS
    NAME "World Countries"
    STYLE
      COLOR 200 200 200
      OUTLINECOLOR 0 0 0
      WIDTH 0.1
    END
    LABEL
      # FONT sans
      TYPE truetype
      POSITION AUTO     
      PARTIALS FALSE
      BUFFER 5
      SIZE 5 
      COLOR 75 75 75
      MINFEATURESIZE 10
    END     
  END
  TEMPLATE "ttt.html"  
END # layer

/* Lakes */
LAYER
  NAME "lakes"
  METADATA
    "wms_title" "World Lakes"
    "wms_include_items" "all"
    "gml_include_items" "all"
    "gml_featureid"     "ogc_fid"   
  END
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "demo.db"
  DATA "lakes"
  # PROJECTION
  #   "init=epsg:4326"
  # END 
  CLASS
    NAME "Lakes"
    STYLE
      COLOR 153 204 255
    END
  END
  TEMPLATE "ttt.html"  
END # layer

/* Ocean labels */
LAYER
  NAME "ocean-labels"
  METADATA
    "wms_title" "Ocean Labels"
    "wms_include_items" "all"
    "gml_include_items" "all"
    "gml_featureid"     "ogc_fid"   
  END
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "demo.db"
  DATA "marine_region_poly"
  # PROJECTION
  #   "init=epsg:4326"
  # END
  LABELITEM "name"
  CLASS
    NAME "Ocean Labels"
    LABEL
      COLOR  75 75 75
      # FONT sans-italic
      TYPE truetype
      SIZE 5
      POSITION AUTO      
      PARTIALS FALSE
      BUFFER 5
    END
    #MAXSCALEDENOM 50000000
  END
  TEMPLATE "ttt.html"  
END # layer

/* Places */
LAYER
  NAME "places"
  METADATA
    "wms_title" "Populated Places"
    "wms_include_items" "all"
    "gml_include_items" "all"
    "gml_featureid"     "ogc_fid"   
  END
  TYPE POINT
  STATUS ON
  CONNECTIONTYPE OGR
  CONNECTION "demo.db"
  DATA "places"
  # PROJECTION
  #   "init=epsg:4326"
  # END
  LABELITEM "name"
  CLASS
    NAME "Populated Places"
    SYMBOL "square"
    SIZE 4
    COLOR 150 150 150
    LABEL
      COLOR  75 75 75
      # FONT sans
      TYPE truetype
      SIZE 5
      POSITION AUTO      
      PARTIALS FALSE
      BUFFER 5
    END
    MAXSCALEDENOM 50000000
  END
  TEMPLATE "ttt.html"  
END # layer

END # Map File

获取示例url请求参数:

启动ms4w,浏览器打开:http://localhost/

打开F12,拖动默认地图,获取到network里面的请求地址:

http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/local-demo/local.map&layers=ocean%20countries%20lakes%20ocean-labels%20places&mode=map&map_imagetype=png&mapext=-85.980848625+-78.768824625+94.319751375+41.431575375&imgext=-85.980848625+-78.768824625+94.319751375+41.431575375&map_size=600+400&imgx=300&imgy=200&imgxy=600+400

image

如果需要让坐标系转换不报错修改如下配置,FONT字体同理

配置坐标系转换参数(好像忘记这个配置是自己在.map文件里自己加还是在其它地方改了,估计是自己加吧)

CONFIG "PROJ_LIB" "D:\software\nginx-1.13.4\proj\nad"

修改请求参数,并用本地命令行执行输出到本地文件(要使用cmd来执行,不能用powershell执行,原因未知),命令如下:

.\mapserv.exe -nh QUERY_STRING="map=../mapconfig/local-demo/local.map&layers=ocean%20countries%20lakes%20ocean-labels%20places&mode=map&map_imagetype=png&mapext=75.2755005+24.56595675+120.3506505+54.61605675&imgext=75.2755005+24.56595675+120.3506505+54.61605675&map_size=600+400&imgx=300&imgy=200&imgxy=600+400" >test.png

本地输出的时候要加上-nh ,防止http请求头被写入到文件中,导致文件读不出来。

epsg:4326要小写,它是大小写敏感的。

本地磁盘生成了test.png图片,并且可以打开,说明测试成功。

经对比发现mapserver在300万数据量情况下输出png文件的速度大约为mapserver的3倍。

怎么把它成体系地用起来呢,这是个大问题。

GIS引擎开发

最近自己用Mapserver包装了一个GIS引擎作为Geoserver的替代方案,适合小微企业和个人用户,下载地址:

Mapserver-server.zip

解压密码:2234,后续我将按计划进行完善,力争做到轻量、易用、稳定、高性能、开源。

同时我将按低价提供服务,并低价出售源代码,以保证日常开销。

原文地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容