<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hello,<br>
    <br>
    On the RenderingContext2D class you can find several utility methods
    :<br>
    - context.switchToObjectiveCRS();<br>
    - context.switchToDisplayCRS();    <br>
    - CoordinateReferenceSystem displayCRS = context.getDisplayCRS();   
    <br>
    - AffineTransform2D trs = context.getObjectiveToDisplay();<br>
    - AffineTransform2D trs = context.getDisplayToObjective();<br>
    <br>
    The objective CRS is the map CRS, if you use this mode then it will
    work in the CRS units. The display CRS is in pixels.<br>
    <br>
    To obtain the scale factor between objective and display use the
    method : <br>
    - context.getScale();<br>
    <br>
    You can use it to resize your circles.<br>
    <br>
    After that it's up to you to combine the maths correctly to obtain
    the desired rendering ;)<br>
    <p><br>
    </p>
    <p>Johann Sorel</p>
    <p><br>
    </p>
    <p><br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 14/10/2016 05:44, Gopinath Asutosh
      wrote:<br>
    </div>
    <blockquote cite="mid:417985084.35463.1476416691022@mail.yahoo.com"
      type="cite">
      <div style="color:#000; background-color:#fff;
        font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial,
        Lucida Grande, sans-serif;font-size:16px">
        <div id="yui_3_16_0_ym19_1_1476415452600_3122">Hi Johann Sorel,</div>
        <div id="yui_3_16_0_ym19_1_1476415452600_3121">Thanks for
          responding.</div>
        <div id="yui_3_16_0_ym19_1_1476415452600_3097"><br>
        </div>
        <div id="yui_3_16_0_ym19_1_1476415452600_3098" dir="ltr">I
          adapted SquareGraphics demo to take care of screen flickering
          issue. Now every eqpt id refreshing its location in background
          and map.getCanvas().repaint() is invoked from a separate 
          thread every 15 secs to update locations of all eqpt on screen
          .<br>
        </div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_4948"><br>
        </div>
        <div id="yui_3_16_0_ym19_1_1476415452600_3312" dir="ltr">But now
          i am having another problem. The squares are not changing size
          when the map is zoomed in/out. How do I fix it? <br>
        </div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_3393"><br>
        </div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_4392">Code
          attached below:<br>
        </div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_3403">===</div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_3530">import
          java.awt.Color;<br id="yui_3_16_0_ym19_1_1476415452600_4682">
          import java.awt.Graphics2D;<br
            id="yui_3_16_0_ym19_1_1476415452600_4683">
          import java.awt.Shape;<br
            id="yui_3_16_0_ym19_1_1476415452600_4684">
          import java.awt.geom.Rectangle2D;<br
            id="yui_3_16_0_ym19_1_1476415452600_4685">
          import java.awt.geom.RoundRectangle2D;<br
            id="yui_3_16_0_ym19_1_1476415452600_4686">
          import java.sql.Connection;<br
            id="yui_3_16_0_ym19_1_1476415452600_4687">
          import java.sql.PreparedStatement;<br
            id="yui_3_16_0_ym19_1_1476415452600_4688">
          import java.sql.ResultSet;<br
            id="yui_3_16_0_ym19_1_1476415452600_4689">
          import java.sql.SQLException;<br
            id="yui_3_16_0_ym19_1_1476415452600_4690">
          import java.util.Collection;<br
            id="yui_3_16_0_ym19_1_1476415452600_4691">
          import java.util.List;<br
            id="yui_3_16_0_ym19_1_1476415452600_4692">
          import java.util.concurrent.Executors;<br
            id="yui_3_16_0_ym19_1_1476415452600_4693">
          import java.util.concurrent.ScheduledExecutorService;<br
            id="yui_3_16_0_ym19_1_1476415452600_4694">
          import java.util.concurrent.TimeUnit;<br
            id="yui_3_16_0_ym19_1_1476415452600_4695">
          import org.apache.sis.geometry.GeneralDirectPosition;<br
            id="yui_3_16_0_ym19_1_1476415452600_4696">
          import org.apache.sis.storage.DataStoreException;<br
            id="yui_3_16_0_ym19_1_1476415452600_4697">
          import
          org.geotoolkit.display.canvas.AbstractReferencedCanvas2D;<br
            id="yui_3_16_0_ym19_1_1476415452600_4698">
          <br id="yui_3_16_0_ym19_1_1476415452600_4699">
          import org.geotoolkit.display.canvas.RenderingContext;<br
            id="yui_3_16_0_ym19_1_1476415452600_4700">
          import org.geotoolkit.display.canvas.VisitFilter;<br
            id="yui_3_16_0_ym19_1_1476415452600_4701">
          import org.geotoolkit.display.primitive.SearchArea;<br
            id="yui_3_16_0_ym19_1_1476415452600_4702">
          //import org.geotoolkit.display.VisitFilter;<br
            id="yui_3_16_0_ym19_1_1476415452600_4703">
          //import org.geotoolkit.display.SearchArea;<br
            id="yui_3_16_0_ym19_1_1476415452600_4704">
          import org.geotoolkit.display2d.canvas.J2DCanvas;<br
            id="yui_3_16_0_ym19_1_1476415452600_4705">
          import org.geotoolkit.display2d.canvas.RenderingContext2D;<br
            id="yui_3_16_0_ym19_1_1476415452600_4706">
          import org.geotoolkit.display2d.primitive.GraphicJ2D;<br
            id="yui_3_16_0_ym19_1_1476415452600_4707">
          import org.geotoolkit.referencing.CRS;<br
            id="yui_3_16_0_ym19_1_1476415452600_4708">
          <br id="yui_3_16_0_ym19_1_1476415452600_4709">
          import org.opengis.display.primitive.Graphic;<br
            id="yui_3_16_0_ym19_1_1476415452600_4710">
          import org.opengis.geometry.DirectPosition;<br
            id="yui_3_16_0_ym19_1_1476415452600_4711">
          import org.opengis.geometry.Envelope;<br
            id="yui_3_16_0_ym19_1_1476415452600_4712">
          import org.opengis.geometry.MismatchedDimensionException;<br
            id="yui_3_16_0_ym19_1_1476415452600_4713">
          import org.opengis.referencing.crs.CoordinateReferenceSystem;<br
            id="yui_3_16_0_ym19_1_1476415452600_4714">
          import org.opengis.referencing.operation.MathTransform;<br
            id="yui_3_16_0_ym19_1_1476415452600_4715">
          import org.opengis.referencing.operation.TransformException;<br
            id="yui_3_16_0_ym19_1_1476415452600_4716">
          import org.opengis.util.FactoryException;<br
            id="yui_3_16_0_ym19_1_1476415452600_4717">
          import org.openide.util.Exceptions;<br
            id="yui_3_16_0_ym19_1_1476415452600_4718">
          import org.openide.util.Lookup;<br
            id="yui_3_16_0_ym19_1_1476415452600_4719">
          <br id="yui_3_16_0_ym19_1_1476415452600_4720">
          public class SquaresGraphicTorpedo implements GraphicJ2D,
          Runnable {<br id="yui_3_16_0_ym19_1_1476415452600_4721">
          <br id="yui_3_16_0_ym19_1_1476415452600_4722">
              double lat = 22.796212;<br
            id="yui_3_16_0_ym19_1_1476415452600_4723">
              double lon = 86.198888;<br
            id="yui_3_16_0_ym19_1_1476415452600_4724">
              String eqptId = null;<br
            id="yui_3_16_0_ym19_1_1476415452600_4725">
              ScheduledExecutorService executor =
          Executors.newScheduledThreadPool(1);<br
            id="yui_3_16_0_ym19_1_1476415452600_4726">
          <br id="yui_3_16_0_ym19_1_1476415452600_4727">
              public SquaresGraphicTorpedo(String eqptId) {<br
            id="yui_3_16_0_ym19_1_1476415452600_4728">
                  this.eqptId = eqptId;<br
            id="yui_3_16_0_ym19_1_1476415452600_4729">
                  int initialDelay = 0;<br
            id="yui_3_16_0_ym19_1_1476415452600_4730">
                  int period = 1;<br
            id="yui_3_16_0_ym19_1_1476415452600_4731">
                  executor.scheduleWithFixedDelay(this, initialDelay,
          period, TimeUnit.MINUTES);<br
            id="yui_3_16_0_ym19_1_1476415452600_4732">
              }<br id="yui_3_16_0_ym19_1_1476415452600_4733">
          <br id="yui_3_16_0_ym19_1_1476415452600_4734">
              @Override<br id="yui_3_16_0_ym19_1_1476415452600_4735">
              public void paint(RenderingContext2D context) {<br
            id="yui_3_16_0_ym19_1_1476415452600_4736">
          <br id="yui_3_16_0_ym19_1_1476415452600_4737">
                  final Graphics2D g2d = context.getGraphics();<br
            id="yui_3_16_0_ym19_1_1476415452600_4738">
          <br id="yui_3_16_0_ym19_1_1476415452600_4739">
          <br id="yui_3_16_0_ym19_1_1476415452600_4748">
          //        context.switchToObjectiveCRS();<br
            id="yui_3_16_0_ym19_1_1476415452600_4749">
                  try {<br id="yui_3_16_0_ym19_1_1476415452600_4750">
                      CoordinateReferenceSystem sourceCRS =
          CRS.decode("EPSG:4326");<br
            id="yui_3_16_0_ym19_1_1476415452600_4751">
                      CoordinateReferenceSystem targetCRS =
          context.getDisplayCRS();<br
            id="yui_3_16_0_ym19_1_1476415452600_4752">
                      MathTransform tr =
          CRS.findMathTransform(sourceCRS, targetCRS);<br
            id="yui_3_16_0_ym19_1_1476415452600_4753">
                      /*<br id="yui_3_16_0_ym19_1_1476415452600_4754">
                   * From this point we can convert an arbitrary amount
          of coordinates using the<br
            id="yui_3_16_0_ym19_1_1476415452600_4755">
                   * same MathTransform object. It could be in
          concurrent threads if we wish.<br
            id="yui_3_16_0_ym19_1_1476415452600_4756">
                       */<br id="yui_3_16_0_ym19_1_1476415452600_4757">
                      DirectPosition sourcePt = new
          GeneralDirectPosition(<br
            id="yui_3_16_0_ym19_1_1476415452600_4758">
                              lat, // 27°59'17"N<br
            id="yui_3_16_0_ym19_1_1476415452600_4759">
                              lon);  // 86°55'31"E<br
            id="yui_3_16_0_ym19_1_1476415452600_4760">
                      DirectPosition targetPt = tr.transform(sourcePt,
          null);<br id="yui_3_16_0_ym19_1_1476415452600_4761">
          <br id="yui_3_16_0_ym19_1_1476415452600_4762">
          //            System.out.println("ptDst.x: " +
          targetPt.getCoordinate()[0] + " ptDst.y: " +
          targetPt.getCoordinate()[1]);<br
            id="yui_3_16_0_ym19_1_1476415452600_4763">
                      RoundRectangle2D.Double rect = new
          RoundRectangle2D.Double(targetPt.getCoordinate()[0],
          targetPt.getCoordinate()[1], 20, 10, 10, 10);<br
            id="yui_3_16_0_ym19_1_1476415452600_4764">
          <br id="yui_3_16_0_ym19_1_1476415452600_4765">
                      g2d.setPaint(Color.RED);<br
            id="yui_3_16_0_ym19_1_1476415452600_4766">
                      g2d.fill(rect);<br
            id="yui_3_16_0_ym19_1_1476415452600_4767">
          <br id="yui_3_16_0_ym19_1_1476415452600_4770">
                  } catch (FactoryException |
          MismatchedDimensionException | TransformException ex) {<br
            id="yui_3_16_0_ym19_1_1476415452600_4771">
                      Exceptions.printStackTrace(ex);<br
            id="yui_3_16_0_ym19_1_1476415452600_4772">
                  }<br id="yui_3_16_0_ym19_1_1476415452600_4773">
          <br id="yui_3_16_0_ym19_1_1476415452600_4774">
              }</div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_5303"><br>
        </div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_5302">@Override<br
            id="yui_3_16_0_ym19_1_1476415452600_5265">
              public void run() {<br
            id="yui_3_16_0_ym19_1_1476415452600_5266">
          <br id="yui_3_16_0_ym19_1_1476415452600_5267">
                  getLastLocationOfTheDay();<br
            id="yui_3_16_0_ym19_1_1476415452600_5268">
          <br id="yui_3_16_0_ym19_1_1476415452600_5269">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5270">
          <br id="yui_3_16_0_ym19_1_1476415452600_5271">
              private void getLastLocationOfTheDay() {<br
            id="yui_3_16_0_ym19_1_1476415452600_5272">
                  <br id="yui_3_16_0_ym19_1_1476415452600_5273">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5274">
          <br id="yui_3_16_0_ym19_1_1476415452600_5275">
            <br id="yui_3_16_0_ym19_1_1476415452600_5276">
          <br id="yui_3_16_0_ym19_1_1476415452600_5277">
              @Override<br id="yui_3_16_0_ym19_1_1476415452600_5278">
              public List<Graphic> getGraphicAt(RenderingContext
          context, SearchArea mask, VisitFilter filter,
          List<Graphic> graphics) {<br
            id="yui_3_16_0_ym19_1_1476415452600_5279">
                  return graphics;<br
            id="yui_3_16_0_ym19_1_1476415452600_5280">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5281">
          <br id="yui_3_16_0_ym19_1_1476415452600_5282">
              @Override<br id="yui_3_16_0_ym19_1_1476415452600_5283">
              public Object getUserObject() {<br
            id="yui_3_16_0_ym19_1_1476415452600_5284">
                  return null;<br
            id="yui_3_16_0_ym19_1_1476415452600_5285">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5286">
          <br id="yui_3_16_0_ym19_1_1476415452600_5287">
              @Override<br id="yui_3_16_0_ym19_1_1476415452600_5288">
              public Envelope getEnvelope() {<br
            id="yui_3_16_0_ym19_1_1476415452600_5289">
                  return null;<br
            id="yui_3_16_0_ym19_1_1476415452600_5290">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5291">
          <br id="yui_3_16_0_ym19_1_1476415452600_5292">
              @Override<br id="yui_3_16_0_ym19_1_1476415452600_5293">
              public double getZOrderHint() {<br
            id="yui_3_16_0_ym19_1_1476415452600_5294">
                  return 0.0;<br
            id="yui_3_16_0_ym19_1_1476415452600_5295">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5296">
          <br id="yui_3_16_0_ym19_1_1476415452600_5297">
              @Override<br id="yui_3_16_0_ym19_1_1476415452600_5298">
              public void setZOrderHint(double d) {<br
            id="yui_3_16_0_ym19_1_1476415452600_5299">
          <br id="yui_3_16_0_ym19_1_1476415452600_5300">
              }<br id="yui_3_16_0_ym19_1_1476415452600_5301">
          <br>
        </div>
        <div dir="ltr" id="yui_3_16_0_ym19_1_1476415452600_3531">==<br>
        </div>
        <div id="yui_3_16_0_ym19_1_1476415452600_3049"><span
            id="yui_3_16_0_ym19_1_1476415452600_5363">Thanks and regards</span></div>
        <div id="yui_3_16_0_ym19_1_1476415452600_5406"><span
            id="yui_3_16_0_ym19_1_1476415452600_5363"><br>
          </span></div>
        <div id="yui_3_16_0_ym19_1_1476415452600_5404"><span
            id="yui_3_16_0_ym19_1_1476415452600_5363">Asutosh Gopinath</span></div>
        <div class="qtdSeparateBR"><br>
          <br>
        </div>
        <div class="yahoo_quoted" style="display: block;">
          <div style="font-family: HelveticaNeue, Helvetica Neue,
            Helvetica, Arial, Lucida Grande, sans-serif; font-size:
            16px;">
            <div style="font-family: HelveticaNeue, Helvetica Neue,
              Helvetica, Arial, Lucida Grande, sans-serif; font-size:
              16px;">
              <div dir="ltr"><font face="Arial" size="2"> On Thursday,
                  October 13, 2016 1:54 PM, johann sorel
                  <a class="moz-txt-link-rfc2396E" href="mailto:johann.sorel@geomatys.com"><johann.sorel@geomatys.com></a> wrote:<br>
                </font></div>
              <br>
              <br>
              <div class="y_msg_container">
                <div id="yiv4595509073">
                  <div> Hello,<br clear="none">
                    <br clear="none">
                    The rendering engine is stateless by default, but we
                    have some possible alternatives.<br clear="none">
                    <br clear="none">
                    Solution 1 :<br clear="none">
                    final JMap2D jmap = new JMap2D();<br clear="none">
jmap.getCanvas().setRenderingHint(GO2Hints.KEY_BEHAVIOR_MODE,
                    GO2Hints.BEHAVIOR_KEEP_TILE);<br clear="none">
                    This will ask the swing widget to replace the image
                    at the last moment when possible, it should reduce
                    the flickering.<br clear="none">
                    You can also try the 'GO2Hints.BEHAVIOR_ON_FINISH'<br
                      clear="none">
                    <br clear="none">
                    Solution 2 :<br clear="none">
                    final JMap2D jmap = new JMap2D(true);<br
                      clear="none">
                    The boolean argument is for 'statefull', the engine
                    will cache more informations and use separate
                    buffers<br clear="none">
                    for each layer. But it use more memory.<br
                      clear="none">
                    <br clear="none">
                    Solution 3 :<br clear="none">
                    There is also the solution to create a custom
                    decoration over the map,<br clear="none">
                    A demo is available in the demo-samples module,
                    package :
                    org.geotoolkit.pending.demo.rendering.customdecoration<br
                      clear="none">
                    But it require a lot more work.<br clear="none">
                    <br clear="none">
                    <br clear="none">
                    <br clear="none">
                    Johann Sorel<br clear="none">
                    <br clear="none">
                    <br clear="none">
                    <br clear="none">
                    <div class="yiv4595509073yqt8857071416"
                      id="yiv4595509073yqt87890">
                      <div class="yiv4595509073moz-cite-prefix">On
                        12/10/2016 06:51, Gopinath Asutosh wrote:<br
                          clear="none">
                      </div>
                      <blockquote type="cite">
                        <div
                          style="color:#000;background-color:#fff;font-family:HelveticaNeue,
                          Helvetica Neue, Helvetica, Arial, Lucida
                          Grande, sans-serif;font-size:16px;">
                          <div
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_2725">Hi
                            ,</div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_2831">I
                            want to show over 100 objects representing
                            vehicles moving on GIS map. The locations of
                            vehicle change every 10 secs.</div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_2939">I
                            tried to create a circle with its center
                            located on GPS coordinates obtained from
                            devices mounted on vehicles. Whenever new
                            coordinates are received I create a new
                            circle and call store.updateFeatures. This
                            plots the circles on new location but it
                            also simultaneously causes the screen to
                            flicker a lot due to which the animation
                            effect is lost.<br clear="none">
                          </div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_3021"><br
                              clear="none">
                          </div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_2937">It
                            is possible to animate any object using
                            geotoolkit without causing the screen to
                            flicker.</div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_3171"><br
                              clear="none">
                          </div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_3174">Thanks
                            and regards</div>
                          <div dir="ltr"
                            id="yiv4595509073yui_3_16_0_ym19_1_1476247003393_3175">Asutosh
                            Gopinath<br clear="none">
                          </div>
                        </div>
                        <br clear="none">
                        <fieldset
                          class="yiv4595509073mimeAttachmentHeader"></fieldset>
                        <br clear="none">
                        <pre>_______________________________________________
Geotoolkit mailing list
<a moz-do-not-send="true" rel="nofollow" shape="rect" class="yiv4595509073moz-txt-link-abbreviated" ymailto="mailto:Geotoolkit@lists.osgeo.org" target="_blank" href="mailto:Geotoolkit@lists.osgeo.org">Geotoolkit@lists.osgeo.org</a>
<a moz-do-not-send="true" rel="nofollow" shape="rect" class="yiv4595509073moz-txt-link-freetext" target="_blank" href="http://lists.osgeo.org/mailman/listinfo/geotoolkit">http://lists.osgeo.org/mailman/listinfo/geotoolkit</a></pre>
                      </blockquote>
                    </div>
                    <br clear="none">
                  </div>
                </div>
                <br>
                <div class="yqt8857071416" id="yqt15577">_______________________________________________<br
                    clear="none">
                  Geotoolkit mailing list<br clear="none">
                  <a moz-do-not-send="true" shape="rect"
                    ymailto="mailto:Geotoolkit@lists.osgeo.org"
                    href="mailto:Geotoolkit@lists.osgeo.org">Geotoolkit@lists.osgeo.org</a><br
                    clear="none">
                  <a moz-do-not-send="true" shape="rect"
                    href="http://lists.osgeo.org/mailman/listinfo/geotoolkit"
                    target="_blank">http://lists.osgeo.org/mailman/listinfo/geotoolkit</a></div>
                <br>
                <br>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>