I have written an ArcMap v10 AddIn that reads a folder of geotagged JPEG's and creates a new feature class where each point is the geotag information from on of the JPEG's. The issue is:
The GPS information from the exif information in each JPEG is in Latitude/Longitude with Degrees, Minutes, Seconds and I have successfully converted to decimal degrees. The Altitude information in the exif properties is in feet.
I recently discovered that ArcMap is apparently interpreting the Z value I provide when setting
point.Z = zAltitude as being in the decimal degree unit instead of feet. This happens despite the fact that I have set the spatial reference information of the feature class and the IPoint to a geographic coordinate system of WGS84 and a Vertical Coordinate System of NAVD88 and a ZCoordinateUnit of feet.
Below is the code that creates the spatial reference and the code that creates the points:
Private _spatialRef As ISpatialReference3 = CreateSpatialRef() Private Function CreateSpatialRef() As ISpatialReference3 Dim COORDSYS As ESRI.ArcGIS.Geometry.esriSRGeoCSType = ESRI.ArcGIS.Geometry.esriSRGeoCSType.esriSRGeoCS_WGS1984 Dim VERTCOORDSYS As ESRI.ArcGIS.Geometry.esriSRVerticalCSType = ESRI.ArcGIS.Geometry.esriSRVerticalCSType.esriSRVertCS_NAVD1988 Dim spatialRefFact As ISpatialReferenceFactory3 = New SpatialReferenceEnvironment Dim geogCS As IGeographicCoordinateSystem2 = spatialRefFact.CreateGeographicCoordinateSystem(CInt(COORDSYS)) Dim vertCS As IVerticalCoordinateSystem = spatialRefFact.CreateVerticalCoordinateSystem(CInt(VERTCOORDSYS)) Dim spatialRef As ISpatialReference3 = CType(geogCS, ISpatialReference3) spatialRef.VerticalCoordinateSystem = vertCS Dim spatialRefResolution As ISpatialReferenceResolution = CType(geogCS, ISpatialReferenceResolution) spatialRefResolution.ConstructFromHorizon() spatialRefResolution.SetDefaultXYResolution() spatialRefResolution.SetDefaultZResolution() spatialRef.ZCoordinateUnit = CType(spatialRefFact.CreateUnit(CInt(esriSRUnitType.esriSRUnit_Foot)), LinearUnit) Return spatialRef End Function Private Function CreatePoint(ByVal xLong As Double, ByVal yLat As Double, ByVal zAlt As Double) As IPoint Dim pnt As IPoint = New ESRI.ArcGIS.Geometry.Point pnt.SpatialReference = _spatialRef pnt.PutCoords(xLong, yLat) Dim zAwre As IZAware = CType(pnt, IZAware) zAwre.ZAware = True pnt.Z = zAlt xLong = Nothing yLat = Nothing zAlt = Nothing zAwre = Nothing Return pnt End Function
Any ideas how to do this without converting my Altitude from feet to decimal degrees?
Thanks in advance for your help.