<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic setting to the same ViewPoint yields different result in .NET Maps SDK Questions</title>
    <link>https://community.esri.com/t5/net-maps-sdk-questions/setting-to-the-same-viewpoint-yields-different/m-p/1176725#M11018</link>
    <description>&lt;P&gt;I'm trying to implement some&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;zoom-in-zoom&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;out feature in my program, for this I'm using two&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ViewPoints&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Wgs84&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;projection, one is default and other one is current, when I return to the default one it seems to "drift" by ~ 0.1 degrees(P.s the logic working as intended)&lt;/P&gt;&lt;P&gt;so on the first time&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_currentViewPoint&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;,XMin&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for example, is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;4.77075...&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;which is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;exactly&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;as&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_defaultViewPoint&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;XMin&lt;/P&gt;&lt;P&gt;but on the second time(after some panning and zooming the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;else&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;condition is met and returning to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_defaultViewPoint) the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_currentViewPoint&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;XMin&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;4.62159...&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;why this so called drift happens?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public void Click()
{
    if(_firstClick)
    {
        _firstClick = false;
        _mapService = GetMapService();
        _defaultViewPoint = _mapService.IntialViewPoint;
    }
    
    _currentViewPoint = _mapService.GetViewPoint();
    if(ArePointsEqual(_defaultViewPoint,_currentViewPoint)
    {
        if(_viewPointToZoom != null)
        {
            _mapService.SetViewPointAsync(_viewPointToZoom)
        }
    }
    else
    {
        _viewPointToZoom = _mapService.GetViewPoint();
        _mainMapService.SetViewPointAsync(_defaultViewPoint);
    }
}

public ViewPoint GetViewPoint()
{
    ViewPoint current = null;
    try
    {
        current = EsriGeoView.GetCurrentViewPoint(ViewpointType.BoundingGeomerty);
        return ProjectToWgs84(current.TargetGeometry);
    }
    catch(...)
    {
        //catch
    }
    return current;
}

private ViewPoint ProjectToWgs94(Geometry targetGeometry)
{
    try
    {       
        var geometry = GeometryEngine.Project(targetGeometry, SpatialReefernces.Wgs84);
        return new ViewPoint(geometry);
    }
    catch(...)
    {
        //catch
    }
    
}

private async Task SetViewPointAsync(ViewPoint viewpoint)
{
    //some non relevent code
    await EsriGeoView.SetViewPointAsync(viewpoint);
}


private bool AreViewPointsEqual(Viewpoint vp1, Viewpoint vp2, double tolerance = 1e-4)
{

    Envelope r1 = vp1.TargetGeometry.Extent,  r2 = vp2.TargetGeometry.Extent;
    var x1 = (r1.XMax + r1.XMin) / 2;
    var x2 = (r1.YMax + r1.YMin) / 2;
    var y1 = (r2.XMax + r2.XMin) / 2;
    var y2 = (r2.YMax + r2.YMin) / 2;

    return Math.abs(x1-x2) &amp;lt; tolerance &amp;amp;&amp;amp; Math.abs(y1-y2) &amp;lt; tolerance);

} &lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 24 May 2022 06:12:11 GMT</pubDate>
    <dc:creator>ofirrosner</dc:creator>
    <dc:date>2022-05-24T06:12:11Z</dc:date>
    <item>
      <title>setting to the same ViewPoint yields different result</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/setting-to-the-same-viewpoint-yields-different/m-p/1176725#M11018</link>
      <description>&lt;P&gt;I'm trying to implement some&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;zoom-in-zoom&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;out feature in my program, for this I'm using two&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ViewPoints&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Wgs84&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;projection, one is default and other one is current, when I return to the default one it seems to "drift" by ~ 0.1 degrees(P.s the logic working as intended)&lt;/P&gt;&lt;P&gt;so on the first time&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_currentViewPoint&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;,XMin&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for example, is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;4.77075...&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;which is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;exactly&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;as&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_defaultViewPoint&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;XMin&lt;/P&gt;&lt;P&gt;but on the second time(after some panning and zooming the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;else&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;condition is met and returning to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_defaultViewPoint) the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;_currentViewPoint&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;XMin&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;4.62159...&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;why this so called drift happens?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public void Click()
{
    if(_firstClick)
    {
        _firstClick = false;
        _mapService = GetMapService();
        _defaultViewPoint = _mapService.IntialViewPoint;
    }
    
    _currentViewPoint = _mapService.GetViewPoint();
    if(ArePointsEqual(_defaultViewPoint,_currentViewPoint)
    {
        if(_viewPointToZoom != null)
        {
            _mapService.SetViewPointAsync(_viewPointToZoom)
        }
    }
    else
    {
        _viewPointToZoom = _mapService.GetViewPoint();
        _mainMapService.SetViewPointAsync(_defaultViewPoint);
    }
}

public ViewPoint GetViewPoint()
{
    ViewPoint current = null;
    try
    {
        current = EsriGeoView.GetCurrentViewPoint(ViewpointType.BoundingGeomerty);
        return ProjectToWgs84(current.TargetGeometry);
    }
    catch(...)
    {
        //catch
    }
    return current;
}

private ViewPoint ProjectToWgs94(Geometry targetGeometry)
{
    try
    {       
        var geometry = GeometryEngine.Project(targetGeometry, SpatialReefernces.Wgs84);
        return new ViewPoint(geometry);
    }
    catch(...)
    {
        //catch
    }
    
}

private async Task SetViewPointAsync(ViewPoint viewpoint)
{
    //some non relevent code
    await EsriGeoView.SetViewPointAsync(viewpoint);
}


private bool AreViewPointsEqual(Viewpoint vp1, Viewpoint vp2, double tolerance = 1e-4)
{

    Envelope r1 = vp1.TargetGeometry.Extent,  r2 = vp2.TargetGeometry.Extent;
    var x1 = (r1.XMax + r1.XMin) / 2;
    var x2 = (r1.YMax + r1.YMin) / 2;
    var y1 = (r2.XMax + r2.XMin) / 2;
    var y2 = (r2.YMax + r2.YMin) / 2;

    return Math.abs(x1-x2) &amp;lt; tolerance &amp;amp;&amp;amp; Math.abs(y1-y2) &amp;lt; tolerance);

} &lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 24 May 2022 06:12:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/setting-to-the-same-viewpoint-yields-different/m-p/1176725#M11018</guid>
      <dc:creator>ofirrosner</dc:creator>
      <dc:date>2022-05-24T06:12:11Z</dc:date>
    </item>
  </channel>
</rss>

