| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package com.ruoyi.test;
- import java.io.*;
- public class ShpDebug3 {
- public static void main(String[] args) throws Exception {
- String shpPath = "d:\\Web\\PlatformModel\\ruoyi-admin\\uploads\\models\\geojson\\8aa64945328e428d97923165c8b8cf31\\流域.shp";
-
- FileInputStream fis = new FileInputStream(shpPath);
- fis.skip(100); // Skip header
-
- byte[] recordHeader = new byte[8];
- fis.read(recordHeader);
-
- int contentLengthWords = readIntBE(recordHeader, 4);
- int contentLength = contentLengthWords * 2;
-
- byte[] recordContent = new byte[contentLength];
- fis.read(recordContent);
-
- System.out.println("Content Length: " + contentLength);
-
- System.out.println("\n--- Polygon Structure ---");
- System.out.println("Offset 0-3: Shape type = " + recordContent[0]);
-
- System.out.println("\n--- Bounding Box (8 bytes each) ---");
- System.out.println("Offset 4-11 (Xmin): " + readDoubleLE(recordContent, 4));
- System.out.println("Offset 12-19 (Ymin): " + readDoubleLE(recordContent, 12));
- System.out.println("Offset 20-27 (Xmax): " + readDoubleLE(recordContent, 20));
- System.out.println("Offset 28-35 (Ymax): " + readDoubleLE(recordContent, 28));
-
- System.out.println("\n--- After Bounding Box ---");
- System.out.println("Offset 36-39 (numParts): " + readIntLE(recordContent, 36));
- System.out.println("Offset 40-43 (numPoints): " + readIntLE(recordContent, 40));
-
- fis.close();
- }
-
- static int readIntBE(byte[] data, int offset) {
- return ((data[offset] & 0xFF) << 24) |
- ((data[offset + 1] & 0xFF) << 16) |
- ((data[offset + 2] & 0xFF) << 8) |
- (data[offset + 3] & 0xFF);
- }
-
- static int readIntLE(byte[] data, int offset) {
- return (data[offset] & 0xFF) |
- ((data[offset + 1] & 0xFF) << 8) |
- ((data[offset + 2] & 0xFF) << 16) |
- ((data[offset + 3] & 0xFF) << 24);
- }
-
- static double readDoubleLE(byte[] data, int offset) {
- long bits = (data[offset] & 0xFFL) |
- ((data[offset + 1] & 0xFFL) << 8) |
- ((data[offset + 2] & 0xFFL) << 16) |
- ((data[offset + 3] & 0xFFL) << 24) |
- ((data[offset + 4] & 0xFFL) << 32) |
- ((data[offset + 5] & 0xFFL) << 40) |
- ((data[offset + 6] & 0xFFL) << 48) |
- ((data[offset + 7] & 0xFFL) << 56);
- return Double.longBitsToDouble(bits);
- }
- }
|