أكثر

PostGIS: ST_Within تُرجع الأحرف "t" / "f" بدلاً من القيم المنطقية "true" / "false"

PostGIS: ST_Within تُرجع الأحرف


لدي استعلام بسيط يتضمن من بين أمور أخرى:

حدد ST_Within (ST_GeomFromText ('POINT (lon lat)'، 4326)، plants.geom) AS is_within

لذلك أتوقع عمود النتيجةضمنلتكون قيمة منطقية. وهذا ما يحدث عندما أختبر هذا على QGIS. ثم أقوم بدمجه في بعض أكواد جافا باستخدام الاتصال القياسي المعروف مع فئة السائق (لا شيء غير عادي):

Class.forName (DB_CLASS) ، اتصال الاتصال = DriverManager.getConnection (DB_ADDRESS ، DB_USER_NAME ، DB_PASSWORD) ؛ if (connection! = null) {البيان البيان = connection.createStatement () ؛ سلسلة SQL =… ؛ ResultSet resultSet = statement.executeQuery (SQL) ، while (resultSet.next ()) {System.out.println (resultSet.getString (1)) ؛ // النتيجة هي أحرف وليست منطقية} resultSet.close () ؛ بيان. إغلاق () ؛ connect.close () ؛ }

الآن لسبب ما تكون النتيجة "t" بدلاً من "true" و "f" بدلاً من "false". لماذا يحدث هذا؟


يعتبر t / f مقابل true / false مجرد مشكلة في العرض. إنها قيمة منطقية داخليًا في PostgreSQL ولكن اعتمادًا على المحرك الذي تستخدمه ، تأخذ القيمة المنطقية تمثيلًا مختلفًا مع كون t / f هو الشكل الأساسي القياسي لكل من psql و pgAdmin و QGIS. في MSAccess يصبح -1.

في SQL ST_Within (…) = صحيح مقابل ST_Within = t مقابل ST_Within تعني جميعها نفس الشيء.

إذا قمت بذلك على سبيل المثال في pgAdmin ،

حدد صحيح ؛

تحصل على تي

ولكن يمكنك إرسال منطقية إلى النص ثم تظهر صواب / خطأ

حدد ST_Within ('LINESTRING (1 2، 3 4، 2 4)' :: geometry، 'POINT (3 4)' :: geometry) :: text؛

المخرجات:

خاطئة

لماذا SELECT t؟ لا يعتبر منطقي هو لغزا بالنسبة لي :) الخلط الآن :)


إذا قمت بتغيير الخط

System.out.println (resultSet.getString (1)) ،

ل

System.out.println (resultSet.getBoolean (1)) ،

ستحصل على قيمة منطقية بدلاً من سلسلة.


شاهد الفيديو: Spatial Relationships using PostGIS. PostGIS Baby Steps