Search in sources :

Example 1 with GISGen

use of org.twak.tweed.gen.GISGen in project chordatlas by twak.

the class TweedFrame method addLayer.

private void addLayer(MouseEvent evt) {
    SimplePopup2 sp = new SimplePopup2(evt);
    if (hasGIS()) {
        sp.add("+ mesh (obj)", new Runnable() {

            @Override
            public void run() {
                new SimpleFileChooser(frame, false, "Select .obj mesh file", new File(Tweed.JME), "obj") {

                    public void heresTheFile(File obj) throws Throwable {
                        // removeMeshSources();
                        String f = tweed.makeWorkspaceRelative(obj).toString();
                        addGen(new MeshGen(f, tweed), true);
                    }
                };
            }
        });
        sp.add("+ mesh (minimesh)", new Runnable() {

            @Override
            public void run() {
                new SimpleFileChooser(frame, false, "Select minimesh index file (index.xml), or obj to convert", new File(Tweed.JME), null) {

                    @Override
                    public void heresTheFile(File f) throws Throwable {
                        if (!f.getName().equals(MiniTransform.INDEX)) {
                            MiniTransform.convertToMini(f, new File(Tweed.DATA + "/minimesh"), () -> addGen(new MiniGen(new File("minimesh"), tweed), true));
                            return;
                        }
                        // removeMeshSources();
                        addGen(new MiniGen(tweed.makeWorkspaceRelative(f.getParentFile()), tweed), true);
                    }
                };
            }
        });
        sp.add("+ panos (jpg)", new Runnable() {

            @Override
            public void run() {
                new SimpleFileChooser(frame, false, "Select one of many panoramas images in a directory, or todo.list", new File(Tweed.JME), null) {

                    public void heresTheFile(File oneOfMany) throws Throwable {
                        // removeGens( PanoGen.class );
                        addGen(new PanoGen(tweed.makeWorkspaceRelative(oneOfMany.getParentFile()), tweed, Tweed.LAT_LONG), true);
                    }
                };
            }
        });
    } else {
        sp.add("+ gis (2d obj)", new Runnable() {

            @Override
            public void run() {
                new SimpleFileChooser(frame, false, "Select .obj gis footprints", new File(Tweed.JME), "obj") {

                    public void heresTheFile(File obj) throws Throwable {
                        removeGISSources();
                        addGen(new GISGen(tweed.makeWorkspaceRelative(obj), tweed), true);
                    }
                };
            }
        });
        // sp.add( "+ gis (3d obj)", new Runnable() {
        // @Override
        // public void run() {
        // new SimpleFileChooser( frame, false, "Select .obj gis footprints", new File( Tweed.JME ), "obj" ) {
        // public void heresTheFile( File obj ) throws Throwable {
        // 
        // };
        // };
        // }
        // } );
        sp.add("+ gis (gml)", new Runnable() {

            @Override
            public void run() {
                new SimpleFileChooser(frame, false, "Select .gml gis footprints", new File(Tweed.JME), "gml") {

                    public void heresTheFile(File gml) throws Throwable {
                        removeGISSources();
                        tweed.addGML(gml, null);
                    }
                };
            }
        });
    }
    sp.show();
}
Also used : MiniGen(org.twak.tweed.gen.MiniGen) PanoGen(org.twak.tweed.gen.PanoGen) SimplePopup2(org.twak.utils.ui.SimplePopup2) GISGen(org.twak.tweed.gen.GISGen) SimpleFileChooser(org.twak.utils.ui.SimpleFileChooser) File(java.io.File) MeshGen(org.twak.tweed.gen.MeshGen)

Example 2 with GISGen

use of org.twak.tweed.gen.GISGen in project chordatlas by twak.

the class Tweed method addGML.

public void addGML(File gmlFile, String guessCRS) throws Exception {
    double[] lastOffset = new double[] { Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY };
    if (guessCRS == null)
        guessCRS = Files.readLines(gmlFile, Charset.forName("UTF-8"), new LineProcessor<String>() {

            String crs;

            @Override
            public boolean processLine(String line) throws IOException {
                Matcher m = SRS_EX.matcher(line);
                if (m.matches()) {
                    crs = m.group(1);
                    return false;
                }
                m = OFFSET_EX.matcher(line);
                if (m.matches() && lastOffset[0] == Double.POSITIVE_INFINITY) {
                    // bounds def before we see a CRS...
                    lastOffset[0] = Double.parseDouble(m.group(1));
                    lastOffset[1] = Double.parseDouble(m.group(2));
                }
                return true;
            }

            @Override
            public String getResult() {
                return crs;
            }
        });
    if (guessCRS == null || lastOffset[0] == Double.POSITIVE_INFINITY) {
        JOptionPane.showMessageDialog(frame.frame, "Failed to guess coordinate system for " + gmlFile.getName());
        return;
    }
    // if (TweedSettings.settings.trans != null) {
    // lastOffset[0] = TweedSettings.settings.trans[0];
    // lastOffset[1] = TweedSettings.settings.trans[1];
    // }
    // else
    TweedSettings.settings.trans = lastOffset;
    TweedSettings.settings.gmlCoordSystem = guessCRS;
    System.out.println("Assuming CRS " + guessCRS + " for all of " + gmlFile.getName());
    MathTransform transform = CRS.findMathTransform(CRS.decode(guessCRS), DefaultGeocentricCRS.CARTESIAN, true);
    System.out.println("Using CRS --> World space offset of " + lastOffset[0] + ", " + lastOffset[1]);
    TweedSettings.settings.toOrigin = buildOrigin(lastOffset[0], lastOffset[1], transform);
    TweedSettings.settings.fromOrigin = new Matrix4d(TweedSettings.settings.toOrigin);
    TweedSettings.settings.fromOrigin.invert();
    frame.addGen(new GISGen(makeWorkspaceRelative(gmlFile).toString(), TweedSettings.settings.toOrigin, guessCRS, this), true);
}
Also used : Matrix4d(javax.vecmath.Matrix4d) MathTransform(org.opengis.referencing.operation.MathTransform) Matcher(java.util.regex.Matcher) IOException(java.io.IOException) GISGen(org.twak.tweed.gen.GISGen)

Aggregations

GISGen (org.twak.tweed.gen.GISGen)2 File (java.io.File)1 IOException (java.io.IOException)1 Matcher (java.util.regex.Matcher)1 Matrix4d (javax.vecmath.Matrix4d)1 MathTransform (org.opengis.referencing.operation.MathTransform)1 MeshGen (org.twak.tweed.gen.MeshGen)1 MiniGen (org.twak.tweed.gen.MiniGen)1 PanoGen (org.twak.tweed.gen.PanoGen)1 SimpleFileChooser (org.twak.utils.ui.SimpleFileChooser)1 SimplePopup2 (org.twak.utils.ui.SimplePopup2)1