如何解决在Visual Studio Project和GetStyleString中导入Mapinfo TAB文件
我有一个Visual Studio桌面应用程序,需要导入MapInfo .TAB文件。我添加了GDAL Nuget程序包,经过反复的摸索和摸索,终于使它起作用。
我需要获取多边形的填充色。 GetStyleString返回一个字符串:
BRUSH(fc:#ff0000,bc:#ffffff,id:“ mapinfo-brush-2,ogr-brush-0”); PEN(w:1px,c:#d0d0d0,id:“ mapinfo-pen- 2,ogr-pen-0“)
我可以解析出fc值,但是GDAL具有StyleTable类。有没有一种方法可以将GetStyleString加载到StyleTable中,然后仔细检查以获得任何笔或笔刷值?
对于一直试图将GDAL集成到Visual Studio中的任何人,您需要了解以下一些内容以及如何使用它的示例:
Nuget包会加载所有内容,但是在应用程序启动时确实需要添加以下内容:
GdalConfiguration.ConfigureGdal()
Nuget在bin下创建一个gdal子目录。如果您打算分发该应用程序,则需要在项目中包括gdal目录及其子目录x64和x86。
下面是我需要执行的操作的简化版本。它获取具有其值的要素并将坐标转换为WGS84。也许有更好的方法可以做到这一点,但这对我有用。
Sub OpenMapinfo(ByVal File As String)
Dim F,I,FeatureCount,FieldCount As Integer
Dim FieldName,FieldValue,WKT As String
Using Driver = Ogr.GetDriverByName("MapInfo File")
Using MapInfoFile = Driver.Open(File,0)
If Not MapInfoFile Is Nothing Then
Using MapInfoLyr = MapInfoFile.GetLayerByIndex(0)
Using LayerDef = MapInfoLyr.GetLayerDefn()
FeatureCount = MapInfoLyr.GetFeatureCount(0)
FieldCount = LayerDef.GetFieldCount - 1
' Get Field names
For I = 0 To FieldCount
FieldName = LayerDef.GetFieldDefn(I).GetNameRef
Next
For F = 0 To FeatureCount
Dim MIFeature = MapInfoLyr.GetFeature(F)
If Not MIFeature Is Nothing Then
If Not MIFeature.GetGeometryRef Is Nothing Then
' Get field values
For I = 0 To FieldCount
FieldValue = MIFeature.GetFieldAsString(I)
Next
' Get whatever the coordinates are now.
Using SourceSR = MapInfoLyr.GetSpatialRef
' transform to WGS84
Using DestSR = New OSGeo.OSR.SpatialReference("")
DestSR.SetWellKnownGeogCS("WGS84")
' Transform them
Using coordTrans = New OSGeo.OSR.CoordinateTransformation(SourceSR,DestSR)
MIFeature.GetGeometryRef.Transform(coordTrans)
' Get the transformed coordinates
WKT = ""
MIFeature.GetGeometryRef.ExportToWkt(WKT)
End Using
End Using
End Using
End If
End If
Next
End Using
End Using
End If
End Using
End Using
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。