You're passing the same coordinates as both geopoint and query.
So Google is showing Marker B for the
exact geopoint and then performing a reverse geocode on the query values and getting an
approximate location which is Marker A.
(I think)
Try passing just geo and just q values to see what Google Maps displays:
' does this display Marker B?
URI= "geo:" & lat & "," & lon
' does this display Marker A?
URI= "geo:0,0?q=" & lat & "," & lon
Reverse geocoding is never as accurate as using true coordinates.
Martin.