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
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/
#! <?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>encoding=<quote>US_ASCII<quote><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><solidus><gt><lt>coord<space>x=<quote>3<quote><space>y=<quote>0<quote><solidus><gt><lt>coord<space>x=<quote>2<quote><space>y=<quote>1<quote><solidus><gt><lt>coord<space>x=<quote>1<quote><space>y=<quote>1<quote><solidus><gt><lt>coord<space>x=<quote>0<quote><space>y=<quote>0<quote><solidus><gt><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<quote><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><solidus><gt><lt>coord<space>x=<quote>3<quote><space>y=<quote>0<quote><solidus><gt><lt>coord<space>x=<quote>2<quote><space>y=<quote>1<quote><solidus><gt><lt>coord<space>x=<quote>1<quote><space>y=<quote>1<quote><solidus><gt><lt>coord<space>x=<quote>0<quote><space>y=<quote>0<quote><solidus><gt><lt><solidus>line<gt><lt><solidus>polygon<gt><lt><solidus>geometry<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,_closest_candidate_y,closest_candidate_y,_closest_base_x,closest_base_x,_closest_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__