Dear all,

I have a table containing polygon and I try a distance operator which fails. (select * from mytable order by point(10,10) <-> mycol)

Postgres responds that the operator <-> between a point and a polygon is unknown.

I look in the pg_operator.h (in src/include/catalog) where I think all builtin operators are defined and found these definitions

DATA(insert OID = 517 (  "<->"       PGNSP PGUID b f 600 600 701 517     0     0     0     0     0 point_distance - - ));

DATA(insert OID = 613 (  "<->"       PGNSP PGUID b f 600 628 701     0     0    0  0   0   0 dist_pl - - ));
DATA(insert OID = 614 (  "<->"       PGNSP PGUID b f 600 601 701     0     0    0  0   0   0 dist_ps - - ));
DATA(insert OID = 615 (  "<->"       PGNSP PGUID b f 600 603 701     0     0    0  0   0   0 dist_pb - - ));
DATA(insert OID = 616 (  "<->"       PGNSP PGUID b f 601 628 701     0     0    0  0   0   0 dist_sl - - ));
DATA(insert OID = 617 (  "<->"       PGNSP PGUID b f 601 603 701     0     0    0  0   0   0 dist_sb - - ));
DATA(insert OID = 618 (  "<->"       PGNSP PGUID b f 600 602 701     0     0    0  0   0   0 dist_ppath - - ));

DATA(insert OID = 706 (  "<->"       PGNSP PGUID b f 603 603 701 706     0    0  0   0   0 box_distance - - ));
DATA(insert OID = 707 (  "<->"       PGNSP PGUID b f 602 602 701 707     0    0  0   0   0 path_distance - - ));
DATA(insert OID = 708 (  "<->"       PGNSP PGUID b f 628 628 701 708     0    0  0   0   0 line_distance - - ));
DATA(insert OID = 709 (  "<->"       PGNSP PGUID b f 601 601 701 709     0    0  0   0   0 lseg_distance - - ));
DATA(insert OID = 712 (  "<->"       PGNSP PGUID b f 604 604 701 712     0    0  0   0   0 poly_distance - - ));

DATA(insert OID = 1522 (  "<->"   PGNSP PGUID b f  600    718  701      0    0    0     0     0     0 dist_pc - - ));
DATA(insert OID = 1523 (  "<->"   PGNSP PGUID b f  718    604  701      0    0    0     0     0     0 dist_cpoly - - ));
DATA(insert OID = 1520 (  "<->"   PGNSP PGUID b f  718    718  701 1520     0    0     0     0     0 circle_distance - - ));
DATA(insert OID = 1524 (  "<->"   PGNSP PGUID b f  628    603  701      0  0 0 0 0 0 dist_lb - - ));

and there is none between a point and a polygon. (600 604) (furthermore the 628 type is defined in ptypes.h as not implemented.

I did the following test,
I patch the line
DATA(insert OID = 613 (  "<->"       PGNSP PGUID b f 600 628 701     0     0    0  0   0   0 dist_pl - - ));

replacing 628 by 604 ,
compiling and reinstalling everything including the database
and It works (I didnt verify the result)

So I am wondering , if I miss something, do I have to convert my point in a degenerated circle or polygon) or do you forget one definition ?

I have checked the source code in versions 7.4.2,7.4.3 , 8.1.0 & 8.1.4.

The version I patched is 8.1.4 and the lines above were extracted from 7.4.2

Thank you

Bernard SNYERS
Chief Architect
Ionic Software
[EMAIL PROTECTED]




Reply via email to