繁体   English   中英

为什么 MapServer 不能识别从 ogrtindex 创建的 shp 文件?

[英]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 中的栅格。 因此,这里有一些可能的步骤:

  1. 假设您具有以下目录结构:

     - mainfolder - data - ign_2020 - PLANIGN08_TIF - PLANIGN09_TIF... - tileindex.map
  2. 为 .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
  3. 将该 gdaltindex.shp 文件加载到QGIS并查看其属性表,“位置”字段将包含那些不错的相对路径。

  4. #protip:您可以通过shptree运行该索引文件,以便 MapServer 快速找到特征/记录:

     shptree gdaltindex.shp
  5. 现在您已准备好将该图层包含在您的地图文件中。 请记住,您的地图文件位于“数据”文件夹上方的“主文件夹”中。 这是一个示例地图文件:

     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
  6. 最后,使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM