feat: add WKB to EWKB conversion with SRID handling and integrate into MSSQL transformation

This commit is contained in:
2026-04-07 10:05:45 -05:00
parent f305ddec0b
commit aea310a3dd
3 changed files with 102 additions and 1 deletions

View File

@@ -0,0 +1,59 @@
package main
import (
"encoding/binary"
"fmt"
)
const sridFlag = 0x20000000
func wkbToEwkbWithSrid(geometry []byte, srid int) []byte {
if len(geometry) < 5 {
return geometry
}
var byteOrder binary.ByteOrder
if geometry[0] == 0 {
byteOrder = binary.BigEndian
} else {
byteOrder = binary.LittleEndian
}
wkbType := byteOrder.Uint32(geometry[1:5])
if wkbType&sridFlag != 0 {
return geometry
}
ewkbType := wkbType | sridFlag
result := make([]byte, len(geometry)+4)
result[0] = geometry[0]
byteOrder.PutUint32(result[1:5], ewkbType)
byteOrder.PutUint32(result[5:9], uint32(srid))
copy(result[9:], geometry[5:])
return result
}
func main() {
shape := []byte{
1, 3, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 217, 61, 121, 88, 168, 57, 83, 192,
60, 78, 209, 145, 92, 222, 39, 192, 232, 106, 43, 246, 151, 57, 83, 192,
60, 78, 209, 145, 92, 222, 39, 192, 232, 106, 43, 246, 151, 57, 83, 192,
174, 182, 98, 127, 217, 221, 39, 192, 217, 61, 121, 88, 168, 57, 83, 192,
174, 182, 98, 127, 217, 221, 39, 192, 217, 61, 121, 88, 168, 57, 83, 192,
60, 78, 209, 145, 92, 222, 39, 192,
}
srid := 4326
result := wkbToEwkbWithSrid(shape, srid)
fmt.Printf("WKB Original (len): %d\n", len(shape))
fmt.Printf("EWKB Result (len): %d\n", len(result))
fmt.Printf("Primeros bytes (original): %v\n", shape[:10])
fmt.Printf("Primeros bytes (resultado): %v\n", result[:10])
}