0

我有一个名为的表IK_TEMP,它包含名为 data, range 的列。

        String sql = "SELECT DATA, RANGE FROM IK_TEMP";



        try (Connection conn = this.connect();

             Statement stmt  = conn.createStatement();

             ResultSet rs    = stmt.executeQuery(sql)){



            // loop through the result set

            while (rs.next()) {

                System.out.println(rs.getString("DATA") +  "\t" + 

                                   rs.getBytes("RANGE"));

               fromBytes(rs.getBytes("RANGE"));

            }

RANGE 字段(二进制/BLOB)字段已使用来自 arcGIS 的二进制编码并保存在数据库中。

http://www.geopackage.org/spec120/#gpb_format

我想使用 java 解码这个 RANGE 字段。

在这里,我尝试了fromBytes 方法

public void fromBytes(byte[] bytes) {

            this.bytes = bytes;



            ByteReader reader = new ByteReader(bytes);



            // Get 2 bytes as the magic number and validate

            String magic = null;

            try {

                magic = reader.readString(2);

            } catch (UnsupportedEncodingException e) {

                throw new GeoPackageException(

                        "Unexpected GeoPackage Geometry magic number character encoding: Expected: "

                                + GeoPackageConstants.GEOMETRY_MAGIC_NUMBER);

            }

            if (!magic

                    .equals(GeoPackageConstants.GEOMETRY_MAGIC_NUMBER)) {

                throw new GeoPackageException(

                        "Unexpected GeoPackage Geometry magic number: "

                                + magic

                                + ", Expected: "

                                + GeoPackageConstants.GEOMETRY_MAGIC_NUMBER);

            }



            // Get a byte as the version and validate, value of 0 = version 1

            byte version = reader.readByte();

            if (version != GeoPackageConstants.GEOMETRY_VERSION_1) {

                throw new GeoPackageException(

                        "Unexpected GeoPackage Geometry version: "

                                + version

                                + ", Expected: "

                                + GeoPackageConstants.GEOMETRY_VERSION_1);

            }



            // Get a flags byte and then read the flag values

            byte flags = reader.readByte();

            int envelopeIndicator = readFlags(flags);

            reader.setByteOrder(byteOrder);



            // Read the 5th - 8th bytes as the srs id

            srsId = reader.readInt();



            // Read the envelope

            envelope = readEnvelope(envelopeIndicator, reader);



            // Save off where the WKB bytes start

            wkbGeometryIndex = reader.getNextByte();



            // Read the Well-Known Binary Geometry if not marked as empty

            if (!empty) {

                geometry = GeometryReader.readGeometry(reader);

            }



        }

我正在获取对象中xy坐标和几何geometry类型,但是我怎样才能从中获得经纬度

在他们在 JS reff中给出的一个例子中。

for item in (GeometryDataXYValue)!{

        let xValue = item.paths?.ofX

        let yValue = item.paths?.ofY



        //recieve x y point

        currentPoint = AGSPoint(x: xValue!, y: yValue!, spatialReference: AGSSpatialReference.webMercator()) 



        //convert to lat long by AGSSpatialReference.wgs84()



       if  let aReference = AGSGeometryEngine.projectGeometry(currentPoint!, to: AGSSpatialReference.wgs84()) as? AGSPoint {

            currentPoint = aReference

        }

    }

    var long:Double = currentPoint!.x

    var lat: Double = currentPoint!.y

    print("value long lat =  \(long , lat)")

}

但我想在 java 中进行相同的转换。

这是另一个例子

例子

4

0 回答 0