Files
Territory-Address-Combiner/SPEC.md
2025-08-17 19:11:22 -05:00

2.3 KiB

Project Specification: Territory Address Combiner

This document outlines the plan for developing a script to assign Territory IDs to addresses based on their geographic coordinates.

1. Project Setup & File I/O [x]

1.1. Read the TerritoryExport.csv file. [x] 1.2. Parse the CSV data into a list of objects, where each object represents a territory and contains its ID and boundary points. [x] 1.3. Read the Addresses.csv file. [x] 1.4. Parse the CSV data into a list of objects, where each object represents an address and its properties, including latitude and longitude. [x]

2. Data Processing and Structuring [x]

2.1. For each territory, parse the Boundary string into a numerical list of coordinate pairs. Each pair will represent a vertex of the polygon. [x] 2.2. For each address, ensure its Latitude and Longitude are stored as numerical data types. [x]

3. Core Logic: Point-in-Polygon (PIP) Implementation [x]

3.1. Create a function that implements the Ray Casting algorithm to determine if a point is inside a polygon. [x] 3.2. This function will accept two arguments: the coordinates of the address (the point) and the list of vertices for a territory boundary (the polygon). [x] 3.3. The function will return true if the point is inside the polygon and false otherwise. [x]

4. Territory Assignment [x]

4.1. Iterate through each address in the parsed list from Addresses.csv. [x] 4.2. For each address, iterate through each territory from the parsed list from TerritoryExport.csv. [x] 4.3. Use the PIP function (from step 3) to check if the address's coordinate is inside the current territory's boundary. [x] 4.4. If the PIP function returns true: 4.4.1. Assign the territory's TerritoryID to the TerritoryID field of the address object. [x] 4.4.2. Break the inner loop (territory iteration) and proceed to the next address. [x]

5. Output Generation [x]

5.1. Create a new file named Addresses_Updated.csv. [x] 5.2. Write the header row from the original Addresses.csv to the new file. [x] 5.3. Iterate through the updated list of address objects. [x] 5.4. For each address object, write a new row to Addresses_Updated.csv with all the original data plus the newly assigned TerritoryID. [x]

6. Finalization [x]

6.1. Close any open file streams. [x] 6.2. Report successful completion to the user. [x]