This is going to be a massive post but it will likely explain why your P3A had the correct altitudes, I assume it still reads its elevation Above Ground Level and not Sea Level as our Phantom 4s do. Also, I have looked again at the EXIF data and the altitude is not negative, but it is stored as Below Sea Level and that is why Pix4D is assigning it a negative elevation, strange. In an EXIF editor you can manually change this value to Above Ground Level and Pix4D then reads it correctly but this can be cumbersome to do for hundreds of images. Anyways, here's a response from Pix4D regarding negative elevation values from a Phantom 4:
Pix4D support wrote:
The images that are saved on the drone's SD card are geotagged by DJI. Regarding the Lat./Log. coordinates, the drone's GPS saves reliable information in the image EXIF. There is no problem from that side. However regarding the altitude there might be some inaccuracies depending on the location when you are mapping.
According the latest news on our side that refer to the firmware v.1.7.0.90 and v1.7.0060 for the Inspire I and Phantom 3 Pro respectively, DJI now measures the absolute elevation above sea level using EGM 96 as the reference. This also applies to the Phantom 4's firmware. DJI used to record the elevation above ground level but this is no longer the case. However the vertical coordinate is still not fully reliable. Indeed, we made testing in our office here and we found that the vertical coordinate is off by several meters that can reach an error of 100 meters. Some users noticed the same.
Note that this is just an offset meaning that the within the model, the accuracy is not affected, only the absolute location.
DJI released on April 7th new drone firmware, but as far as we know, the issue remains.
Therefore our developers suspect something wrong in the DJI EXIF regarding the vertical coordinates. As a consequence, we always recommend to process with ground control points (GCPs) in order to fix these uncertainties.
About using GCPs:
Using GCPs
If you do have GCPs, you could get for instance 5 points from a Web Map Service server over your area (e.g. Daft Logic):
How to obtain the georeference using 2D or 3D GCPs taken from a Web Map Service
- Make sure to define the appropriate GCP coordinate system. The Daft Logic website takes the coordinates from Google Maps which refers to the mean sea level (MSL) egm96 to estimate the vertical coordinate.
- On the menu bar, click Project > GCP/MTP Manager... > GCP Coordinate System > Edit... > choose WGS 84.
- Then click Advanced Coordinate System > select MSL egm96.
- Then insert/import the points according: How to add / import and mark Manual Tie Points in the rayCloud
- In the field Type make sure to set Ground Control Point, and manually enter the coordinates you took from the website.
- Then on the menu bar, click Process > Reoptimize.
Regarding the negative values, it happened that the field referring to the altitude above sea level is actually called "Below Sea Level", which might be confusing. They probably made a mistake with the reference name which seems to happen time to time.
There is a DJI forum post related to this issue:
DJI Forum|Photo,exif Altitude incorrect? Possible Firmware bug?
A consequence is that when Pix4Dmapper reads the geolocation contained in the EXIF, the software is misled and interpret "below" as a negative value. Our suggestions using points to fix the vertical coordinate as mentioned above will probably solve this problem.
Regards,