mirror of
				https://github.com/zyphlar/sonoma-import.git
				synced 2024-03-08 15:07:48 +00:00 
			
		
		
		
	change table names accordingly
This commit is contained in:
		
							parent
							
								
									d542cf9da6
								
							
						
					
					
						commit
						b03d53b099
					
				
							
								
								
									
										13
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								README.md
									
									
									
									
									
								
							@ -69,6 +69,8 @@ Debian (shp2pgsql is included in postgis)
 | 
				
			|||||||
    - `git clone --recursive https://github.com/pnorman/ogr2osm`
 | 
					    - `git clone --recursive https://github.com/pnorman/ogr2osm`
 | 
				
			||||||
  - Do NOT install the osgeo package from pip, it's empty and will cause ogr import errors.
 | 
					  - Do NOT install the osgeo package from pip, it's empty and will cause ogr import errors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Restart postgres and then inside the `openstreetmap` database you created, run: `CREATE EXTENSION postgis; create extension hstore;`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Running
 | 
					## Running
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- We are assuming that the county data uses a WGS84 aka EPSG:4326 geographical projection, which was true as of last check and is also what OSM uses.
 | 
					- We are assuming that the county data uses a WGS84 aka EPSG:4326 geographical projection, which was true as of last check and is also what OSM uses.
 | 
				
			||||||
@ -76,13 +78,14 @@ Debian (shp2pgsql is included in postgis)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
cd original_data
 | 
					cd original_data
 | 
				
			||||||
shp2pgsql -s 4326 -I Parcels__Public_.shp | psql -d openstreetmap -U openstreetmap -W
 | 
					
 | 
				
			||||||
shp2pgsql -s 4326 -I Sonoma_County_Building_Outlines.shp | psql -d openstreetmap -U openstreetmap -W
 | 
					shp2pgsql -s 4326 -I Parcels_Public_Shapefile.shp | psql -d openstreetmap -U openstreetmap -W
 | 
				
			||||||
 | 
					shp2pgsql -s 4326 -I Buildings.shp | psql -d openstreetmap -U openstreetmap -W
 | 
				
			||||||
osm2pgsql -d openstreetmap -c --prefix son --slim --extra-attributes --hstore --latlong norcal-latest.osm.pbf -U openstreetmap -W -H localhost -P 5432
 | 
					osm2pgsql -d openstreetmap -c --prefix son --slim --extra-attributes --hstore --latlong norcal-latest.osm.pbf -U openstreetmap -W -H localhost -P 5432
 | 
				
			||||||
ogr2ogr -f "PostgreSQL" PG:"host=localhost dbname=openstreetmap user=openstreetmap port=5432 password=openstreetmap" "santa-rosa-boundary.geojson"
 | 
					ogr2ogr -f "PostgreSQL" PG:"host=localhost dbname=openstreetmap user=openstreetmap port=5432 password=openstreetmap" "santa-rosa-boundary.geojson"
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
shp2pgsql should create tables like `parcels__public_` and `sonoma_county_building_outlines`.
 | 
					shp2pgsql should create tables like `parcels_public_shapefile` and `buildings`.
 | 
				
			||||||
osm2pgsql should create tables like `son_polygon`.
 | 
					osm2pgsql should create tables like `son_polygon`.
 | 
				
			||||||
ogr2ogr should create a table `santa_rosa_boundary`.
 | 
					ogr2ogr should create a table `santa_rosa_boundary`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -149,7 +152,7 @@ Please ensure you are logged in under a dedicated import account with a user nam
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
shp2pgsql -s 4326 -I Parcels__Public_.shp | psql -d openstreetmap -U openstreetmap -W -h localhost -p 5432
 | 
					shp2pgsql -s 4326 -I Parcels__Public_.shp | psql -d openstreetmap -U openstreetmap -W -h localhost -p 5432
 | 
				
			||||||
shp2pgsql -s 4326 -I Sonoma_County_Building_Outlines.shp | psql -d openstreetmap -U openstreetmap -W -h localhost -p 5432
 | 
					shp2pgsql -s 4326 -I Buildings.shp | psql -d openstreetmap -U openstreetmap -W -h localhost -p 5432
 | 
				
			||||||
psql -d openstreetmap -U openstreetmap -W -h localhost -p 5432 -f osmquery-pgdump.sql
 | 
					psql -d openstreetmap -U openstreetmap -W -h localhost -p 5432 -f osmquery-pgdump.sql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#unused
 | 
					#unused
 | 
				
			||||||
@ -175,7 +178,7 @@ out;
 | 
				
			|||||||
If using an Overpass -> QGIS -> Postgres dump, save it as `osmquery_buildings_pgdump.sql` for later.
 | 
					If using an Overpass -> QGIS -> Postgres dump, save it as `osmquery_buildings_pgdump.sql` for later.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
sonoma_county_building_outlines
 | 
					buildings
 | 
				
			||||||
"conflated" = FALSE
 | 
					"conflated" = FALSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
osmosis --read-pgsql host="127.0.0.1" database="openstreetmap" user="openstreetmap" password="openstreetmap" outPipe.0=pg --dd inPipe.0=pg outPipe.0=dd --write-xml inPipe.0=dd file=output.osm
 | 
					osmosis --read-pgsql host="127.0.0.1" database="openstreetmap" user="openstreetmap" password="openstreetmap" outPipe.0=pg --dd inPipe.0=pg outPipe.0=dd --write-xml inPipe.0=dd file=output.osm
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@
 | 
				
			|||||||
-- - parse city and state as well for mailing
 | 
					-- - parse city and state as well for mailing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- add fields for OSM tags and data processing 
 | 
					-- add fields for OSM tags and data processing 
 | 
				
			||||||
ALTER TABLE sonoma_county_building_outlines
 | 
					ALTER TABLE buildings
 | 
				
			||||||
	ADD COLUMN IF NOT EXISTS "addr:housenumber" text,
 | 
						ADD COLUMN IF NOT EXISTS "addr:housenumber" text,
 | 
				
			||||||
	ADD COLUMN IF NOT EXISTS "addr:street" text,
 | 
						ADD COLUMN IF NOT EXISTS "addr:street" text,
 | 
				
			||||||
	ADD COLUMN IF NOT EXISTS "addr:unit" text,
 | 
						ADD COLUMN IF NOT EXISTS "addr:unit" text,
 | 
				
			||||||
@ -15,11 +15,11 @@ ALTER TABLE sonoma_county_building_outlines
 | 
				
			|||||||
	ADD COLUMN IF NOT EXISTS conflated boolean DEFAULT FALSE,
 | 
						ADD COLUMN IF NOT EXISTS conflated boolean DEFAULT FALSE,
 | 
				
			||||||
	ADD COLUMN IF NOT EXISTS main boolean; -- is it the main building on the parcel?
 | 
						ADD COLUMN IF NOT EXISTS main boolean; -- is it the main building on the parcel?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
update sonoma_county_building_outlines set "addr:housenumber" = NULL, "addr:street" = NULL, "addr:unit" = NULL, "addr:city" = NULL, "addr:state" = NULL, usecode = NULL, cid = NULL, conflated = FALSE, main = FALSE;
 | 
					update buildings set "addr:housenumber" = NULL, "addr:street" = NULL, "addr:unit" = NULL, "addr:city" = NULL, "addr:state" = NULL, usecode = NULL, cid = NULL, conflated = FALSE, main = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- create local geometry fields and validate geometries
 | 
					-- create local geometry fields and validate geometries
 | 
				
			||||||
UPDATE sonoma_county_building_outlines SET loc_geom = ST_MakeValid(geom);
 | 
					UPDATE buildings SET loc_geom = ST_MakeValid(geom);
 | 
				
			||||||
CREATE INDEX ON sonoma_county_building_outlines USING GIST (loc_geom);
 | 
					CREATE INDEX ON buildings USING GIST (loc_geom);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- added fields for the parcels table
 | 
					-- added fields for the parcels table
 | 
				
			||||||
ALTER TABLE parcels__public_
 | 
					ALTER TABLE parcels__public_
 | 
				
			||||||
@ -527,7 +527,7 @@ UPDATE parcels__public_ SET building_count = NULL WHERE building_count IS NOT NU
 | 
				
			|||||||
WITH bcounts AS (
 | 
					WITH bcounts AS (
 | 
				
			||||||
	SELECT 
 | 
						SELECT 
 | 
				
			||||||
		p.gid, COUNT(*)
 | 
							p.gid, COUNT(*)
 | 
				
			||||||
	FROM sonoma_county_building_outlines AS b JOIN parcels__public_ AS p ON
 | 
						FROM buildings AS b JOIN parcels__public_ AS p ON
 | 
				
			||||||
		ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
							ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
				
			||||||
		ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
							ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
				
			||||||
	GROUP BY p.gid
 | 
						GROUP BY p.gid
 | 
				
			||||||
@ -536,7 +536,7 @@ UPDATE parcels__public_ SET building_count = count
 | 
				
			|||||||
FROM bcounts WHERE bcounts.gid = parcels__public_.gid;
 | 
					FROM bcounts WHERE bcounts.gid = parcels__public_.gid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- add addresses to buildings with simple 1:1 matches to parcels
 | 
					-- add addresses to buildings with simple 1:1 matches to parcels
 | 
				
			||||||
UPDATE sonoma_county_building_outlines SET "addr:housenumber" = NULL, "addr:street" = NULL;
 | 
					UPDATE buildings SET "addr:housenumber" = NULL, "addr:street" = NULL;
 | 
				
			||||||
WITH a AS (
 | 
					WITH a AS (
 | 
				
			||||||
	SELECT 
 | 
						SELECT 
 | 
				
			||||||
		b.gid,
 | 
							b.gid,
 | 
				
			||||||
@ -546,49 +546,49 @@ WITH a AS (
 | 
				
			|||||||
		p."addr:city",
 | 
							p."addr:city",
 | 
				
			||||||
		p."addr:state",
 | 
							p."addr:state",
 | 
				
			||||||
		p.usecode
 | 
							p.usecode
 | 
				
			||||||
	FROM sonoma_county_building_outlines AS b JOIN parcels__public_ AS p ON
 | 
						FROM buildings AS b JOIN parcels__public_ AS p ON
 | 
				
			||||||
		ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
							ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
				
			||||||
		ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
							ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
				
			||||||
	WHERE p.building_count = 1 AND NOT p.repeating
 | 
						WHERE p.building_count = 1 AND NOT p.repeating
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
UPDATE sonoma_county_building_outlines SET 
 | 
					UPDATE buildings SET 
 | 
				
			||||||
	"addr:housenumber" = a."addr:housenumber",
 | 
						"addr:housenumber" = a."addr:housenumber",
 | 
				
			||||||
	"addr:street" = a."addr:street",
 | 
						"addr:street" = a."addr:street",
 | 
				
			||||||
	"addr:unit" = a."addr:unit",
 | 
						"addr:unit" = a."addr:unit",
 | 
				
			||||||
	"addr:city" = a."addr:city",
 | 
						"addr:city" = a."addr:city",
 | 
				
			||||||
	"addr:state" = a."addr:state",
 | 
						"addr:state" = a."addr:state",
 | 
				
			||||||
	"usecode" = CAST( a.usecode as INTEGER ) -- the original data is VARYING
 | 
						"usecode" = CAST( a.usecode as INTEGER ) -- the original data is VARYING
 | 
				
			||||||
FROM a WHERE sonoma_county_building_outlines.gid = a.gid;
 | 
					FROM a WHERE buildings.gid = a.gid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--SELECT COUNT(*) FROM sonoma_county_building_outlines WHERE "addr:housenumber" IS NOT NULL OR "addr:street" IS NOT NULL;
 | 
					--SELECT COUNT(*) FROM buildings WHERE "addr:housenumber" IS NOT NULL OR "addr:street" IS NOT NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- attempt to identify garages and sheds so they don't get addresses
 | 
					-- attempt to identify garages and sheds so they don't get addresses
 | 
				
			||||||
UPDATE sonoma_county_building_outlines SET main = NULL;
 | 
					UPDATE buildings SET main = NULL;
 | 
				
			||||||
-- sort the buildings on each parcel by size, but only where it's likely a garage/shed situation
 | 
					-- sort the buildings on each parcel by size, but only where it's likely a garage/shed situation
 | 
				
			||||||
WITH sizes AS (
 | 
					WITH sizes AS (
 | 
				
			||||||
	SELECT 
 | 
						SELECT 
 | 
				
			||||||
		p.gid AS pid, 
 | 
							p.gid AS pid, 
 | 
				
			||||||
		b.gid AS bid,
 | 
							b.gid AS bid,
 | 
				
			||||||
		row_number() OVER ( PARTITION BY p.gid ORDER BY ST_Area(b.loc_geom) DESC) AS size_order
 | 
							row_number() OVER ( PARTITION BY p.gid ORDER BY ST_Area(b.loc_geom) DESC) AS size_order
 | 
				
			||||||
	FROM sonoma_county_building_outlines AS b JOIN parcels__public_ AS p ON
 | 
						FROM buildings AS b JOIN parcels__public_ AS p ON
 | 
				
			||||||
		ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
							ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
				
			||||||
		ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
							ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
				
			||||||
	WHERE 
 | 
						WHERE 
 | 
				
			||||||
		NOT p.repeating AND -- single parcels
 | 
							NOT p.repeating AND -- single parcels
 | 
				
			||||||
		p.building_count IN (2,3) -- 2 or 3 buildings on parcel
 | 
							p.building_count IN (2,3) -- 2 or 3 buildings on parcel
 | 
				
			||||||
	ORDER BY p.gid ASC
 | 
						ORDER BY p.gid ASC
 | 
				
			||||||
) UPDATE sonoma_county_building_outlines SET main = CASE 
 | 
					) UPDATE buildings SET main = CASE 
 | 
				
			||||||
	WHEN size_order = 1 THEN TRUE
 | 
						WHEN size_order = 1 THEN TRUE
 | 
				
			||||||
	WHEN size_order > 1 THEN FALSE
 | 
						WHEN size_order > 1 THEN FALSE
 | 
				
			||||||
	ELSE NULL
 | 
						ELSE NULL
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
FROM sizes WHERE sizes.bid = sonoma_county_building_outlines.gid;
 | 
					FROM sizes WHERE sizes.bid = buildings.gid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- now assign addresses to main buildings on parcels with outbuildings
 | 
					-- now assign addresses to main buildings on parcels with outbuildings
 | 
				
			||||||
WITH a AS (
 | 
					WITH a AS (
 | 
				
			||||||
	SELECT 
 | 
						SELECT 
 | 
				
			||||||
		b.gid, p."addr:housenumber", p."addr:street", p.usecode
 | 
							b.gid, p."addr:housenumber", p."addr:street", p.usecode
 | 
				
			||||||
	FROM sonoma_county_building_outlines AS b JOIN parcels__public_ AS p ON
 | 
						FROM buildings AS b JOIN parcels__public_ AS p ON
 | 
				
			||||||
		ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
							ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
				
			||||||
		ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
							ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
				
			||||||
	WHERE 
 | 
						WHERE 
 | 
				
			||||||
@ -596,11 +596,11 @@ WITH a AS (
 | 
				
			|||||||
		AND NOT p.repeating 
 | 
							AND NOT p.repeating 
 | 
				
			||||||
		AND b.main -- is main building
 | 
							AND b.main -- is main building
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
UPDATE sonoma_county_building_outlines SET 
 | 
					UPDATE buildings SET 
 | 
				
			||||||
	"addr:housenumber" = a."addr:housenumber",
 | 
						"addr:housenumber" = a."addr:housenumber",
 | 
				
			||||||
	"addr:street" = a."addr:street",
 | 
						"addr:street" = a."addr:street",
 | 
				
			||||||
	"usecode" = CAST( a.usecode as INTEGER ) -- the original data is VARYING
 | 
						"usecode" = CAST( a.usecode as INTEGER ) -- the original data is VARYING
 | 
				
			||||||
FROM a WHERE sonoma_county_building_outlines.gid = a.gid;
 | 
					FROM a WHERE buildings.gid = a.gid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- TODO: here is where the first real 226 is added
 | 
					-- TODO: here is where the first real 226 is added
 | 
				
			||||||
@ -609,7 +609,7 @@ FROM a WHERE sonoma_county_building_outlines.gid = a.gid;
 | 
				
			|||||||
-- get a count of outbuildings so we know how many addresses are intentionally unassigned
 | 
					-- get a count of outbuildings so we know how many addresses are intentionally unassigned
 | 
				
			||||||
-- SELECT 
 | 
					-- SELECT 
 | 
				
			||||||
-- 	COUNT(*)
 | 
					-- 	COUNT(*)
 | 
				
			||||||
-- FROM sonoma_county_building_outlines AS b JOIN parcels__public_ AS p ON
 | 
					-- FROM buildings AS b JOIN parcels__public_ AS p ON
 | 
				
			||||||
-- 	ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
					-- 	ST_Intersects(b.loc_geom,p.loc_geom) AND 
 | 
				
			||||||
-- 	ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
					-- 	ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
				
			||||||
-- WHERE 
 | 
					-- WHERE 
 | 
				
			||||||
@ -619,9 +619,9 @@ FROM a WHERE sonoma_county_building_outlines.gid = a.gid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- result: 44090
 | 
					-- result: 44090
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--SELECT COUNT(*) FROM sonoma_county_building_outlines WHERE "addr:housenumber" IS NOT NULL OR "addr:street" IS NOT NULL;
 | 
					--SELECT COUNT(*) FROM buildings WHERE "addr:housenumber" IS NOT NULL OR "addr:street" IS NOT NULL;
 | 
				
			||||||
-- result: 123793
 | 
					-- result: 123793
 | 
				
			||||||
--SELECT COUNT(*) FROM sonoma_county_building_outlines WHERE "addr:housenumber" IS NULL AND "addr:street" IS NULL;
 | 
					--SELECT COUNT(*) FROM buildings WHERE "addr:housenumber" IS NULL AND "addr:street" IS NULL;
 | 
				
			||||||
-- result: 155217
 | 
					-- result: 155217
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- try to assign multiple addresses from multiple parcels to single buildings
 | 
					-- try to assign multiple addresses from multiple parcels to single buildings
 | 
				
			||||||
@ -633,7 +633,7 @@ WITH addresses AS (
 | 
				
			|||||||
		array_to_string( ARRAY_AGG(DISTINCT p."addr:housenumber"), ';') AS housenumber,
 | 
							array_to_string( ARRAY_AGG(DISTINCT p."addr:housenumber"), ';') AS housenumber,
 | 
				
			||||||
		array_to_string( ARRAY_AGG(DISTINCT p."addr:street"), ';') AS street,
 | 
							array_to_string( ARRAY_AGG(DISTINCT p."addr:street"), ';') AS street,
 | 
				
			||||||
		array_to_string( ARRAY_AGG(DISTINCT p.usecode), ';') AS usecode
 | 
							array_to_string( ARRAY_AGG(DISTINCT p.usecode), ';') AS usecode
 | 
				
			||||||
	FROM sonoma_county_building_outlines AS b JOIN parcels__public_ AS p ON 
 | 
						FROM buildings AS b JOIN parcels__public_ AS p ON 
 | 
				
			||||||
		ST_Intersects(b.loc_geom,p.loc_geom) AND
 | 
							ST_Intersects(b.loc_geom,p.loc_geom) AND
 | 
				
			||||||
		ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
							ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.9*ST_Area(b.loc_geom)
 | 
				
			||||||
	WHERE 
 | 
						WHERE 
 | 
				
			||||||
@ -642,14 +642,14 @@ WITH addresses AS (
 | 
				
			|||||||
		b."addr:housenumber" IS NULL
 | 
							b."addr:housenumber" IS NULL
 | 
				
			||||||
	GROUP BY p.gid
 | 
						GROUP BY p.gid
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
UPDATE sonoma_county_building_outlines AS b SET 
 | 
					UPDATE buildings AS b SET 
 | 
				
			||||||
	"addr:housenumber" = a.housenumber,
 | 
						"addr:housenumber" = a.housenumber,
 | 
				
			||||||
	"addr:street" = a.street,
 | 
						"addr:street" = a.street,
 | 
				
			||||||
	"usecode" = CAST( a.usecode as INTEGER ) -- the original data is VARYING
 | 
						"usecode" = CAST( a.usecode as INTEGER ) -- the original data is VARYING
 | 
				
			||||||
FROM addresses AS a
 | 
					FROM addresses AS a
 | 
				
			||||||
WHERE a.gid = b.gid;
 | 
					WHERE a.gid = b.gid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--select * from sonoma_county_building_outlines where "addr:housenumber" LIKE '%;%' OR "addr:street" LIKE '%;%';
 | 
					--select * from buildings where "addr:housenumber" LIKE '%;%' OR "addr:street" LIKE '%;%';
 | 
				
			||||||
-- result: 0, may not be working TODO
 | 
					-- result: 0, may not be working TODO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- try to identify addresses for buildings across multiple parcels: must be >50% on that parcel
 | 
					-- try to identify addresses for buildings across multiple parcels: must be >50% on that parcel
 | 
				
			||||||
@ -659,7 +659,7 @@ WITH addresses AS (
 | 
				
			|||||||
		array_to_string( ARRAY_AGG(DISTINCT p."addr:housenumber"), ';') AS addrno,
 | 
							array_to_string( ARRAY_AGG(DISTINCT p."addr:housenumber"), ';') AS addrno,
 | 
				
			||||||
		array_to_string( ARRAY_AGG(DISTINCT p."addr:street"), ';') AS street,
 | 
							array_to_string( ARRAY_AGG(DISTINCT p."addr:street"), ';') AS street,
 | 
				
			||||||
		COUNT(*) AS count
 | 
							COUNT(*) AS count
 | 
				
			||||||
	FROM sonoma_county_building_outlines AS b
 | 
						FROM buildings AS b
 | 
				
			||||||
	JOIN parcels__public_ AS p ON
 | 
						JOIN parcels__public_ AS p ON
 | 
				
			||||||
		ST_Intersects(b.loc_geom,p.loc_geom) AND
 | 
							ST_Intersects(b.loc_geom,p.loc_geom) AND
 | 
				
			||||||
		ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.5*ST_Area(b.loc_geom)
 | 
							ST_Area(ST_Intersection(b.loc_geom,p.loc_geom)) > 0.5*ST_Area(b.loc_geom)
 | 
				
			||||||
@ -670,7 +670,7 @@ WITH addresses AS (
 | 
				
			|||||||
		b.shape__are > 1000 -- assuming sqft
 | 
							b.shape__are > 1000 -- assuming sqft
 | 
				
			||||||
	GROUP BY p.gid
 | 
						GROUP BY p.gid
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
UPDATE sonoma_county_building_outlines AS b SET
 | 
					UPDATE buildings AS b SET
 | 
				
			||||||
	"addr:housenumber" = addrno,
 | 
						"addr:housenumber" = addrno,
 | 
				
			||||||
	"addr:street" = street
 | 
						"addr:street" = street
 | 
				
			||||||
FROM addresses AS a
 | 
					FROM addresses AS a
 | 
				
			||||||
@ -680,7 +680,7 @@ WHERE
 | 
				
			|||||||
-- TODO: here is where the second 226 is erroneously added
 | 
					-- TODO: here is where the second 226 is erroneously added
 | 
				
			||||||
-- the 0.9 slice of area is pretty liberal, we probably want closer to half?
 | 
					-- the 0.9 slice of area is pretty liberal, we probably want closer to half?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--select * from sonoma_county_building_outlines where "addr:housenumber" LIKE '%;%' OR "addr:street" LIKE '%;%';
 | 
					--select * from buildings where "addr:housenumber" LIKE '%;%' OR "addr:street" LIKE '%;%';
 | 
				
			||||||
-- result: 0, may not be working TODO
 | 
					-- result: 0, may not be working TODO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -691,14 +691,14 @@ WHERE
 | 
				
			|||||||
--
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- IF USING Overpass -> QGIS -> Postgres Dump:
 | 
					-- IF USING Overpass -> QGIS -> Postgres Dump:
 | 
				
			||||||
-- UPDATE sonoma_county_building_outlines AS b SET conflated = FALSE;
 | 
					-- UPDATE buildings AS b SET conflated = FALSE;
 | 
				
			||||||
-- UPDATE sonoma_county_building_outlines AS b SET conflated = TRUE
 | 
					-- UPDATE buildings AS b SET conflated = TRUE
 | 
				
			||||||
-- FROM osmquery_buildings_pgdump AS osm
 | 
					-- FROM osmquery_buildings_pgdump AS osm
 | 
				
			||||||
--     WHERE ST_Intersects(b.geom,osm.wkb_geometry)
 | 
					--     WHERE ST_Intersects(b.geom,osm.wkb_geometry)
 | 
				
			||||||
--     AND osm.building IS NOT NULL and osm.building != 'no';
 | 
					--     AND osm.building IS NOT NULL and osm.building != 'no';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- IF USING a direct OSM2PGSQL import i.e. norcal-latest.osm.pbf:
 | 
					-- IF USING a direct OSM2PGSQL import i.e. norcal-latest.osm.pbf:
 | 
				
			||||||
UPDATE sonoma_county_building_outlines AS b SET conflated = TRUE
 | 
					UPDATE buildings AS b SET conflated = TRUE
 | 
				
			||||||
FROM son_polygon AS osm
 | 
					FROM son_polygon AS osm
 | 
				
			||||||
	WHERE ST_Intersects(b.geom,osm.way) --TODO: loc_geom
 | 
						WHERE ST_Intersects(b.geom,osm.way) --TODO: loc_geom
 | 
				
			||||||
	AND osm.building IS NOT NULL and osm.building != 'no';
 | 
						AND osm.building IS NOT NULL and osm.building != 'no';
 | 
				
			||||||
@ -718,7 +718,7 @@ FROM son_polygon AS osm
 | 
				
			|||||||
--         "addr:street",
 | 
					--         "addr:street",
 | 
				
			||||||
--         "addr:unit",
 | 
					--         "addr:unit",
 | 
				
			||||||
--         (st_dump(loc_geom)).*
 | 
					--         (st_dump(loc_geom)).*
 | 
				
			||||||
--         FROM sonoma_county_building_outlines
 | 
					--         FROM buildings
 | 
				
			||||||
--         WHERE conflated
 | 
					--         WHERE conflated
 | 
				
			||||||
-- ) 
 | 
					-- ) 
 | 
				
			||||||
-- SELECT 
 | 
					-- SELECT 
 | 
				
			||||||
@ -751,7 +751,7 @@ FROM son_polygon AS osm
 | 
				
			|||||||
--         "addr:street",
 | 
					--         "addr:street",
 | 
				
			||||||
--         "addr:unit",
 | 
					--         "addr:unit",
 | 
				
			||||||
--         (st_dump(loc_geom)).*
 | 
					--         (st_dump(loc_geom)).*
 | 
				
			||||||
--         FROM sonoma_county_building_outlines
 | 
					--         FROM buildings
 | 
				
			||||||
--         WHERE NOT conflated --note: NOT
 | 
					--         WHERE NOT conflated --note: NOT
 | 
				
			||||||
-- ) 
 | 
					-- ) 
 | 
				
			||||||
-- SELECT 
 | 
					-- SELECT 
 | 
				
			||||||
@ -785,21 +785,21 @@ create index if not exists "geom_4326_idx" on VTATaz using GIST(geom_4326);
 | 
				
			|||||||
with hull as (
 | 
					with hull as (
 | 
				
			||||||
	select ST_ConvexHull(ST_Collect(geom)) as geom from (
 | 
						select ST_ConvexHull(ST_Collect(geom)) as geom from (
 | 
				
			||||||
		select geom
 | 
							select geom
 | 
				
			||||||
		from "sonoma_county_building_outlines"
 | 
							from "buildings"
 | 
				
			||||||
	) as geom)
 | 
						) as geom)
 | 
				
			||||||
	delete from VTATaz
 | 
						delete from VTATaz
 | 
				
			||||||
	using hull
 | 
						using hull
 | 
				
			||||||
	where not ST_Intersects(geom_4326, hull.geom);
 | 
						where not ST_Intersects(geom_4326, hull.geom);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Assign cluster to each data point
 | 
					-- Assign cluster to each data point
 | 
				
			||||||
update sonoma_county_building_outlines as t
 | 
					update buildings as t
 | 
				
			||||||
	set cid = taggedThing.key
 | 
						set cid = taggedThing.key
 | 
				
			||||||
	from (
 | 
						from (
 | 
				
			||||||
		select (row_number() over (partition by sonoma_county_building_outlines.gid order by ST_Distance(sonoma_county_building_outlines.loc_geom, geom_4326))) as rn,
 | 
							select (row_number() over (partition by buildings.gid order by ST_Distance(buildings.loc_geom, geom_4326))) as rn,
 | 
				
			||||||
		VTATaz.key, sonoma_county_building_outlines.gid
 | 
							VTATaz.key, buildings.gid
 | 
				
			||||||
		from sonoma_county_building_outlines
 | 
							from buildings
 | 
				
			||||||
		join VTATaz
 | 
							join VTATaz
 | 
				
			||||||
		on ST_Intersects(sonoma_county_building_outlines.loc_geom, geom_4326)
 | 
							on ST_Intersects(buildings.loc_geom, geom_4326)
 | 
				
			||||||
	) as taggedThing
 | 
						) as taggedThing
 | 
				
			||||||
	where t.gid = taggedThing.gid and rn = 1;
 | 
						where t.gid = taggedThing.gid and rn = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -807,7 +807,7 @@ update sonoma_county_building_outlines as t
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- Delete all address data inside the Santa Rosa city limits, because the city's address data is better and already inserted as POIs
 | 
					-- Delete all address data inside the Santa Rosa city limits, because the city's address data is better and already inserted as POIs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
update sonoma_county_building_outlines set
 | 
					update buildings set
 | 
				
			||||||
	"addr:housenumber" = NULL,
 | 
						"addr:housenumber" = NULL,
 | 
				
			||||||
	"addr:unit" = NULL,
 | 
						"addr:unit" = NULL,
 | 
				
			||||||
	"addr:street" = NULL,
 | 
						"addr:street" = NULL,
 | 
				
			||||||
@ -815,18 +815,18 @@ update sonoma_county_building_outlines set
 | 
				
			|||||||
	"addr:state" = NULL
 | 
						"addr:state" = NULL
 | 
				
			||||||
	from santa_rosa_boundary
 | 
						from santa_rosa_boundary
 | 
				
			||||||
		where santa_rosa_boundary.admin_level = '8'
 | 
							where santa_rosa_boundary.admin_level = '8'
 | 
				
			||||||
		and ST_Intersects(wkb_geometry, sonoma_county_building_outlines.loc_geom);
 | 
							and ST_Intersects(wkb_geometry, buildings.loc_geom);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- select * from sonoma_county_building_outlines join santa_rosa_boundary
 | 
					-- select * from buildings join santa_rosa_boundary
 | 
				
			||||||
-- 		on santa_rosa_boundary.admin_level = '8'
 | 
					-- 		on santa_rosa_boundary.admin_level = '8'
 | 
				
			||||||
-- 		and ST_Intersects(wkb_geometry, sonoma_county_building_outlines.loc_geom)
 | 
					-- 		and ST_Intersects(wkb_geometry, buildings.loc_geom)
 | 
				
			||||||
-- 		limit 1000;
 | 
					-- 		limit 1000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Drop TAZs that don't have any SC data in them
 | 
					-- Drop TAZs that don't have any SC data in them
 | 
				
			||||||
-- delete from VTATaz
 | 
					-- delete from VTATaz
 | 
				
			||||||
-- 	where key not in (
 | 
					-- 	where key not in (
 | 
				
			||||||
-- 		select distinct cid from sonoma_county_building_outlines
 | 
					-- 		select distinct cid from buildings
 | 
				
			||||||
-- 	);
 | 
					-- 	);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								trial.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								trial.py
									
									
									
									
									
								
							@ -6,7 +6,7 @@ def filterLayer(layer):
 | 
				
			|||||||
    #print(layer.GetName())
 | 
					    #print(layer.GetName())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #if layer.GetName() in ["buildingfootprint", "Site_Address_Points", "mergedbuildings", "namedparcels"]:
 | 
					    #if layer.GetName() in ["buildingfootprint", "Site_Address_Points", "mergedbuildings", "namedparcels"]:
 | 
				
			||||||
    if layer.GetName() in ["sonoma_county_building_outlines_filtered"]: # simplified_conflated_buildings   # _filtered
 | 
					    if layer.GetName() in ["buildings_filtered"]: # simplified_conflated_buildings   # _filtered
 | 
				
			||||||
        return layer
 | 
					        return layer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def filterTags(attrs):
 | 
					def filterTags(attrs):
 | 
				
			||||||
@ -31,7 +31,7 @@ def filterTags(attrs):
 | 
				
			|||||||
    if "usecode" in attrs and attrs["usecode"] != "":
 | 
					    if "usecode" in attrs and attrs["usecode"] != "":
 | 
				
			||||||
        #tags["x_son_imp:usecode"] = int(attrs["usecode"]) #TODO: remove
 | 
					        #tags["x_son_imp:usecode"] = int(attrs["usecode"]) #TODO: remove
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # SELECT count(*), usecode FROM public.sonoma_county_building_outlines group by usecode order by count desc;
 | 
					        # SELECT count(*), usecode FROM public.buildings group by usecode order by count desc;
 | 
				
			||||||
        # SELECT usecode, usecdesc, usectype FROM public.parcels__public_ group by usecode, usecdesc, usectype order by usecode asc;
 | 
					        # SELECT usecode, usecdesc, usectype FROM public.parcels__public_ group by usecode, usecdesc, usectype order by usecode asc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # big categories to catch all
 | 
					        # big categories to catch all
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								trial.sh
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								trial.sh
									
									
									
									
									
								
							@ -60,7 +60,7 @@ for intersects in false true; do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Filter export data to each CID
 | 
					        # Filter export data to each CID
 | 
				
			||||||
        for layer in "sonoma_county_building_outlines"; do
 | 
					        for layer in "buildings"; do
 | 
				
			||||||
            psql -h $PGHOST -U $PGUSER -v "ON_ERROR_STOP=true" --echo-queries --command="create or replace view \"${layer}_filtered\" as select * from \"${layer}\" where cid=${cid} and ${intersectsQuery};" "${DBNAME}"
 | 
					            psql -h $PGHOST -U $PGUSER -v "ON_ERROR_STOP=true" --echo-queries --command="create or replace view \"${layer}_filtered\" as select * from \"${layer}\" where cid=${cid} and ${intersectsQuery};" "${DBNAME}"
 | 
				
			||||||
        done
 | 
					        done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user