Thank you Hans, I am going to give this a try, hopefully in the next week or so.
Lyndon --- In [email protected], Hans van der Maarel <[EMAIL PROTECTED]> wrote: > > Lyndon, > > > You're right, I did. It should have read that the polygons are not > > necessarily rectangular. > > Gotcha. > > This makes it a bit more difficult though... See the attached workbench > (note: it uses a Creator, so you'll need a FME 2007 beta in order to > view it). > > I used the set of coordinates you mentioned, which brings up an > interesting problem. If you define the "NE corner of a polygon" as the > "point which is closest to the NE corner of the bounding box of said > polygon", there's actually 2 points (3,0 and 2,1) with a distance of 1 > to the NE corner of the bounding box (3,1). > > Anyway, I find the NE corner of the bounding box and bring the original > polygon back to it's individual points (save the original geometry). > Then a NeighborFinder to find the original polygon point which lies the > closest to the NE corner of the bounding box. Restore the original > geometry, clean up the attributes and we're done. > > If there's more than one point with the same distance, FME picks one > arbitrarily. In this case, it seems to prefer the easternmost point. > You'll need to work with the Close Candidate List if you want to > influence this decision. Check the max distance setting in the > NeighborFinder and make sure it works for your dataset. > > Hope this helps :) > -- > Hans van der Maarel > Red Geographics > > Zevenbergsepoort 44b www.redgeographics.com > 4791 AE Klundert [EMAIL PROTECTED] > The Netherlands phone: +31-168-401035 > > > > #! <?xml version="1.0" encoding="iso-8859-1" ?> > #! <WORKSPACE > # > # > # Commandline to run this workspace: > # > # > # fme.exe find_NE_point.fmw > # > # > #! MAX_LOG_FEATURES="200" > #! SOURCE="NONE" > #! END_TCL="" > #! DESTINATION="NONE" > #! SHOW_BOOKMARKS="true" > #! GRID_VISIBLE="false" > #! GRID_HEIGHT="50" > #! SHOW_INFO_NODES="true" > #! BEGIN_PYTHON="" > #! BEGIN_TCL="" > #! VIEW_POSITION="1659 0" > #! ZOOM_SCALE="100" > #! PASSWORD="" > #! VIEW_PAGE_BREAKS="false" > #! FME_CACHED_OBJECTS_HINT="250000" > #! SHOW_ANNOTATIONS="true" > #! LOG_MAX_RECORDED_FEATURES="200" > #! END_PYTHON="" > #! FME_REPROJECTION_ENGINE="FME" > #! FME_BUILD_NUM="4236" > #! GRID_SNAPTO="false" > #! GRID_WIDTH="50" > #! SOURCE_ROUTING_DIR="" > #! LOG_FILE="" > #! DESTINATION_ROUTING_DIR="" > #! WORKSPACE_VERSION="1" > #! TITLE="" > #! IGNORE_READER_FAILURE="No" > #! ATTR_TYPE_ENCODING="SDF" > #! > > #! <DATASETS> > #! </DATASETS> > #! <DATA_TYPES> > #! </DATA_TYPES> > #! <GEOM_TYPES> > #! </GEOM_TYPES> > #! <FEATURE_TYPES> > #! </FEATURE_TYPES> > #! <GLOBAL_PARAMETERS> > #! </GLOBAL_PARAMETERS> > #! <COMMENTS> > #! </COMMENTS> > #! <CONSTANTS> > #! </CONSTANTS> > #! <BOOKMARKS> > #! </BOOKMARKS> > #! <TRANSFORMERS> > #! <TRANSFORMER > #! IDENTIFIER="0" > #! TYPE="Creator" > #! VERSION="2" > #! POSITION="387 -631" > #! ORDER="10" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="CREATED"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="GEOM" PARM_VALUE="<lt>? xml<space>version=<quote>1.0<quote><space>enco ding=<quote>US_ASCII<quote><space>standalone=<quo te>no<quote><space>? <gt><lt>geometry<space>dimension=<quote>2<q uote><gt><lt>polygon<gt><lt>line<gt>& lt;lt>coord<space>x=<quote>0<quote><space>y =<quote>0<quote><solidus><gt><lt>coord&l t;space>x=<quote>3<quote><space>y=<quote>0& lt;quote><solidus><gt><lt>coord<space>x=< ;quote>2<quote><space>y=<quote>1<quote>< solidus><gt><lt>coord<space>x=<quote>1<q uote><space>y=<quote>1<quote><solidus><g t><lt>coord<space>x=<quote>0<quote><spac e>y=<quote>0<quote><solidus><gt><lt>& lt;solidus>line<gt><lt><solidus>polygon<gt> <lt><solidus>geometry<gt>"/> > #! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="CREATOR"/> > #! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1"/> > #! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="1" > #! TYPE="BoundsExtractor" > #! VERSION="1" > #! POSITION="1181 -624" > #! ORDER="11" > #! PARMS_EDITED="false" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="OUTPUT"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="XMIN" PARM_VALUE="_xmin"/> > #! <XFORM_PARM PARM_NAME="XMAX" PARM_VALUE="_xmax"/> > #! <XFORM_PARM PARM_NAME="YMIN" PARM_VALUE="_ymin"/> > #! <XFORM_PARM PARM_NAME="ZMIN" PARM_VALUE="_zmin"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="BOUNDSEXTRACTOR"/> > #! <XFORM_PARM PARM_NAME="ZMAX" PARM_VALUE="_zmax"/> > #! <XFORM_PARM PARM_NAME="YMAX" PARM_VALUE="_ymax"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="2" > #! TYPE="2DPointReplacer" > #! VERSION="1" > #! POSITION="1731 -336" > #! ORDER="12" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="POINT"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="YVALATTR" PARM_VALUE="@Value(_ymax)"/> > #! <XFORM_PARM PARM_NAME="XVALATTR" PARM_VALUE="@Value(_xmax)"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DPOINTREPLACER"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="3" > #! TYPE="NeighborFinder" > #! VERSION="5" > #! POSITION="2941 -768" > #! ORDER="13" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="MATCHED"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_distance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_candidate_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_candidate_label_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_candidate_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_candidate_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_base_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_base_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <OUTPUT_FEAT NAME="UNMATCHED_BASE"/> > #! <FEAT_COLLAPSED COLLAPSED="1"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <OUTPUT_FEAT NAME="UNMATCHED_CANDIDATE"/> > #! <FEAT_COLLAPSED COLLAPSED="2"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="2"/> > #! <XFORM_PARM PARM_NAME="TEST_LIST_NAME" PARM_VALUE=""/> > #! <XFORM_PARM PARM_NAME="CLOSE_LIST_NAME" PARM_VALUE=""/> > #! <XFORM_PARM PARM_NAME="GROUP_BY" PARM_VALUE="_creation_instance"/> > #! <XFORM_PARM PARM_NAME="MAX" PARM_VALUE="2"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="NEIGHBORFINDER"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="4" > #! TYPE="OGCGeometryExtractor" > #! VERSION="1" > #! POSITION="1834 -1033" > #! ORDER="14" > #! PARMS_EDITED="false" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="OUTPUT"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="ATTR" PARM_VALUE="_ogcwkt"/> > #! <XFORM_PARM PARM_NAME="KIND_LONG" PARM_VALUE="Well Known Text"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="OGCGEOMETRYEXTRACTOR"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="5" > #! TYPE="Chopper" > #! VERSION="0" > #! POSITION="2429 -1092" > #! ORDER="15" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="CHOPPED"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <OUTPUT_FEAT NAME="UNTOUCHED"/> > #! <FEAT_COLLAPSED COLLAPSED="1"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="1"/> > #! <XFORM_PARM PARM_NAME="MAX" PARM_VALUE="1"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="CHOPPER"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="15" > #! TYPE="OGCGeometryReplacer" > #! VERSION="1" > #! POSITION="3519 -886" > #! ORDER="16" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="OUTPUT"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_distance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_candidate_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_candidate_label_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_candidate_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_candidate_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_base_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_base_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="ATTR" PARM_VALUE="_ogcwkt"/> > #! <XFORM_PARM PARM_NAME="KIND_LONG" PARM_VALUE="Well Known Text"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="OGCGEOMETRYREPLACER"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="18" > #! TYPE="AttributeRenamer" > #! VERSION="0" > #! POSITION="4059 -946" > #! ORDER="17" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="OUTPUT"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_distance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_candidate_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_candidate_label_angle" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_base_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_closest_base_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_xmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ymax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmin" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_zmax" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="_ogcwkt" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="NE_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="NE_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="ATTR_LIST" PARM_VALUE="NE_x,_closest_candidate_x,NE_y,_closest_candidate_y"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="ATTRIBUTERENAMER"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="17" > #! TYPE="AttributeKeeper" > #! VERSION="0" > #! POSITION="4581 -1005" > #! ORDER="18" > #! PARMS_EDITED="true" > #! ENABLED="true" > #! > > #! <OUTPUT_FEAT NAME="OUTPUT"/> > #! <FEAT_COLLAPSED COLLAPSED="0"/> > #! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="NE_x" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_ATTR ATTR_NAME="NE_y" IS_USER_CREATED="false" FEAT_INDEX="0"/> > #! <XFORM_PARM PARM_NAME="KEEP_ATTRS" PARM_VALUE="_creation_instance,NE_x,NE_y"/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="ATTRIBUTEKEEPER"/> > #! </TRANSFORMER> > #! <TRANSFORMER > #! IDENTIFIER="21" > #! TYPE="Visualizer" > #! VERSION="1" > #! POSITION="5124 -1045" > #! ORDER="19" > #! PARMS_EDITED="false" > #! ENABLED="true" > #! > > #! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/> > #! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/> > #! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="ATTRIBUTEKEEPER_OUTPUT"/> > #! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/> > #! </TRANSFORMER> > #! </TRANSFORMERS> > #! <FEAT_LINKS> > #! <FEAT_LINK > #! IDENTIFIER="9" > #! SOURCE_NODE="0" > #! TARGET_NODE="1" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="10" > #! SOURCE_NODE="1" > #! TARGET_NODE="2" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="11" > #! SOURCE_NODE="1" > #! TARGET_NODE="4" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="12" > #! SOURCE_NODE="4" > #! TARGET_NODE="5" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="13" > #! SOURCE_NODE="5" > #! TARGET_NODE="3" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 1" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="14" > #! SOURCE_NODE="2" > #! TARGET_NODE="3" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="16" > #! SOURCE_NODE="3" > #! TARGET_NODE="15" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="19" > #! SOURCE_NODE="15" > #! TARGET_NODE="18" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="20" > #! SOURCE_NODE="18" > #! TARGET_NODE="17" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! <FEAT_LINK > #! IDENTIFIER="22" > #! SOURCE_NODE="17" > #! TARGET_NODE="21" > #! SOURCE_PORT_DESC="fo 0" > #! TARGET_PORT_DESC="fi 0" > #! EXTRA_POINTS="" > #! /> > #! </FEAT_LINKS> > #! <ATTR_LINKS> > #! </ATTR_LINKS> > #! <SUBDOCUMENTS> > #! </SUBDOCUMENTS> > #! <LOOKUP_TABLES> > #! </LOOKUP_TABLES> > #! </WORKSPACE> > #! > #! START_HEADER > #! START_WB_HEADER > READER_TYPE NULL > READER_KEYWORD NULL_SOURCE > NULL_SOURCE_DATASET null > WRITER_TYPE NULL > WRITER_KEYWORD NULL_DEST > NULL_DEST_DATASET null > #! END_WB_HEADER > #! END_HEADER > > LOG_FILENAME "$(FME_MF_DIR)find_NE_point.log" > LOG_APPEND NO > LOG_MAX_FEATURES 200 > LOG_MAX_RECORDED_FEATURES 200 > FME_CACHED_OBJECTS_HINT 250000 > FME_REPROJECTION_ENGINE FME > # ------------------------------------------------------------------ ------- > > MULTI_READER_CONTINUE_ON_READER_FAILURE No > > # ------------------------------------------------------------------ ------- > > MACRO WORKSPACE_NAME find_NE_point > DEFAULT_MACRO WB_CURRENT_CONTEXT > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * CreationFactory FACTORY_NAME CREATOR CREATE_AT_END no NUMBER_TO_CREATE 1 OUTPUT FEATURE_TYPE CREATOR_CREATED @SupplyAttributes(fme_type,fme_no_geom) @SupplyAttributes(?,creation_instance,0) @RenameAttributes (_creation_instance,creation_instance) @Geometry (FROM_ENCODED_STRING,<lt>? xml<space>version=<quote>1.0<quote><space>encoding=<quote>US_ASCII<quo te><space>standalone=<quote>no<quote><space>? <gt><lt>geometry<space>dimension=<quote>2<quote><gt><lt>polygon<gt><lt >line<gt><lt>coord<space>x=<quote>0<quote><space>y=<quote>0<quote><sol idus><gt><lt>coord<space>x=<quote>3<quote><space>y=<quote>0<quote><sol idus><gt><lt>coord<space>x=<quote>2<quote><space>y=<quote>1<quote><sol idus><gt><lt>coord<space>x=<quote>1<quote><space>y=<quote>1<quote><sol idus><gt><lt>coord<space>x=<quote>0<quote><space>y=<quote>0<quote><sol idus><gt><lt><solidus>line<gt><lt><solidus>polygon<gt><lt><solidus>geo metry<gt>) > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TeeFactory FACTORY_NAME BOUNDSEXTRACTOR INPUT FEATURE_TYPE CREATOR_CREATED OUTPUT FEATURE_TYPE BOUNDSEXTRACTOR_OUTPUT @Bounds (_xmin,_xmax,_ymin,_ymax,_zmin,_zmax,GEOMETRIC) > > FACTORY_DEF * TeeFactory FACTORY_NAME "BOUNDSEXTRACTOR OUTPUT Splitter" INPUT FEATURE_TYPE BOUNDSEXTRACTOR_OUTPUT OUTPUT FEATURE_TYPE BOUNDSEXTRACTOR_OUTPUT_0 OUTPUT FEATURE_TYPE BOUNDSEXTRACTOR_OUTPUT_1 > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TeeFactory FACTORY_NAME OGCGEOMETRYEXTRACTOR INPUT FEATURE_TYPE BOUNDSEXTRACTOR_OUTPUT_1 OUTPUT FEATURE_TYPE OGCGEOMETRYEXTRACTOR_OUTPUT @OGCGeometry (to_attribute,wkt,_ogcwkt) > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TeeFactory FACTORY_NAME CHOPPER_Splitter INPUT FEATURE_TYPE OGCGEOMETRYEXTRACTOR_OUTPUT OUTPUT FEATURE_TYPE ___TOCHOP___ > FACTORY_DEF * ChoppingFactory FACTORY_NAME CHOPPER_Areas INPUT FEATURE_TYPE ___TOCHOP___ fme_type fme_area MAX_VERTICES 1 CHOP_POLYGONS OUTPUT CHOPPED FEATURE_TYPE CHOPPER_CHOPPED > FACTORY_DEF * ChoppingFactory FACTORY_NAME CHOPPER_Lines INPUT FEATURE_TYPE ___TOCHOP___ fme_type fme_line MAX_VERTICES 1 OUTPUT CHOPPED FEATURE_TYPE CHOPPER_CHOPPED > FACTORY_DEF * TeeFactory FACTORY_NAME CHOPPER_EverythingElse INPUT FEATURE_TYPE ___TOCHOP___ > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TestFactory FACTORY_NAME 2DPOINTREPLACER INPUT FEATURE_TYPE BOUNDSEXTRACTOR_OUTPUT_0 TEST &fme_type = fme_text OUTPUT PASSED FEATURE_TYPE 2DPOINTREPLACER_POINT @XValue ("@Value(_xmax)",RESET) @YValue("@Value(_ymax)") @Dimension(2) OUTPUT FAILED FEATURE_TYPE 2DPOINTREPLACER_POINT @XValue("@Value(_xmax)",RESET) @YValue("@Value(_ymax)") @Dimension(2) @GeometryType (fme_point) @SupplyAttributes(fme_type,fme_point) > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * ProximityFactory FACTORY_NAME NEIGHBORFINDER INPUT BASE FEATURE_TYPE 2DPOINTREPLACER_POINT INPUT CANDIDATE FEATURE_TYPE CHOPPER_CHOPPED GROUP_BY _creation_instance SPATIAL_MATCH CLOSEST 2 DISTANCE_ATTR _distance OUTPUT MATCHED FEATURE_TYPE NEIGHBORFINDER_MATCHED @RenameAttributes (_angle,angle,_candidate_angle,candidate_angle,_candidate_label_angle, candidate_label_angle,_closest_candidate_x,closest_candidate_x,_closes t_candidate_y,closest_candidate_y,_closest_base_x,closest_base_x,_clos est_base_y,closest_base_y) > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TeeFactory FACTORY_NAME OGCGEOMETRYREPLACER INPUT FEATURE_TYPE NEIGHBORFINDER_MATCHED OUTPUT FEATURE_TYPE OGCGEOMETRYREPLACER_OUTPUT @OGCGeometry (from_attribute,wkt,_ogcwkt) > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTERENAMER INPUT FEATURE_TYPE OGCGEOMETRYREPLACER_OUTPUT OUTPUT FEATURE_TYPE ATTRIBUTERENAMER_OUTPUT @RenameAttributes (NE_x,_closest_candidate_x,NE_y,_closest_candidate_y) > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTEKEEPER INPUT FEATURE_TYPE ATTRIBUTERENAMER_OUTPUT OUTPUT FEATURE_TYPE ATTRIBUTEKEEPER_OUTPUT @KeepAttributes (_creation_instance,NE_x,NE_y,fme_regexp_match,^fme_) > > # ------------------------------------------------------------------ ------- > > # Set the directive to add all the meta-attributes to the features. > # We do this so users see all possible information in the viewed > # features. > > READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename > # First, set up the temporary directory that will be used for > # the recordings we will be viewing (these three lines do this) > # They assume that the WORKSPACE_NAME macro has already been set > > DEFAULT_MACRO WORKSPACE_TEMP_DIR > INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} { if {[info exists env(TEMP)]} {set gVisualizerTemp $env(TEMP)} else {set gVisualizerTemp c:} ; regsub -all {[ ,]} {$(WORKSPACE_NAME)} {_} wsname; set gVisualizerTemp $gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H% M%S] ; puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp"; } ; if { [string length {}] > 0 } { set catter "" ; set comma "" ; foreach attr "" { set catter "$catter$comma&$attr" ; set comma ",_," ; } ; puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ; } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {ATTRIBUTEKEEPER_OUTPUT} _]_[expr round(rand() * 1000000)]_[clock clicks]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] > # Make the temporary directory that the FFS files will live in. > FACTORY_DEF * CreationFactory FACTORY_NAME ATTRIBUTEKEEPER_OUTPUT_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") > FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTEKEEPER_OUTPUT_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__ > # Now route all the features into the recorder, changing their > # feature type to the transformer name so that they view nicely > > FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTEKEEPER_OUTPUT_SetterUpper INPUT FEATURE_TYPE ATTRIBUTEKEEPER_OUTPUT OUTPUT FEATURE_TYPE __viewme__ > FACTORY_DEF * RecorderFactory FACTORY_NAME ATTRIBUTEKEEPER_OUTPUT_Recorder INPUT FEATURE_TYPE __viewme__ @FeatureType(ATTRIBUTEKEEPER_OUTPUT$(CATMAC)) FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH > FACTORY_DEF * CreationFactory FACTORY_NAME ATTRIBUTEKEEPER_OUTPUT_Trigger CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") > FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTEKEEPER_OUTPUT_CleanerUpper INPUT FEATURE_TYPE __nukeme__ > > # ------------------------------------------------------------------ ------- > > FACTORY_DEF * TestFactory FACTORY_NAME "Final Output Feature Type Router" INPUT FEATURE_TYPE * TEST @Value(__wb_out_feat_type__) ! = "" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value (__wb_out_feat_type__)) > # ------------------------------------------------------------------ ------- > > DEFAULT_MACRO WORKSPACE_TEMP_DIR > INCLUDE [ if {{$(WORKSPACE_TEMP_DIR)} == {}} { puts {MACRO __WB_ENABLE_VISUALIZER__ no} } else { puts {MACRO __WB_ENABLE_VISUALIZER__ *} } ] > FACTORY_DEF $(__WB_ENABLE_VISUALIZER__) CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("eval FME_Execute System \173fmeview /ownffs {$(WORKSPACE_TEMP_DIR)} $gVisualizerFilesToView & }") > FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__ > For insights into what's up at Safe Software and what's on the development horizon, visit Safe's blog at spatial-etl.blogspot.com. Safe Software has also made slides available that outline enhancements planned for FME 2007. The slides are from the "Road Ahead" presentation given on Day 2 of the FME Worldwide Users Conference. To view these slides, visit www.safe.com/2006uc. Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/fme/ <*> Your email settings: Individual Email | Traditional <*> To change settings online go to: http://groups.yahoo.com/group/fme/join (Yahoo! ID required) <*> To change settings via email: mailto:[EMAIL PROTECTED] mailto:[EMAIL PROTECTED] <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/
