【问题标题】:using GDAL/OGR api to read vector data (shapefile)--How?使用 GDAL/OGR api 读取矢量数据(shapefile)--如何?
【发布时间】:2010-09-25 07:22:31
【问题描述】:

我正在开发一个涉及一些 gis 内容的应用程序。将有一些 .shp 文件被读取并绘制到 opengl 屏幕上。当前的opengl屏幕正在使用glOrtho()设置的正交投影,并且已经使用简单文本文件中的坐标显示地图。..

现在要从 shapefile 读取要绘制的地图。

我有以下疑惑:

  1. 如何使用 .shp 文件的 WGS84 投影(从 shapefile 的 .prj 文件读取,WKT 格式)到我现有的 glOrtho 投影中。是否需要进行任何转换?它与 glOrtho() 设置的有什么不同?基本上如何使用这些信息?

  2. 我的应用程序需要设置为我可以知道地图上某个点的确切纬度/经度。例如。如果我在 X 城市上徘徊,则可以获取其正确的纬度/经度。我知道这可以通过使用像 GDAL/OGR 这样的开源工具/api 来完成,但我搞砸了,因为这些 api 的文档没有进入我的头。 我试图找到一些示例 c++ progs 但找不到。

  3. 我已经编写了自己的逻辑来从包含点/折线/多边形(使用 C-shapelib)的 shapefile 中读取坐标并绘制在我的 opengl 屏幕上。我在 doc 中找到了一个 OGR 示例代码来阅读一个 POINTS shapefile,但没有 POLYGON shapefile。问题是这个应用程序必须非常动态,以便在加载 shapefile 时,它​​应该根据正在读取的 .shp 文件的投影正确设置 opengl 屏幕的投影。例如 WGS84、LCC、EVEREST MODIFIED...等。如何通过 OGR api 实现这一点?

请就这个问题提供您的意见。我真的很想完成这项工作,但我没有得到正确的开始..

【问题讨论】:

    标签: c++ linux opengl gdal


    【解决方案1】:
    1. Shapefile 渲染在 OpenGL 中非常简单。您可能需要“shapelib”,这是一个免费的 C 语言 shapefile 解析库(Google it)。将 GL_POINTS 用于点 shapefile, GL_LINES 用于线 shapefile,GL_LINE_LOOP 用于多边形 shapefile。将边界框坐标设置为 Ortho。

    2. 您从 .prj 文件中读取的是投影信息。 WGS84 为您提供纬度/经度坐标(球形)。 但是您的显示系统是 2D(矩形)。因此,您需要将 3D 球面坐标转换为 2D 矩形坐标(这是投影的含义)。投影类型很多,取决于地球上感兴趣的区域(记住投影会扭曲特征的区域/形状/大小)。投影类型范围从 Polyconic、Modified Everest、NAD、UTM 等,

    3. 如果您只需要 WGS84,则读取 .sh 文件的边界框坐标并将它们分配给 glOrtho。如果您有任何投影(例如:-UTM),则将边界框坐标转换为投影坐标,然后将新投影的坐标分配给 glOrtho。要将纬度/经度转换为任何投影,您可能需要“Projlib”或“GeotransEngine”等投影库。

    如需进一步说明,您可以通过 dgplinux@ y a h o o 与我联系。呸呸呸

    【讨论】:

      【解决方案2】:

      请阅读OGR API Tutorial,您可以在其中了解如何从 Shapefile 等来源读取矢量数据。接下来,查看OGR Projections Tutorial,您可以在其中了解如何使用从 OGR 源读取的有关投影和空间参考系统的信息。

      【讨论】:

        【解决方案3】:

        GDAL/OGR 拥有加载矢量文件,然后转换任何坐标所需的一切。我理解您对 GDAL 的失望,因为文档不是最好的。如果您想了解如何使用 API,请查看 GDAL 颠覆树中的 gdalinfo.c 和 ogrinfo.cpp。来源可以在https://svn.osgeo.org/gdal/trunk/gdal 看到。

        如果这没有帮助,我有两个基本示例用于解析矢量信息并进行坐标转换。它们确实很糟糕,但它们可能有助于理解重点。

        Vector Loading

        Coordinate Conversion

        最后,如果你不熟悉GIS格式,我会考虑阅读Guide Books/Map Projections下的ArcGIS介绍here。由于这些指南,我可以与专家竞争,尽管没有制图培训。另一个很好的来源是维基百科。

        如有疑问,只需选择您要坚持使用的 UTM 网格并将 UTM 用作您的坐标系。它使用 X(东)、Y(北)和 Z(海拔)。唯一的关键是选择单个 UTM 网格并确保所有坐标都使用它作为参考。 UTM 很容易测试代码,因为有很多在线指南。您还可以使用 OGR/GDAL 或其他资源找到转换代码。其他投影坐标系是值得的,可能会更好,但我会先看一下。

        最后,如果一切都失败了,看看 NGA GeoTrans。这是一个很棒的测试工具。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-15
          • 1970-01-01
          • 1970-01-01
          • 2014-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多