The second public proof city, and the enrichment example: Redondo Beach's hub is parcel-grained -- its land-use layer carries the zoning code on every polygon, so the zoning zones bucket by code and double as the basemap's parcel texture, the first use of that role. General Plan designations and council districts ride the zones, the district boundary lines draw the accent, and the parks earn pins under a newly vendored Maki glyph. Field names verified against the live services; its zoning dataset is marked for report enrichment.
- commit
- dacc652f0846f103972313e65f43259ca97382c4
- parent
- 0ae0dc4d945b8e4e9e6c8829d1ebfe5d969086b8
- author
- Dami <dami.etoile@gmail.com>
- kind
- feat risk score 1.1 of 3, Jev's estimate
| M | internal/ | 81 | ++++++++++++++++++++++++++++++- |
| A | internal/ | 4 | + |
@@ -115,7 +115,86 @@ type City struct {
115115 // init function there adding to this map curates privately what this table116116 // curates publicly.117117 var Cities = map[string]City{118- "bend-or": bend,118+ "bend-or": bend,119+ "redondo-beach-ca": redondoBeach,120+}121+122+// redondoBeach is the City of Redondo Beach, California -- the enrichment123+// proof city, chosen because it is the one city the Zoneomics developer124+// sandbox answers for, and it publishes its own ArcGIS hub to be enriched.125+// Its land-use layer is parcel-grained and carries the zoning code on every126+// polygon, so the zoning zones bucket by code and double as the basemap's127+// parcel texture. Field names were verified against the live services.128+var redondoBeach = City{129+ Slug: "redondo-beach-ca",130+ Title: "Redondo Beach, California",131+ HubBase: "https://city-of-redondo-beach-gis-redondobeachgis.hub.arcgis.com",132+ MaxZoom: 6,133+ BBox: [4]float64{-118.4060, 33.8110, -118.3490, 33.8985},134+ Datasets: []Dataset{135+ {136+ Slug: "land-use", Title: "Zoning",137+ ItemID: "1d185d3b4bfd43eb9d78ff6c36d4062b", Layer: 3,138+ Geometry: "polygon",139+ Keep: []string{"OBJECTID", "ZONINGCODE", "LANDUSECODE", "GENERALPLANCODE", "ZONEOVERLAY"},140+ ZoneOf: func(f Fields) ZoneKey {141+ code := strings.TrimSpace(f["ZONINGCODE"])142+ if code == "" {143+ return ZoneKey{}144+ }145+ return ZoneKey{Key: slugify(code), Title: code}146+ },147+ Zoneomics: true,148+ Role: "parcel",149+ },150+ {151+ Slug: "general-plan", Title: "General Plan",152+ ItemID: "1d185d3b4bfd43eb9d78ff6c36d4062b", Layer: 6,153+ Geometry: "polygon",154+ Keep: []string{"OBJECTID", "GENERALPLAN", "ZONECLASS", "ZONEOVERLAY"},155+ ZoneOf: func(f Fields) ZoneKey {156+ code := strings.TrimSpace(f["GENERALPLAN"])157+ if code == "" {158+ return ZoneKey{}159+ }160+ return ZoneKey{Key: slugify(code), Title: code, Subtitle: "General Plan"}161+ },162+ },163+ {164+ Slug: "council-districts", Title: "Council Districts",165+ ItemID: "51e571c695ca451999bd7c53097f7bd6", Layer: 0,166+ Geometry: "polygon",167+ Keep: []string{"OBJECTID", "District", "CouncilMember"},168+ ZoneOf: func(f Fields) ZoneKey {169+ number := strings.TrimSpace(f["District"])170+ if number == "" {171+ return ZoneKey{}172+ }173+ return ZoneKey{Key: "district-" + slugify(number),174+ Title: "Council District " + number,175+ Subtitle: strings.TrimSpace(f["CouncilMember"])}176+ },177+ },178+ {179+ Slug: "district-lines", Title: "Council District Boundaries",180+ ItemID: "12d292cd5f4c49838c0c812427ec7f2b", Layer: 0,181+ Geometry: "line",182+ Keep: []string{"OBJECTID"},183+ Role: "boundary",184+ },185+ {186+ Slug: "parks", Title: "Parks & Recreation",187+ ItemID: "6bd956cbe6134485a85a20b225a0e5f4", Layer: 1,188+ Geometry: "point",189+ Keep: []string{"OBJECTID", "name", "address", "facility_size", "web_desc"},190+ Group: "Recreation",191+ Icon: "maki/park",192+ TitleOf: func(f Fields) string { return f["name"] },193+ Describe: func(f Fields) string {194+ return join(" · ", f["address"], f["facility_size"], f["web_desc"])195+ },196+ },197+ },119198 }120199 121200 // bend is the City of Bend, Oregon -- the curated proof city, chosen for a@@ -0,0 +1,4 @@
1+2+<svg version="1.1" id="park" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">3+ <path d="M14,5.75c0.0113-0.6863-0.3798-1.3159-1-1.61C12.9475,3.4906,12.4014,2.9926,11.75,3
	c-0.0988,0.0079-0.1962,0.0281-0.29,0.06c-0.0607-0.66-0.6449-1.1458-1.3048-1.0851C9.8965,1.9987,9.6526,2.1058,9.46,2.28l0,0
	c0-0.6904-0.5596-1.25-1.25-1.25S6.96,1.5896,6.96,2.28C6.96,2.28,7,2.3,7,2.33C6.4886,1.8913,5.7184,1.9503,5.2797,2.4618
	C5.1316,2.6345,5.0347,2.8451,5,3.07C4.8417,3.0195,4.6761,2.9959,4.51,3C3.6816,2.9931,3.0044,3.659,2.9975,4.4874
	C2.9958,4.6872,3.0341,4.8852,3.11,5.07C2.3175,5.2915,1.8546,6.1136,2.0761,6.9061C2.2163,7.4078,2.6083,7.7998,3.11,7.94
	c0.2533,0.7829,1.0934,1.2123,1.8763,0.959C5.5216,8.7258,5.9137,8.2659,6,7.71C6.183,7.8691,6.4093,7.9701,6.65,8v5L5,14h5l-1.6-1
	v-2c0.7381-0.8915,1.6915-1.5799,2.77-2c0.8012,0.1879,1.603-0.3092,1.7909-1.1103C12.9893,7.7686,13.0025,7.6444,13,7.52
	c0.0029-0.0533,0.0029-0.1067,0-0.16C13.6202,7.0659,14.0113,6.4363,14,5.75z M8.4,10.26V6.82C8.6703,7.3007,9.1785,7.5987,9.73,7.6
	h0.28c0.0156,0.4391,0.2242,0.849,0.57,1.12C9.7643,9.094,9.0251,9.6162,8.4,10.26z"/>4+</svg>\ No newline at end of file