"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني إدراج أنواع هندسة postgis وتحديدها مع Gorm؟

كيف يمكنني إدراج أنواع هندسة postgis وتحديدها مع Gorm؟

نشر في 2025-03-23
تصفح:429

How can I insert and select PostGIS geometry types with Gorm?

إدخال واختيار هندسة postgis مع gorm

لمعالجة هذه المشكلة ، يمكن للمستخدمين الاستفادة من مكتبة 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