|
POST
|
Edit: I found the error in my code. I have to assign the replace output back to the name variable as shown below. Normally I use this in the Field Calculator and don't have to do that step, but it is required in a label expression. Just for the sake of trying it, use this code. It will do nothing to stack your labels, but it should do the word replacements without error: Function FindLabel([dist_name])
Dim name
If IsNull([dist_name]) Then
name = ""
Else
' Add as many replace expressions as you need.
' The first string in the pair must match your input exactly to be replaced.
' The order of replace statements matters.
' Words that can be part of other replaced words must come last.
name = [dist_name]
name = Replace(name, "Limited Liability Company", "LLC")
name = Replace(name, "Company", "Co")
name = Replace(name, "Beverage", "Bev")
name = Replace(name, "Distributed", "Dist")
End if
FindLabel = name
End Function If you did the edits to the fields with the field calculator you would use the Replace expression anyway, i.e.: Replace([dist_name], "Company", "Co") So that statement will work unless there is something very strange in your field that I have never encountered before (none of the characters you mentioned would be special or trigger an error). The only character that would throw an error in your company names that I know of is a double quote ("). Do you have that character in any actual company name?
... View more
08-18-2013
09:53 PM
|
0
|
0
|
3422
|
|
POST
|
Null values do matter and would cause an error, so I would have had to add a test for that. Also, the expression does not stack multiple rows. There is no label expression that will do that without using Python and a cursor, and I not totally certain even that will work. I would have to look for some code to convert to Python, since I am not a user of that language normally. So no point working out the VB script issues anymore. Something for another day and possibly another Python user, but multi-row labels have come up repeatedly on the forums and I do not think anyone has come up with a solution since the VB6 label stacker routine stopped working off the user script page (and that was with a related table, not multiple rows in a single table). Are the records that would stack related by any attributes or would they only stack due to some kind of proximity analysis? No one has done any proximity based labeling code that I have seen. Your question now goes way beyond Cartography and should be reposted on the Python forum with a much clearer description of your set up and requirements.
... View more
08-18-2013
09:17 PM
|
0
|
0
|
3422
|
|
POST
|
Hi rfairhur24 - thanks for the post reply. I tried to copy and paste the code into the expression window under the Labels tab, but I get an error message: "The expression contains an error.... Error 8 on line 35. Cannot use parentheses when calling a Sub." Also, just to be clear, the field I'm using for the labels looks something like this: [ATTACH=CONFIG]26782[/ATTACH] Thanks so much for your input! I edited the expression a little, but the error makes little sense, since there is no line 35 in my code and none of the functions I am using are Subs. So the error is probably coming from an actual field value processing thought the internal code of the Replace expression, the Split or the array. Please put a definition query on the layer to just label a single record (the one you showed) and repaste the expression. Also, what is the actual name of the field that contains the company names? How are the names stored in the field? Does it already contain the newlines like your example showed, or did you add those? What type is the field? Is it a text field and less than 256 characters or is it another field type? I am operating in the dark at this point, since I really don't know what your set up is. I really need to know the field configuration in its raw form.
... View more
08-18-2013
07:21 PM
|
0
|
0
|
3422
|
|
POST
|
I have a shapefile with a field I am using for labels. The attributes in this field are long company names. I will be publishing the contents of this map to ArcGIS Portal as a map service too, so I want to clean up my labels. First, I'd like to stack the labels. Second, I would like to truncate them by replacing common words in all these company names (eg. replace Company with "Co.", Beverage with "Bev.", Distributing with "Dist.", and so on...) Is there a single script where I can accomplish both? Thanks! Here is my suggested code assuming you have multiple company names separated by commas that you want to stack: Function FindLabel([COMPANY_NAMES])
Dim MyArray, i, names
MyArray = Split([COMPANY_NAMES], ",")
For i = 0 to UBound(MyArray)
If i = 0 Then
names = MyArray(i) ' Begin a single company.
Else
names = names & vbCrLf & MyArray(i) ' Insert a new line after every company name.
End If
Next
Replace(names, "Limited Liability Company", "LLC")
Replace(names, "Company", "Co")
Replace(names, "Beverage", "Bev")
Replace(names, "Distributed", "Dist")
FindLabel = names
End Function
... View more
08-18-2013
02:54 PM
|
0
|
0
|
3422
|
|
POST
|
Hi everyone, May u tell me how to set up rules for attribute table? Ex, my table have a field ID. I've just typed 10 characters and in the table, there aren't repeated information !!!! Thank u for your help. I don't understand what you are describing or expecting. The only unique autonumbered field is the ObjectID field. Do you expect the ID field to provide a unique autonumber? If so, the only way to set that up is with a .Net script. I don't think python will work, since I don't think it can be set up to listen for record creation events. So are you trying to set up a unique autonumbering ID field? So what information do you want to repeat as you type? Do you want the information repeated across multiple records in the same field or within the same record across related fields? Also, do you have ArcMap 10.0 or above, or ArcMap 9.3 or below?
... View more
08-17-2013
07:42 AM
|
0
|
0
|
536
|
|
POST
|
I'll go with the append. Don't! Going the Python route (reading the join tables(s) into a dictionary using a search cursor and then updating the main table via an update cursor is by far the fastest method. This is true in v10.0 and below, but is especially true in v10.1+ using ethe data access cursors. In addition to faster processing, this method is far more flexible in that allows for all sorts of error handeling and whatnot through conditional expressions. For example, say you want to get the fields "ADDRESS" and "CITY" into the main table (key field being "NAME"): lutTbl = r"C:\temp\test.gdb\lookuptable"
mainTbl = "r"C:\temp\test.gdb\maintable"
lutDict= dict([(r[0], (r[1], r[2])) for r in arcpy.da.SearchCursor(lutTbl, ["NAME","ADDRESS","CITY"])])
arcpy.AddField_managment(mainTbl, "ADDRESS", "TEXT", "", "", "75")
arcpy.AddField_managment(mainTbl, "CITY", "TEXT", "", "", "30")
updateRows = arcpy.da.UpdateCursor(mainTbl, ["NAME","ADDRESS","CITY"])
for updateRow in updateRows:
nameValue = updateRow[0]
if nameValue in lutDict:
updateRow[1] = lutDict[nameValue][0] #Address
updateRow[2] = lutDict[nameValue][1] #City
else:
print "Could not locate address/city info for " + str(nameValue)
updateRows.updateRow(updateRow)
del updateRow, updateRows There was a correction I had to make involving an unmatched bracket, which is reflected in the code in this post. I tried your code and have to admit I was wrong. The performance of the cursors and dictionary are definitely faster than a Join and the field calculator. The speed difference dramatically increases with each additional field that is updated. I was wanting to understand the dictionary key field behavior better. Does the key value have to be unique? I assume it does, or else it wouldn't be called a key. For example, what happens if there are two people named John Smith that have different addresses in the look up table? Does the Address and City value of the second John Smith record replace the values of the first John Smith record in the code you have written or do two Addresses with the John Smith key get created in the look up dictionary? I assume the second record replaces the first. The answer is important to me, because if the second record replaces the first, that would be a gotcha anytime the look up table key field was not guaranteed to be unique. It would have the same problem ArcMap has dealing with one to many and many to many joins by randomly keeping one matching record in the join table and ignoring all of the others. The only way to resolve the full multi-record relationship with just the John Smith key would then have to involve concatenating or summarizing the secondary field values, just like ArcMap must do to resolve multi-record relationships through a Summary Statistics Join. I also want code that supports multi-field matching between tables that resolves many to many relationships into one to one or many to one relationships through multi-field comparisons without having to concatenate field values in the original tables. In other words, would the dictionary key still have to be the unique concatenation of the Name and Address to preserve both unsummarized records in the look up dictionary and to match the key with the maintbl cursor to resolve the table relationship to get the correct John Smith matching unique multi-field record? Finally, assuming a multi-field concatenation was needed to preserve the full unsummarized look up table in the dictionary, how would I deal with a true one to many or many to many relationship? In other words, say the look up key had to concatenate John Smith with each address to be unique, but the main table only had John Smith in it. The output I would want would find all of the instances of John Smith in the look up table regardless of what address it is concatenated with and join all of the look up records to the main table records by creating as many duplicates of the main table record needed to produce the full set of matches in the output. How would I write code to do the match between John Smith in the main table and the concatenated keys in the look up dictionary that contained John Smith (assume John Smith is the left most portion of the look up key concatenation)?
... View more
08-16-2013
10:10 PM
|
0
|
0
|
2904
|
|
POST
|
Here is a screen shot of the results of what I have done so far. The Even Left house address points are shown as blue circles next to the full centerline network. The thickened purple lines have full address ranges assigned on each end. The Red circle points on the line ends have L_F_ADD numbers, but not L_T_ADD numbers and the Green triangle points on the line have L_T_ADD numbers, but no L_F_ADD numbers. The other end of these larger points on the line fell outside of the actual house ranges and have to be projected using a different method. Several of the cul-de-sacs could have had house numbers assigned, but were affected by the zero length line effect due to having multiple houses fall around the bulb part of the Centerline.
... View more
08-16-2013
09:04 AM
|
0
|
0
|
4617
|
|
POST
|
The only part of the set up I left out regards the Centerline Ends output before doing the Overlay Route Features step at the end. After running the The Feature Vertices to Points tool with the ENDS option on my Centerlines, I add a field called FROM_OR_TO that is 8 characters long. I calcualte this field so I can sort based on the line end position and keep track of that. For 1 based ObjectIDs like in file geodatabase tables, I calculate its value using the formula: Parser: VB Script Show Codeblock: Checked Prelogic Script Code: If [OBJECTID] <> ROUND([OBJECTID] / 2, 0) * 2 Then
Output = "From_End"
Else
Output = "To_End"
End If
FROM_OR_TO = Output That completes the steps I was outlining in the previous e-mail. Moving on to where I am now, which is working on assigning House number values to the Overlay Route Events output. After the Overlay Route Events is complete I perform a sort on it on these fields: RID MEAS HOUSE_NUMBER ORIG_OID FROM_TO One thing I want to point out about this approach that is cool is that all segment line ends that had a House number on both sides of them are in the table and sorted according to drive direction. This is true even for all such segments that had no house numbers on them. So we are ready to interpolate all segment end House numbers between the first House number on the route and the last in the table. The only post processing of segment ends will occur on the ends of the route outside of the first and last house number on the route. In the Centerline field set I already had fields named L_F_ADD, L_T_ADD, R_F_ADD, and R_T_ADD which contained my house number ranges and these are contained in the overlay output. In my table they are text fields. So I will blank these out with the Field Calculator to recreate them or create a new set of fields to hold similar values that are blank to compare them at the end. My first attempt a filling the field L_F_ADD field in for the Ends_Even_Left_Overlay was the following: Fist I have to select only the records that were the from end of the centerline segments. I also have to exclude any zero length lines that were contained in the House number data, where two more more houses fell at the same position as a line end. Typically this only occurs for addresses that fall at or beyond one of the line ends, such as Cul-de-Sacs (which will be a special case). So I use the SQL: "FROM_OR_TO" = 'From_End' AND "FROM_MEAS" <> "TO_MEAS" My first attempt to calculate the L_F_ADD (since my original set of addresses were on the Left side) was: Round(( [TO_HOUSE_NUMBER] - [FROM_HOUSE_NUMBER] ) * ( [meas] - [FROM_MEAS] ) / ( [TO_MEAS] - [FROM_MEAS] ) / 2, 0) * 2 + [FROM_HOUSE_NUMBER] This gives me the correct even house number that falls exactly at the end point if it had be a reverse geocoded point. This same formula works to get the reverse geocoded even house number for the L_T_ADD field also. However, This formula will assign the same value to two centerline segments that meet at their To and From ends. What I want is to have the house numbers separated by 2 houses at these meeting segment ends. So this has to be done as a Codeblock calculation with more advanced logic. This is what I came up with for both of the From Address fields, L_F_ADD and R_F_ADD, for both odd and even house number ranges: Parser: VB Script Show Codeblock: Checked Prelogic Script Code: Raw_House = ( [TO_HOUSE_NUMBER] - [FROM_HOUSE_NUMBER] ) * ( [meas] - [FROM_MEAS] ) / ( [TO_MEAS] - [FROM_MEAS] ) + [FROM_HOUSE_NUMBER]
Int_House = Round(( [TO_HOUSE_NUMBER] - [FROM_HOUSE_NUMBER] ) * ( [meas] - [FROM_MEAS] ) / ( [TO_MEAS] - [FROM_MEAS] ) / 2, 0) * 2 + [FROM_HOUSE_NUMBER]
If [FROM_HOUSE_NUMBER] < [TO_HOUSE_NUMBER] Then
If Int_House < Raw_House Then
Output = Int_House
Else
Output = Int_House - 2
End If
Else
If Int_House > Raw_House Then
Output = Int_House
Else
Output = Int_House + 2
End If
End If L_F_ADD = Output Here is the calculation that works for both of the To Address fields, L_T_ADD and R_T_ADD, for both odd and even house number ranges: Parser: VB Script Show Codeblock: Checked Prelogic Script Code: Raw_House = ( [TO_HOUSE_NUMBER] - [FROM_HOUSE_NUMBER] ) * ( [meas] - [FROM_MEAS] ) / ( [TO_MEAS] - [FROM_MEAS] ) + [FROM_HOUSE_NUMBER]
Int_House = Round(( [TO_HOUSE_NUMBER] - [FROM_HOUSE_NUMBER] ) * ( [meas] - [FROM_MEAS] ) / ( [TO_MEAS] - [FROM_MEAS] ) / 2, 0) * 2 + [FROM_HOUSE_NUMBER]
If [FROM_HOUSE_NUMBER] < [TO_HOUSE_NUMBER] Then
If Int_House < Raw_House Then
Output = Int_House + 2
Else
Output = Int_House
End If
Else
If Int_House > Raw_House Then
Output = Int_House - 2
Else
Output = Int_House
End If
End If L_F_ADD = Output After calculating the L_F_ADD and L_T_ADD for my Even Left Addresses (I would not calculate the Right side fields) I can get the range in a single row for each centerline segment by running the Summary Statistics tool with the following settings summary and sort field settings: Summary fields: Meas Min Meas Max L_F_ADD Max L_T_ADD Max FROM_HOUSE_NUMBER MIN FROM_HOUSE_NUMBER MAX TO_HOUSE_NUMBER MIN TO_HOUSE_NUMBER MAX Case Fields: RID ORIG_OID (Created by the Feature Vertices to Points tool from the Centerlines). If you want any other fields in the summary output for joining or validation, if they came from the Centerlines data they can be placed in the Case fields, while any fields from the house number lines has to be placed in the Summary fields. The centerlines with only one segment end between the first and last house numbers and the other end outside of the first and last house numbers will have a blank in either the MAX_L_F_ADD or the MAX_L_T_ADD fields. You can also check for any House numbers on really short segments and where house numbers failed to space apart by looking for MAX_L_F_ADD = MAX_L_T_ADD records, which will be zero length line events, and records that crossed over in the wrong direction, i.e., (MIN_FROM_HOUSE_NUMBER < MIN_TO_HOUSE_NUMBER AND MAX_L_F_ADD > MAX_L_T_ADD) OR (MIN_FROM_HOUSE_NUMBER > MIN_TO_HOUSE_NUMBER AND MAX_L_F_ADD < MAX_L_T_ADD) You can work with the summary output as a line event table to see your recreated Centerlines with even left house number ranges where both ends fell between the actual house numbers as a preview before committing them to your original centerlines. So working out Cul-de-Sacs and segments that fell outside of the actual House numbers will be for later posts.
... View more
08-16-2013
08:23 AM
|
0
|
0
|
4616
|
|
POST
|
I think I have figured out a way to get the houses on each side of the ends of the lines. Working with 4 sets: Even House Numbers on the Left Side of the Street Even House Numbers on the Right Side of the Street Odd House Numbers on the Left Side of the Street Odd House Numbers on the Right Side of the Street Here are the steps. I created 2 fields with one named EVEN_ODD and the other named LEFT_RIGHT to simplify the selection and allow sorting that ignores the actual numeric values of the House Number and the Distance field. I calculated them to be: Parser: VB Script Show Codeblock: Checked Prelogic Script Code: If [HOUSE_NUMBER] = Round( [HOUSE_NUMBER] / 2, 0) * 2 Then Output = "EVEN_HOUSE" Else Output = "ODD_HOUSE" End If EVEN_ODD = Output For the LEFT_RIGHT field I changed the Prelogic Script Code to: If [Distancec] > 0 Then Output = "LEFT_SIDE" Else Output = "RIGHT_SIDE" End If Next I selected the set of Even Houses on the Left Side of the street and exported it to a new table named Address_Even_Left using the SQL: "EVEN_ODD" = 'EVEN_HOUSE' AND "LEFT_RIGHT" = 'LEFT_SIDE' Then in ArcCatalog I Load data into the Address_Even_Left table to duplicate the records from the original Locate Features Along Route output using the SQL above to limit the records to match the criteria for that table. Then I run the Sort Tool on the Address_Even_Left with the sort set for: RID Ascending Measure Ascending House_Number Ascending. In the Sorted output I added a field called LINE_NUMBER. For tables where the first ObjectID is numbered one (1) I calculated it to be (reverse the logic if the first ObjectID is 0 for dbf tables): Parser: VB Script Show Codeblock: Checked Prelogic Script Code: If [OBJECTID] = Round( [OBJECTID] / 2 , 0) * 2 Then Output = [OBJECTID] + 1 Else Output = [OBJECTID] End If LINE_NUMBER = Output Next I run the Summary Statistics to covert the points to line events. The Summary Statistic settings are: Input Table: Address_Even_Left_Sort Output Table: Address_Even_Left_Lines Statistics Fields: ObjectID Min ObjectID Max Meas Min Meas Max Case Fields: RID LINE_NUMBER In the output from that tool I added a field called FROM_HOUSE_NUMBER and TO_HOUSE_NUMBER. I joined the MIN_OBJECTID field to the ObjectID field of the Address_Even_Left_Sort and calculate the FROM_HOUSE_NUMBER field to equal the House_Number of the sorted table. I then broke that join and rejoined the MAX_OBJECTID field to the ObjectID field of the Address_Even_Left_Sort and calculate the TO_HOUSE_NUMBER field to equal the House_Number of the sorted table. The line event table has zero length lines at each end of the set pf house numbers or where only one house number occurred on the entire route. Now I have a Line event table of where the Even house numbers on the Left of the line are listed for the correct ends of the lines as the measures increase on the route. House numbers can end up ascending or descending. Now I can use the Overlay Route Events tool with my road segment end point events to find the match of the lines and house numbers to the segment ends. I calculate a copy of the segment end measure to preserve it in the overlay so I can work out its proportion to the line ends. I also calculate a duplicate of the MIN and MAX measures into two fields called FROM_MEAS and TO_MEAS so I can preserve one set of Measure field values in the Overlay output.
... View more
08-15-2013
03:44 PM
|
0
|
0
|
10380
|
|
POST
|
I use the Locate Features Along Route tool to get Routes and measures assigned to address points. This tool accomplishes all that the Near tool does (telling you the distance from the road and if it is left or right of the road) and adds the Route and Measure information. For the underlying Centerlines I extract their end points using the Feature Vertices to Points tool and then use the Locate Features Along Routes with those points. I find that points work better than line segments with the tool and feel that the end points will work better for getting nearby addresses on each side of the segment end. I uncheck the Keep Only Closest Route Location option to get all matches and reselect the set where the Route ID matches up with the Route ID of the given centerline and export that to a validated event table. Converting from a point event table back to a line event table is possible using the Summary Statistics tool or the Pivot Table tool on the Route ID and segment Unique ID case field values and a Min and Max of the point Measure field values. For my address points, I uncheck the Keep Only Closest Route Location option to get all matches within a 500 foot radius of an address in a relatively urban area. I transfer route information about the street name to the matched points so that I can select the set of matches where the main street name spelling is the same (excluding suffixes like Ave, Dr, Rd, St, etc.) and export that set to a validated table. I then perform additional validation to examine unmatched addresses, since I do not want to drop address numbers that might affect the ranges and I don't want bad street name data. To do validation I perform a relate from the exported event table back to the address points on the unique address ID field. Then I switch the address selection and perform a Select By Location of that address selection that fall within 500 feet of the routes. This gives me the set of Addresses where the address street name is misspelled, the Route street name is misspelled, or Route associated with addresses is missing within the selection radius of other routes. Oddball and obvious misspellings are easy to detect with the above method, and I use a geocoded recorded maps layer to research names that are hard to know the correct spelling (with or without spaces between words, plural vs. singular, words with spelling variants, etc.). Yesterday, in one area with 900 unique street names and 15,000 addresses I found about 100 addresses and 2 streets with misspelled names using this method. Now I am trying to think through a method of extracting the addresses on one side of the road that are closest to the segment ends and validating even/odd side matching. The event table makes this validation possible. For example, I can get addresses with even house numbers that are on the left side of the road using the SQL: "HOUSE_NUMBER" = ROUND( "HOUSE_NUMBER" / 2, 0 ) * 2 AND "Distance" > 0 To get odd house numbers I change the HOUSE_NUMBER field expression to not equal (<>) and to get addresses on the right side of the road I change the Distance field expression to less than (<). In my case, Cul-de-sac ends will almost always cause exceptions to these rules where they bend to one side, since survey centerlines have a short segment at a 90 degree angle to the main road that messes up the right/left odd/even arrangement. Next I will begin working on the issue of getting the closest House numbers on each side of a segment end. I will use the measure information to determine the proportions of offsets of the closest addresses on each side and the segment end measure for dividing the range at the segment end location. I am still thinking through a way to do this using geoprocessing tools only and not cursors, since I prefer that approach. I am sure I will be using Merge, Summary Statistics, and Overlay Route Events tools to move forward. I will share what I may come up with that works.
... View more
08-15-2013
09:30 AM
|
0
|
0
|
4616
|
|
POST
|
For those line segs without joined address numbers, you can: 1. Extract those segs and export them as one feature class - class A, and export the another part segs (with address number) as the another feature class - class B; 2. Convert the class B to the point feature class - class C, then join (Intesect Spatial Join) the Class C to the class A - joined point class D; 3. Then join the class D table back to the Class A by using common field (line ID) and the output as Class E; 4. Open the Class E table, you can transfer the Min & Max number from joined fields (you need to know which one is Min & Max due to double Min & Max values joined - the larger Min value from both Min values is Max value for this seg, and less Max value from bothe Max values is Min value for this seg. After above process, you may couldn't assign address for all non-address segs (ig. two adjacent non-address lines), you may need to repeat above process. That simply does not work. If I have 4 addresses on a block, nothing says the block should begin and end with those addresses for creating ranges. That won't align them using geocoding either if there are many potential addresses between the last actual address and the block end. For example, if I have blocks at 1000 to 1100 and 1100 to 1200 as far as ranges, but addresses 1038 and 1058 as my min and max in the center of one segment and 1138 and 1158 as the min and max in the center of the other segment, the min and max values make no sense as the ranges. The whole reason to use ranges is potential addresses, so excluding them makes little sense. Better to use address points to only have exact matches and positions.
... View more
08-14-2013
11:26 AM
|
0
|
0
|
5763
|
|
POST
|
I did a UNION I think that worked. Union would work if you wanted the boundaries that intersect between the parcels and projects to define new polygons. A parcel could be cut up into several project polygons (or no project polygon). However, you did not say you wanted any new parcel shapes. Use the Keep all Target Features option with the Spatial Join where the parcels are the Target feature. If there are multiple projects connected to a parcel and you don't want summary data from the projects, use the One to Many option. In that case overlapping projects will create multiple copies of the parcel, one for each project. Use the Keep all Attributes of the Join Table option. A Pivot Table could convert the rows into columns, but that requires an Advanced license. Do you have 3 feature classes/shapefiles or 3 project features in a single feature class?
... View more
08-14-2013
11:16 AM
|
0
|
0
|
1794
|
|
POST
|
I have a Parcel polygon Feature Class. I also have a Project Polygon There are numerous Parcels inside an individual project boundary. I want to grab all the attributes of the Project Polygon and place then in each Parcel Record A spatial join does not really accomplish this...any thoughts on how to do this? Thanks A Spatial Join does accomplish what you have described in a new feature class if Parcels are the Target and Projects are the Join features. All of the attributes of both will be combined. How does it not do what you want? Are there multiple projects per Parcel?
... View more
08-14-2013
11:08 AM
|
0
|
0
|
1794
|
|
POST
|
Thank you, I did not think of using a join then summarize. This may be a simpler answer than what I anticipated. Thank you and I'll give it a try. Langdon It will not reliably work if you need continuous addresses on adjoining segments. It would only work well where the addresses are located close to the segment ends and the addresses at the ends represent the range across the segment's full length. Where the addresses are far from the ends of the segment or you only have one address on a long segment of road in an area where additional developed could occur, or you have one segment with no addresses between two segments that have addresses, you would expect additional addresses to be created on the ends outside of the range of the current address(es). Determining positions along the lines relative to the ends of the lines is what Linear Referencing can much more easily analyze than a simple Spatial Join or Near tool match. It also is the only method that can deal with ordering your chains of segments that need to match up the ranges where their ends meet in a logical, sortable manner. Linear Referencing is the only method that is capable of ordering adjoining road segments and lists of intersections along a given road according to the way you would actually drive a road from one end to the other. It is therefore ideal for this kind of problem.
... View more
08-14-2013
07:37 AM
|
0
|
0
|
5763
|
|
POST
|
Greetings How do you export coordinates from polylines? We need the coordinates in raw text format with each polyline related to a OBJECTID in the Attribute Table. See attached image [ATTACH=CONFIG]26663[/ATTACH] I have been searching the web for this but have only find a way to get the coordinates of "Point Z" objects using the "Add XY Coordinates" tool. This however, does not work for Polyline shapes. If you have an advanced license you could use the Feature Vertices to Point tool to convert your lines to points with the ALL option. The attributes of the lines are maintained on the points and they are exported in order. You could calculate the X and Y coordinates by adding two double fields and using the geometry calculator. Then you could select all records, open the table view and copy the records, paste that into Excel and convert it to a text file.
... View more
08-13-2013
06:13 AM
|
0
|
0
|
4177
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 03-24-2026 11:37 PM | |
| 1 | 03-24-2026 08:01 PM | |
| 7 | 02-23-2026 08:34 AM | |
| 1 | 03-31-2025 03:25 PM | |
| 1 | 03-28-2025 06:54 PM |
| Online Status |
Offline
|
| Date Last Visited |
07-09-2026
12:59 AM
|