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); } }