<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>