ThinkGeo.com    |     Documentation    |     Premium Support

Bing Imagery geolocation appears shifted in latest release

I’m not sure which exact build version this starts in, but when I use the latest ThinkGeo.MapSuite (version 10.6.*), I am seeing the map imagery appear shifted by 10-20 meters in a northwest direction from my actual GPS position (see attached screenshots). This is occurring using a BingMapOverlay on my map view. I have not yet worked back to determined which version this works correctly in.

Here’s images with my GPS position shown correct on Apple maps, and shifted in my app using a BingMapsOverlay…
Note: the satellite imagery in Apple maps is newer and shows 2 extra houses, while the Bing imagery in my app only shows one. But you should be able to correlate the GPS positions from each image by looking at other features, like the road for example.

Incorrect GPS position using BingMapOverlay:

Correct GPS position using Apple maps:

Hi Doug,

Thanks to let us know your question.

I want to double check whether your code hadn’t get changed but after upgrade package to 10.6.* the same position looks shift.

We tried in our sample but hadn’t notice the same problem, for locate where is the problem, could you please create a simple sample which can reproduce this shift with your render logic, so our developer can look into it?

And for previous version number, if we know a range for example it’s version 9 or version 10 should be also helpful.

Regards,

Ethan

Hi Doug,

Our developer check the history and found that’s because we enhanced the default scale strategy for better performance.

Please try the solution as below:

        ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(295829355.45 * 2));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(295829355.450));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(147914677.73));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(73957338.86));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(36978669.43));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(18489334.72));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(9244667.36));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(4622333.68));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(2311166.84));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(1155583.42));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(577791.71));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(288895.85));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(144447.93));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(72223.96));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(36111.98));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(18055.99));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(9028.00));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(4514.00));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(2257.00));
        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(1128.50));

I hope that helps resolve the issue for you.

Regards,

Ethan

Hi Ethan,

Sorry I have not had time to respond sooner… I’ve been tied up with other tasks. But I should be able to try your solution later today. I will let you know if it works.

Thanks!
-Doug

Hi Doug,

Thanks for let us know it, your coming feedback is welcome.

Regards,

Ethan

Ethan,

It took a little later to get to test this, but I just implemented your code and did some testing. That seems to fix it and get my GPS position showing correctly. Thanks for the help!

-Doug

Hi Doug,

Thanks for your feedback, I am glad to hear that’s helpful.

Any question please let us know.

Regards,

Ethan

Hi,

Is it possible that I have the same kind of problem with OSM ? Here is the code I’m using for the zoomlevel

public CustomOSMZoomLevelSet()
{
CustomZoomLevels.Clear();
double worldWidth = 40075016.704;
double tileWidth = 512;
for (int i = 0; i < 23; i++)
{
double resolution = worldWidth / (tileWidth * Math.Pow(2, i));
double scale = 39.3701 * 96 * resolution;
CustomZoomLevels.Add(new ZoomLevel(scale));
}
}

Thanks Judicael,
If I understand correct. you want add 3 more zoomset. Here is how we do that.

ZoomLevelSet customZoomLevelSet = new ZoomLevelSet();
foreach (var item in new ZoomLevelSet().GetZoomLevels())
	{
		customZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(item.Scale));
	}
customZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(customZoomLevelSet.CustomZoomLevels.Last().Scale / 2));
customZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(customZoomLevelSet.CustomZoomLevels.Last().Scale / 2));
customZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(customZoomLevelSet.CustomZoomLevels.Last().Scale / 2));

Thanks

Frank

In fact the problem is that the alignment is not the same between OpenStreetMapLayer and OpenStreetMapOverlay whatever the zoomlevel set we select (ZoomLevelSet(), OpenStreetMapZoomLevelSet or a custom one).
Position are correct with OpenStreetMapOverlay while it is a bit to the East with the OpenStreetMapLayer.

So I though the problem was the same as in the BingMapOverlay.

Thanks Judicael,
Could you remove the CustomZoomLevel and try with the latest beta version. We do did some adjust for the OpenStreetMapOverlay and BingMapOverlay. Let me know if the location still not accurate. We could dig into more detail.

More detail is here.

Thanks

Frank

No it doesn’t work and seems event worth, I send you a sample using the support ticket.