/* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Toolkit; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author gunjan */ public class Example extends JPanel { int originX,originY,radii; float heading,headingBug; float range; float currentLat, currentLon; BasicStroke dashed; float minRange; String mapImage,oldMapImage="/images/map/mumbai/NA.png"; int screenWidth,screenHeight; ArrayList> imageList; public Example() { try { JFrame frame = new JFrame(); screenWidth = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(); screenHeight = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight(); frame.setSize(screenWidth,screenHeight); frame.setUndecorated(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBackground(Color.black); frame.getContentPane().add(this); originX = screenWidth / 2; originY = screenHeight - 150; radii = originX - 100; heading = 90; headingBug = 0; //repaint(); imageList = createImageBuffer(oldMapImage); range = 4; minRange = 0.1f; currentLat =18.92f; currentLon = 72.780f; new UDPClient(this).start(); //addMouseListener(this); mapImage = "/images/map/NA.png"; frame.setVisible(true); }catch (Exception ex) { Logger.getLogger(Example.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String[] args) { new Example(); } public void paint(Graphics g) { try { Graphics2D g2d = (Graphics2D) g; Composite origComposite = g2d.getComposite(); NumberFormat formatter = new DecimalFormat("000"); String str = formatter.format(heading); g2d.setColor(Color.black); g2d.fillRect(0, 0, screenWidth, screenHeight); double translateY = (19.2983446067557 - currentLat) % 0.0202768935753; double translateX = (currentLon - 72.7742958068848) % 0.0300407409668; int translateImageX = (int) (700*translateX/0.0300407409668); int translateImageY = (int) (500*translateY/0.0202768935753); /* Draw the image, applying the filter */ AffineTransform transform1 = AffineTransform.getRotateInstance(Math.toRadians(-heading), originX, originY); AffineTransform origTransform = g2d.getTransform(); g2d.setTransform(transform1); for(int i=0;i<=4;i++) { ArrayList rowList = imageList.get(i); for(int j=0;j<=4;j++) { BufferedImage mapImg = rowList.get(j); //System.out.println(temp+"\t"+imageName); //BufferedImage mapImg = ImageIO.read(getClass().getResource(imageName));//loadTranslucentImage(imageName, 0.5f); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); g2d.drawImage(mapImg, originX - translateImageX+(i-2)*700, originY - translateImageY+(j-2)*500, null); g2d.setComposite(origComposite); } } g2d.setTransform(origTransform); } catch (Exception ex) { Logger.getLogger(Example.class.getName()).log(Level.SEVERE, null, ex); } } public ArrayList> createImageBuffer(String currentUrl) { String[] imageMapArray = currentUrl.split("_"); ArrayList> returnList = new ArrayList>(); BufferedImage mapImg=null; for(int i=-2;i<=2;i++) { ArrayList rowList = new ArrayList(); for(int j=-2;j<=2;j++) { if(imageMapArray.length==3) { try { int tempY = Integer.parseInt(imageMapArray[2].substring(0, imageMapArray[2].length() - 4)) + j; int tempX = Integer.parseInt(imageMapArray[1]) + i; String imageName; if (tempY <= 19 && tempY >= 0 && tempX <= 6 && tempX >= 0) { imageName = imageMapArray[0] + "_" + tempX + "_" + tempY + ".png"; } else { imageName = "/images/map/NA.png"; } //RenderedOp rImage = JAI.create("url", getClass().getResource(imageName)); //mapImg = rImage.getAsBufferedImage(); mapImg = ImageIO.read(getClass().getResource(imageName)); } catch (Exception ex) { Logger.getLogger(Example.class.getName()).log(Level.SEVERE, null, ex); } } else { try { mapImg = ImageIO.read(getClass().getResource("/images/map/NA.png")); } catch (IOException ex) { Logger.getLogger(Example.class.getName()).log(Level.SEVERE, null, ex); } } rowList.add(mapImg); } returnList.add(rowList); } return returnList; } public class ImageLoader extends Thread { public void run() { imageList = createImageBuffer(oldMapImage); } } public class UDPClient extends Thread { JPanel panel; ArrayList placeInRange; ImageLoader il; float oldLat=0, oldLon=0; public UDPClient(JPanel panel) { this.panel = panel; il = new ImageLoader(); //ilb.start(); placeInRange = new ArrayList(); } public String getImage(double lat, double lon) { double latDiff = 19.2983446067557-lat; double lonDiff = lon - 72.7742958068848; int latImageNo = (int) Math.ceil(latDiff/0.0202768935753); int lonImageNo = (int) Math.ceil(lonDiff/0.0300407409668); String mapImageName = "/images/map/mumbai_" + lonImageNo + "_" + latImageNo + ".png"; //System.out.println(mapImageName); return mapImageName; } public void run() { DatagramPacket packet; DatagramSocket socket = null; byte[] buff = new byte[256]; packet = new DatagramPacket(buff,buff.length); try { socket = new DatagramSocket(5001); socket.setSoTimeout(5000); } catch (SocketException ex) { ex.printStackTrace(); }catch (IOException ex) { ex.printStackTrace(); } while(true) { try { socket.receive(packet); } catch (IOException ex) { ex.printStackTrace(); } String received = new String(packet.getData(), 0, packet.getLength()); //System.out.println("RECEIVED: " + received); if(received.startsWith("$INS")) { String[] strArray = received.split(";"); if(strArray.length==7) { float lat=Float.parseFloat(strArray[4]); float lon = Float.parseFloat(strArray[5]); //heading = Float.parseFloat(strArray[3]); //System.out.println((oldLat-lat)*110+"\t"+(oldLon-lon)*110); currentLat=lat; currentLon = lon; mapImage = getImage(lat,lon); if(mapImage.compareToIgnoreCase(oldMapImage)!=0) { System.out.println("IN: "+System.currentTimeMillis()); oldMapImage = mapImage; il.run(); System.out.println("OUT: "+System.currentTimeMillis()); } panel.repaint(0); } } } } } }