[英]Why doesn't MapServer recognize shp file created from ogrtindex?
我正在尝试从 tif 金字塔创建 MapServer 图层,但始终面临相同的错误:
msDrawMap():图像处理错误。 未能绘制名为“ign_2020”的图层。; msDrawRasterLayerLow():无法访问文件。 层“ign_2020”的文件“/srv/shapes/ign_2020/PLANIGN08_TIF_LAMB93_D074/dalles.shp,0”损坏、空或丢失。 /srv/shapes/ign_2020/PLANIGN08_TIF_LAMB93_D074/dalles.sh,0:没有这样的文件或目录
这是我的/srv/shapes
目录的样子:
.
`-- ign_2020
|-- PLANIGN08_TIF_LAMB93_D074
| |-- PLANIGN08_0840_6550_L93.tab
| |-- PLANIGN08_0840_6550_L93.tif
| |-- PLANIGN08_0840_6750_L93.tab
| |-- PLANIGN08_0840_6750_L93.tif
| |-- dalles.dbf
| |-- dalles.prj
| |-- dalles.shp
| `-- dalles.shx
|-- PLANIGN09_TIF_LAMB93_D074
| |-- PLANIGN09_0840_6550_L93.tab
| |-- PLANIGN09_0840_6550_L93.tif
| |-- PLANIGN09_0840_6750_L93.tab
| |-- PLANIGN09_0840_6750_L93.tif
| |-- dalles.dbf
| |-- dalles.prj
| |-- dalles.shp
| `-- dalles.shx
|-- PLANIGN10_TIF_LAMB93_D074
| |-- PLANIGN10_0840_6550_L93.tab
| |-- PLANIGN10_0840_6550_L93.tif
| |-- PLANIGN10_0840_6750_L93.tab
| |-- PLANIGN10_0840_6750_L93.tif
| |-- dalles.dbf
| |-- dalles.prj
| |-- dalles.shp
| `-- dalles.shx
|-- tileindex.dbf
|-- tileindex.prj
|-- tileindex.shp
`-- tileindex.shx
还有许多其他目录,例如名为 PLANIGN##_TIF_LAMB93_D074 的目录,其中 ## 是 tiff 金字塔的一层。 现在,根据这个页面,我运行的命令生成每个 dalles.shp:
for d in /srv/shapes/ign_2020/PLAN*; do gdaltindex $d/dalles.shp $d/*.tif; done
我用来在 ign_2020 目录中创建主 tileindex.shp 的那个:
ogrtindex srv/shapes/ign_2020/tileindex.shp /srv/shapes/ign_2020/*/*.shp
请注意,我只使用绝对路径来避免 MapServer 使用随机相对路径。 最后我的 MapServer 版本和关联的图层文件:
MapServer version 7.4.0 OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=ICONV SUPPORTS=XMP SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=FASTCGI SUPPORTS=GEOS SUPPORTS=POINT_Z_M INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
LAYER
NAME "ign_2020"
TYPE RASTER
TILEINDEX "ign_2020/tileindex.shp"
TILEITEM "LOCATION"
END
所以 MapServer 找到了 tileindex.shp 但看起来 ogrtindex 在每个 dalles.shp 文件的路径之后添加了一个,0
,正如您在错误消息中看到的那样。 我错过了什么?
澄清一下: ogrtindex 用于索引矢量,而 gdaltindex 用于索引 MapServer 中的栅格。 因此,这里有一些可能的步骤:
假设您具有以下目录结构:
- mainfolder - data - ign_2020 - PLANIGN08_TIF - PLANIGN09_TIF... - tileindex.map
为 .tif 文件生成 tileindex。 因为您有各种包含数据的子文件夹,所以我们可以使用 gdaltindex 的--optfile开关来传递要使用的文件列表。 以下是命令(适用于 Windows 和 Unix):
cd data #windows (create a file listing all.tif in subfolders) dir /s/b *.tif > tif_list.txt #unix find. -name "*.tif" > tif_list.txt
因为我们应该始终使用相对路径,所以在文本编辑器中打开那个 'tif_list.txt',然后搜索并替换到数据的路径,而不是完整路径,例如:
D:\mainfolder\data\ign_2020\PLANIGN08_TIF\PLANIGN08_0840_6550_L93.tif D:\mainfolder\data\ign_2020\PLANIGN08_TIF\PLANIGN08_0840_6750_L93.tif D:\mainfolder\data\ign_2020\xxxxxx1\xxxx1.tif D:\mainfolder\data\ign_2020\xxxxxx1\xxxx2.tif
它列出了这个:
ign_2020\PLANIGN08_TIF\PLANIGN08_0840_6550_L93.tif ign_2020\PLANIGN08_TIF\PLANIGN08_0840_6750_L93.tif ign_2020\xxxxxx1\xxxx1.tif ign_2020\xxxxxx1\xxxx2.tif
现在您已准备好生成索引:
gdaltindex gdaltindex.shp --optfile tif_list.txt
将该 gdaltindex.shp 文件加载到QGIS并查看其属性表,“位置”字段将包含那些不错的相对路径。
#protip:您可以通过shptree运行该索引文件,以便 MapServer 快速找到特征/记录:
shptree gdaltindex.shp
现在您已准备好将该图层包含在您的地图文件中。 请记住,您的地图文件位于“数据”文件夹上方的“主文件夹”中。 这是一个示例地图文件:
MAP NAME "tileindex-map" STATUS ON SIZE 600 400 SYMBOLSET "../etc/symbols.txt" #output extents EXTENT -99.99 43.13 -86.70 49.60 UNITS DD SHAPEPATH "./data" IMAGECOLOR 255 255 255 FONTSET "../etc/fonts.txt" #output projection PROJECTION "init=epsg:4269" END # projection /* your index layer */ LAYER NAME "ortho" TYPE RASTER STATUS ON TILEITEM "LOCATION" TILEINDEX "gdaltindex.shp" #source projection PROJECTION "init=epsg:26915" END # projection END # layer END # Map File
注意 SHAPEPATH 指向数据文件夹,因此,当 MapServer 找到该索引记录时,它使用相对于地图文件位置的 SHAPEPATH/LOCATION 路径,例如
/data/ign_2020/PLANIGN08_TIF/PLANIGN08_0840_6550_L93.tif
最后,使用shp2img测试您的地图文件,以生成 map 图像,例如:
#make sure you cd into /mainfolder (that's where you mapfile lives) shp2img -m tileindex.map -o ttt.png -map_debug 3
您应该会看到 output 列出了绘制速度,并且应该在您的“主文件夹”中创建一个文件“ttt.png”
我希望这有帮助。 我今天还在https://mapserver.org/optimization/tileindex.html#long-ogrtindex-example的主 tileindex 文档中添加了所有这些(作为 2 个完整示例,带有图像,用于 ogrtindex 和 gdaltindex)
谢谢,
Jeff McKenna
GatewayGeo
@mapserving
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.