我正在尝试使用MapServer在我的谷歌地图上加载磁贴。当到达端点时,我收到以下错误:
msLoadMap():正则表达式错误。MS_DEFAULT_MAPFILE_PATTERN验证失败。
其中一个端点的示例如下:
http://localhost:8080/cgi-bin/tiler?layer=layer_392&map.layer[layer_392].class[0].style[0]=SIZE%203&mode=tile&tilemode=gmap&tile=4%2011%205
带有ScriptAlias的apache配置:
# 000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/web
LogFormat "{ \"datetime\":\"%{%Y-%m-%d}tT%{%T}t.%{msec_frac}tZ\", \"network.client.ip\":\"%a\", \"http.url_details.host\":\"%V\", \"http.url\":\"%U\", \"http.url_details.queryString\":\"%q\", \"http.method\":\"%m\", \"http.status_code\":\"%>s\", \"http.useragent\":\"%{User-agent}i\", \"http.referer\":\"%{Referer}i\" }," json
CustomLog /dev/stdout json
ScriptAlias /cgi-bin/ /var/www/bin/tile-producer/docker/cron-jobs/
<Directory /var/www>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
# Setup rewrite rules
RewriteEngine on
RewriteBase "/var/www/web"
</Directory>
</VirtualHost>映射文件:
#Generated by MapServer Generator MapWindow plug-in
#
# Start of map file
#
MAP
NAME telusdirectory
STATUS ON
EXTENT -180 -90 180 90
SHAPEPATH 'data'
IMAGETYPE png
PROJECTION
"init=epsg:4326"
END
WEB
METADATA
"wms_title" "TELUS Directory Service WMS"
"wms_onlineresource" "http://telus.magicsite.co.uk/cgi-bin/telus?"
"wms_srs" "EPSG:4326"
"tile_map_edge_buffer" "100" # 9 pixel rendering buffer
"http_max_age" "86400"
END
END
SYMBOL
NAME 'square'
TYPE VECTOR
FILLED TRUE
POINTS
0 1
0 0
1 0
1 1
0 1
END
END #SYMBOL
SYMBOL
NAME 'ellipse'
TYPE ELLIPSE
FILLED TRUE
POINTS
1 1
END
END #SYMBOL
IMAGEQUALITY 95
IMAGETYPE png
OUTPUTFORMAT
NAME png
DRIVER 'GD/PNG'
MIMETYPE 'image/png'
EXTENSION 'png'
IMAGEMODE RGBA
TRANSPARENT ON
END
#
# Start of layers definitions
#
#LAYER_DEFS
LAYER
PROJECTION
"init=epsg:4326"
END
NAME layer_392
TYPE point
STATUS ON
DATA 'layer_392.shp'
CLASS
NAME 'layer_392'
STYLE
SYMBOL 'ellipse'
SIZE 2
COLOR 73 22 109
END #STYLE
END #CLASS
TEMPLATE "xxx"
METADATA
"wms_title" "Data layer"
END
END #LAYER
#/LAYER_DEFS
END #MAP输入时命中的tiler脚本:
#!/usr/bin/perl
use CGI qw(:standard);
use URI::Escape;
use File::Basename;
use Cwd 'abs_path';
use v5.10;
my $q = CGI->new;
my @PARAMS = $q->param;
my $NEW_PARAMS;
my ($x, $y, $z) = split(' ', uri_unescape( scalar $q->param('tile') ) );
$NEW_PARAMS = "map="."/var/www/bin/tile-producer/docker/cron-jobs/mapdata"."/telus.map";
if ( @PARAMS ) {
foreach ( @PARAMS ) {
$NEW_PARAMS .= "&$_=" . uri_escape( $q->param( $_ ) );
}
}
$ENV{'QUERY_STRING'} = $NEW_PARAMS;
system("/usr/lib/cgi-bin/mapserv");mapdata文件夹的内容:

发布于 2021-09-13 20:28:24
所以在看完所有这些之后。脚本中的env变量在输入时被命中,但没有传递到CGI。我必须先在Apache上启用它,然后它才开始工作。
https://stackoverflow.com/questions/69135504
复制相似问题