لمعالجة هذه المشكلة ، يمكن للمستخدمين الاستفادة من مكتبة ORB وتنفيذ طرق Scan () و Value () لتحويلها بين أنواع GO وتنسيق الثنائي المعروف (WKB) المتوقع بواسطة Gorm. إليك مثال: اكتب EWKBGEOMPOIN func (g *ewkbgeompoint) scan (واجهة الإدخال {}) خطأ { GT ، ERR: = ewkb.unmarshal (إدخال. ([] بايت)) إذا خطأ! = لا شيء { إرجاع خطأ } g = gt. (*ewkbgeompoint) العودة لا شيء } func (g ewkbgeompoint) value () (driver.value ، error) { ب: = geom.point (g) BP: = & amp ؛ b ewkbpt: = ewkb.point {point: bp.setsrid (4326)} إرجاع ewkbpt.value () }
من خلال تنفيذ هذه الطرق في بنية ، يمكن أن تعمل وظائف المسح والإدراج الآلي لـ GORM بسلاسة مع أنواع الهندسة. اكتب: المفتاح الأساسي التسلسلي للمعرف ، Geom Geometry (Point ، 4326) ليس فارغًا ) ؛ `) .error إذا خطأ! = لا شيء { إرجاع خطأ } err = gormigrate.new (db ، gormigrate.defaultoptions ، []*gormigrate.migration { { معرف: "init" ، Migrate: خطأ FUNC (TX *gorm.db) { إرجاع tx.createTable ( الجداول ... ، ).خطأ } ، } ، { ID: "Tracks_Except_geom" ، Migrate: خطأ FUNC (TX *gorm.db) { إرجاع db.automigrate (المسار {}). خطأ } ، } ، }). Migrate ()
type EWKBGeomPoint geom.Point func (g *EWKBGeomPoint) Scan(input interface{}) error { gt, err := ewkb.Unmarshal(input.([]byte)) if err != nil { return err } g = gt.(*EWKBGeomPoint) return nil } func (g EWKBGeomPoint) Value() (driver.Value, error) { b := geom.Point(g) bp := &b ewkbPt := ewkb.Point{Point: bp.SetSRID(4326)} return ewkbPt.Value() }
مع هذا الإعداد ، يمكن لـ GORM إدراج أنواع هندسة postgis وتحديدها ، مما يسمح بالاستخدام السلس للبيانات الهندسية في تطبيقات GO.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3