POST
|
[LEFT] Thanks for the help so far. So I offset my routes by using Editing and then Move and it allowed me to move them a specified distance. Now I have built a network of just bus routes, but my stops and connectors don't seem to be working. What connectivity policy should I have? I used the one in the paper you referenced as a guide. I'll attach an image of my problem. Also you'll see in the Connectors image that the Real Stop are connected in a linear fashion as opposed to radial, is this correct? Also, when building the Network Dataset, do I build the Z Elevation? [ATTACH=CONFIG]26456[/ATTACH] [ATTACH=CONFIG]26457[/ATTACH] Conor, Unfortunately, without being there and intimately involved with the project I can only be of limited help, but I will try to address some of your concerns. I also suggest utilizing the tool I built, which has instructions in the readme, which will construct the 3D network and only leave the network dataset build for you to worry about. Connectors and Stops Assuming that the connectivity is in order and that the stops were designated as junctions in the network dataset build, the only reason the stops and connectors should not be allowing travel is if they are not spatially coincident with the street feature and or route feature. Alternatively, if your travel costs are not set up correctly Network Analyst, based on your inputs, may be calculating the travel cost to go _X_ miles by walking on the street as more efficient than hopping on a bus. This could be from a misplaced decimal point in the attribute table or an accidentally selecting the wrong field during the network dataset build. It will require investigation on your end. Make sure to check the connectivity type as the stops should be set to "Override." For more, see below in "Connectivity" and note that TARC is the name of the bus system I worked with. Immediately below this bullet point is a screen shot of the source features and types as well as a screenshot showing how I had by travel costs set up. [ATTACH=CONFIG]26597[/ATTACH] [ATTACH=CONFIG]26598[/ATTACH] WT: Wait Time (at stop) BAT: Bus Access Time (time to walk a given street feature) BTT: Bus Travel Time (time it took a bus to travel a given feature) Connectivity I merged my features into "master features" by type (i.e. one master bus route feature, one master stops feature containing both the real and psuedo stops, and one master connector feature). With the addition of the street feature I had the connectivity policy seen below. [ATTACH=CONFIG]26596[/ATTACH] Linear versus Radial It is fine for connectors to just be linear from a stop to a route. The only time you will have multiple connectors radiating our from a single real stop, the one at street level, is when you have a real stop that services multiple routes. Refer to my previous posts for the image of this. Z-values (Elevation) When you build the network dataset, assuming you have created 3D features, you will select the option to use Z-values from the geometry. Hopefully this clarifies some things, but again I suggest using the tool in my previous post to save a lot of time and hassle, if you are up against a deadline, and to experiment with the intricacies of building one from scratch later on with a small dataset, as suggested by Srirama. [/LEFT]
... View more
08-08-2013
11:32 AM
|
0
|
0
|
406
|
POST
|
Jeremiah, Do the routes have to be offset? And if so, how do you offset them? Conor, Thanks for the excellent question as it is one that I find comes up often. Not offsetting is something I did not experiment with due to the time constraints of the original project I created the network for. I'm not sure if 3D Analyst could support a purely vertical edge; perhaps Ms. Morang could shed some light on this? My main purpose for offsetting, other than the fact that I was following a large part of Mahrous (2012) procedure, was to ensure the connector line features would slope out from the street level stop to the serviced bus route(s). Additionally, were you to create a 3D network and not offset the routes, and there was a stop that serviced multiple routes, you would have a connectivity nightmare ensuring that the spatially coincident edges serving as connectors between street and route did not allow crossovers. This offset was the simplest solution and allows for simple connectivity between minimal numbers of features. This also makes the design very accessible for those with little network analysis or GIS experience. As for how I went about offsetting the routes, initially I used a small tool, see Copy Parallel below, but it resulted in little square "loops" on the corners of the new lines, both a lengthening and a distortion from the original line shape. http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Copying_parallel_line_features/001t00000033000000/ However, when I made this program I found that iterating through each Point Object (vertex) in the Line Feature and editing the geometry directly by increasing the X coordinate by some uniform value was the most precise and expedient way of offsetting the routes. For example, If you had a vertex with an initial X attribute of 35000 ft from the projection origin and an initial Y attribute of 18500ft from the projection origin and put them through the offset portion of my script with an offset of 5 ft, the resultant X and Y attributes would be 35005ft and 18500 ft, respectively. ESRI's recent publication of Python Scripting for ArcGIS by Paul A. Zanderbergen (ISBN-13: 9781589482821) has an excellent chapter on modifying geometries through Python. Let me know if that didn't address your question fully.
... View more
07-30-2013
06:23 AM
|
0
|
0
|
1083
|
POST
|
#Jeremiah: I have seen your pdf. Why for bus and stop haven't use subtype in connectivity? so you have 1 feature class bus and 1 feature class stop. Domenico, The PDF you reference is not my work. It is the work of a Master's candidate from the Netherlands named Reem Fawzy Mahrous. I agree that the connectivity policies in that PDF could have been simplified. At the time I began working on the research I had 1 year of GIS experience and my focus is actually public health and medical geography. Due to the time constraints of my senior thesis, I had to teach myself Network Analyst in the course of a month or two and was unaware of subtypes within connectivity policies. Thank you for bringing them to my attention; I'll be sure to read into it more and know they are a possible tool for the future. On a separate note, I mentioned that I would work on a standalone tool that will allow my 3D network construction process to be repeated thus making hours of work into minutes of work, depending on computing resources and input file sizes. I have attached the program and the readme file (please read that first). Make sure both files are in the same directory or the help button, within the GUI, will not work. If anyone has any questions or feedback I would greatly appreciate it.
... View more
07-22-2013
01:47 PM
|
0
|
0
|
1083
|
POST
|
Any time! Feel free to contact me if you have any other questions pertaining to this. To be fair, the Network Analyst and 3D Analyst extensions are massive in both size and power and one of the best things about ArcGIS is that users can combine aspects of multiple extensions to create solutions that not even ESRI may have anticipated. So while the specialists are indeed quite qualified specialists, they cannot always have an answer and that is where the collective experiences in the forums come into play. Make sure to give your feedback on the documentation provided for Network Analyst or anything pertaining to ArcGIS as ESRI can only make improvements with feedback from users. I know that Ms. Morang, a specialist in this thread, assisted me by soliciting my thoughts last fall on Network Analyst in order for my suggestions to be heard. Keep up the good work specialists!
... View more
06-04-2013
07:55 AM
|
0
|
0
|
5163
|
POST
|
Thank U Jeremiah Nieves for your great post , i really appreciate that also the research link was really helpful could you please provide your python code or which tools to create the connector feature class automatically as i have more than 70 route with 1500 bus station You're quite welcome. Unfortunately, since I was teaching myself Network Analyst from the ground up last fall, I did not implement a Python script until I had created a number of the features by hand. In addition, the script was essentially a kludge, a quick and dirty (yet functional) fix that used paths specific to my files. However, I have provided the (ugly) code below as it may help. Please note that the code is written for ArcGIS 10.0. I will go ahead and give an overview of creating a connector outside of Python, to the best of my recollection, as I assume it can be replicated in model builder, although I find implementing iterations much easier in Python. I am giving serious contemplation to making a summer project of creating a custom tool that will take necessary input features, with the proper attribute fields, and create the spatial framework for the network. This would only leave the user the task of adding of travel costs to the features. Overview of Connector Construction It is assumed that the bus routes have been offset at this point, but not turned into 3D features yet. Your bus stops must have unique IDs; this is critical to being able to construct connectors. Take your original bus stop feature and create a duplicate bus stop feature which I will refer to as "pseudo stops." The bus stops should be turned into a 3D feature (Feature to 3D By Attribute) with a z value of '0.' Make sure to Snap these stops to whatever is serving as the pedestrian paths in the network. The pseudo stops are a bit trickier. [INDENT] First, 'Snap' the pseudo stops to the nearest bus route. For this to work, your bus stop and bus route data should be accurate in their respective locations. For each bus route, you are going to 'Select By Location' pseudo stops that intersect the given bus route, give each of those selected stops an ending elevation attribute equal to the given bus route's number, and export the selected pseudo stops as their own feature. I recommend putting the route number serviced somewhere in the name. Once you have done this, you should have a feature of pseudo stops for each bus route. Give each of them an attribute that gives them a z value equal to that of the route served. Merge all of these features into one pseudo stop feature and use 'Feature to 3D By Attribute' using aforementioned z value of the route serviced.[/INDENT] You should now have the set of real bus stops at z == 0 and the set of pseudo bus stops with z == route # serviced. In the end, this allows you to have single bus stops at ground level that service multiple routes. Merge the two, psudeo and real, bus stop features. Use the 'Points to Line Tool (Data Management)' to construct the connectors using the unique bus stop ID as the grouping field (meaning stop ID #23 creates a line between the real and pseudo stops with ID #23 and no others). This is in Line 113 of the code. This, to the best of my 6 month old memory, will give you 3D connectors like you see in my previously posted picture. I'll work on a custom tool over the summer and update what I do or do not come up with. Below is the Python code in .py format.
... View more
06-03-2013
06:27 AM
|
0
|
0
|
5163
|
POST
|
There is actually a way to do what the original poster is describing. I recently created a network that solved this problem by creating a three dimensional multimodal network. An unpublished masters paper helped guide me (http://www.itc.nl/library/papers_2012/msc/upm/mahrous.pdf), but it's connectivity rules can be optimized greatly and in the end I only had . Attached is a screenshot I captured of my network which I edited in illustrator for some quick color and labeling. [ATTACH=CONFIG]24913[/ATTACH] Overview What you have to do is to give each bus route a Z value that corresponds to it's bus route number (e.g. Bus Route 25 is 25 m above street level, which is 0m). This ensures that while the bus routes are in the same connectivity group, they will never intersect. You must also create a polyline features, "connectors" whose endpoints correspond with the bus stops, which are at 0m and spatially coincident to the street (walking network), and the bus route. To make sure that these connectors do not cross over each other, giving you the problem you now have, I messed with the geometry, in Python, of the pre-made bus network I was using to offset every route 5 meters to the East. This gives you connectors that radiate from a single bus stop to every route serviced at that location, thus modeling bus stops that service multiple routes. These connectors in themselves do not add to the total travel cost if you do not want them to. I was measuring cost in minutes and used these connectors to have a route specific, one-way cost of "waiting at the bus stop" when going from the street to the route. Since time used egressing a bus is negligible, I had the time cost as zero when the agent moved from the route to the street. If you have a large network, as I did with 25 routes and over 9750 stops, knowledge of Python and how to modify the geometry of created features is needed for this to be feasible time wise. Doing this by hand would take a horribly long time. I would say that once all the attribute fields were set and ready it took me about 5 hours worth of scripting and debugging to get the final network components (one file for 3D connectors, 3D routes, 3D streets, and 3D stops). From there I just created the network data set in Arc Catalog. An important note: When solving a network layer, you must choose the option to display the routes as straight lines. For whatever reason the analysis failed when ArcMap tried to display the individual routes on the path they took. My guess is an issue with the three dimensionality of the network. Feel free to contact me with any questions or any issues with implementing Python in such an endeavor! Jeremiah
... View more
06-02-2013
10:56 AM
|
0
|
0
|
5163
|
POST
|
A source outside the forum, a Mr. Callahan, assisted me with this problem. It turns out that Python 2.7 and the 2.7 Numpy and Scipy packages I had installed as well were interfering with the call to arcpy for some reason. Once I uninstalled Python 2.7 and the mentioned packages, I was able to call arcpy with no problem.
... View more
12-28-2012
07:41 AM
|
0
|
0
|
269
|
POST
|
Quick background of the hardware and software I'm using: OS: Windows 7 64-bit Arc Info 10.0 IDE: Wingware Python IDE 4.1.3 Python 2.6 (installed with ArcGIS) AND 2.7 are installed on my machine I am compiling a script to create 3D lines connecting 3D point features based on a common field. These point features represent bus stops and ultimately I am creating a multi-modal transportation network model. The street level stops are called "real" and are in one file where as the elevated stops are referred to as "psuedo" and are grouped by the route number they are associated with (some service more than one route so there is overlap). My main problem right now is that when I am debugging my script, the debugger keeps on saying that the arcpy module does not exist. I checked in command line with assoc and ftype to make sure that all .py file were associated with 2.6 and not 2.7. I tried to append the arcpy path using the sys module (see script) and it still said that arcpy did not exist. I can go through my computer and see the arcpy folder so I know it is there. Any ideas? import sys sys.path.append('C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy') import arcpy arcpy.env.workspace = "C:\\Users\\Admiral Ackbar\\Desktop\\442PythonTempWorkspace\\442PythonTempWorkspace.gdb" PSRGList = arcpy.ListFeatureClasses("","","PSUEDO_STOPS_ROUTE_GROUPS") #Retrieve a list of all 2D Psudeo Stop feature classes internally grouped by route they service in the feature dataset "PSUEDO_STOPS_ROUTE_GROUPS" for PSRG in PSRGList: #for every pseudo stop route group (PSRG) in the PSGR list PSRGcounter = 0 #PSRG counter that indicates the index of the PSRGList that is currently going through iteration newPSRGname = PSRGlist[PSRGcounter] + "_3D" #Get the name of the PSRG feature from the list and add '_3D' for the new name PSRG3D = arcpy.FeatureTo3DByAttribute(PSRG, newPSRGname, "ELEVATION") # Make the feature 3D by using the field 'ELEVATION' for height print "New 3d Feature" + newPSRGname +"created." SC_list=[] #Empty list for stopcodes that will be retrieved srows = arcpy.SearchCursor(newPSRGname,"","","STOP_CODE","STOP_CODE_A") #Create a search cursor to retrieve all stop code values in the 3D PSRG and put the values in ascending order for srow in srows: #For each row in the cursor Stop_code = srow.STOP_CODE #Assign a variable for the value of the STOP_CODE field SC_list.append(Stop_code) #Append that value to the SC_List del srow, srows #Delete the search cursor print "New Stop Code List created from" + str(newPSRGname) +"." SC_List =["x","y","z"] SCcounter=1 #counter query="" #Empty string for query SC_length = len(SC_list) #Get the length of the Stop Code list while SCcounter <= SC_length: #while there are items in the list SC_List for SC in SC_List: if SCcounter < SC_length: #if the SC counter is less than the length of the list SC_List query += "\"STOP_CODE\" == \'%s\' OR " %(SC) #Create the initial portion of the query SCcounter +=1 else: query += "\"STOP_CODE\" == \'%s\'" %(SC) #add other values to the query as long as there are values in the list SCcounter +=1 print "The query to be used in Select By Attribute is " + query + "." arcpy.MakeFeatureLayer_management("REALBUSSTOPS_3D","REALBUSSTOPS_3D_lyr") #Create a Feature Layer for Select by Attribute routenumlist = [] #create blank list routenumlist = PSRG.split(_) #Split the PSRG name at every occurrence of '_' routenum = routenumlist[1] #Get the route number from the list of words in the PSRG feature which resides at the index 1 for every standardized PSRG name selectedRBS_nam3 = "REALBUSSTOPS_3D_" + routenum #Name of the selected Real Bus Stops (RBS) feature to be arcpy.SelectByAttribute_management("REALBUSSTOPS_3D_lyr",NEW_SELECTION,query) #Select the corresponding REALBUSSTOP_3D records arcpy.CopyFeatures_management("REALBUSSTOPS_3D_lyr", sleectedRBS_nam3) #Create a new feature of the selected RealBusstops_3D print"New 3d Feature"+ selectedRBS_nam3 + "was created." arcpy.Delete_management("REALBUSSTOPS_3D_lyr") #Delete the layer mergeoutput = "PSUEDO_REAL_3D_STOPS_" + routenum #Assign variable for the name of the output merge file arcpy.Merge_management([newPSRGname, selectedRBS_nam3], mergeoutput) #Merge the RBS and the PBRG points into one file print"Selected real bus stops and PSRG" + routenum + "were merged into the file " + mergeoutput +"." outputconnector="Connector_" + routenum #Assign variable for the output points to line file arcpy.PointsToLine_management(mergeoutput, outputconnector, "STOP_CODE") #Create the 3D connectors for that route group print outputconnector + "was created." PSRGcounter=+1 #Increase the PSRG counter by one for naming conventions to be correct on the next iteration connectorlist = arcpy.ListFeatureClasses("",Polyline,"") #Creates a list of the connector features classes in the workspace (connectors are the only polyline features in the workspace). connectorstring = "" connectorcounter = 0 while connect in connectorlist: #while there are items in the list connectorlist if connectorcounter <24: connectorstring+= connect+";" #append the string from connector list to the string connector string connectorcounter+=1 #Add one to the counter else: connectorstring=+ connect #Append the string from connector list with no trailing semicolon connectorcounter+=1 #Add one to the counter arcpy.Merge_management(connectorstring, "MASTER_CONNECTORS_3D") #Merge all of the connectors into one 'Master' 3D feature
... View more
12-27-2012
03:13 PM
|
0
|
1
|
1208
|
POST
|
You can overcome your problem if you change your node structure and have only one node point instead of two and use the simple FT/TF method. regards, How would I go about changing the node structure? I have two different junctions for two different connectivity groups. One is dedicated for bus-to-bus transfer and the other is dedicated to street to bus transfer. It is only the latter that I need a FT/TF variability.
... View more
10-24-2012
12:17 PM
|
0
|
0
|
454
|
POST
|
A junction only has one cost for going though it. It does not/can not differentiate the travel direction. So you have to use the edges to define the from/to travel direction. Jay Sandhu Jay, I believed this might be the case. Thanks for clarifying.
... View more
10-22-2012
01:20 PM
|
0
|
0
|
454
|
POST
|
I am new to network analyst and I am currently creating a multi-modal network, involving the local bus system and walking along streets, for my undergraduate thesis. I am setting up the network to model transfers and have set the elevation field values for the bus routes to the bus route number. I currently have two junction features, one for accessing a bus route from the street and one for bus-to-bus transfers, the first of which connects a bus route to the street center line file and the second which connects bus lines at a given stop. The transfer junction has a penalty of ten minutes whether an agent is transferring "up" or "down". My problem is with the Bus route "access" junction. If an agent is accessing a route from a street I want to model the wait time, in minutes, as 2 + 0.3(Bus line headway), but if the agent is going from the bus route to the street, I do not want a penalty to exist. The only solution I can currently think of is to create an edge feature between every junction at the street level and the spatially coincident route level junction. Is there some way to set a variable penalty at a junction that is determined by direction of travel? Thanks in advance for your ideas. Attached is a diagram exemplifying how the network should be set up in the end, pending advice I receive from those more knowledgeable.
... View more
10-22-2012
07:04 AM
|
0
|
6
|
1772
|
POST
|
I have seen others create multi-modal transit networks that utilized the route number as the elevation field so that the bus routes can remain over the street center line. Transfers, from bus to bus, bus to street, or street to bus, then take place "vertically." I am currently working on designing one myself for an accessibility study.
... View more
10-16-2012
05:59 AM
|
0
|
0
|
786
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|