Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PDOK-14231 #20

Open
wants to merge 9 commits into
base: main
Choose a base branch
from

Conversation

DKKepinski
Copy link

@DKKepinski DKKepinski commented Jul 6, 2022

Omschrijving

Als OZON wil ik uitgefilterde geometrieën geaggregeerd kunnen weergeven (POC)

geometrieen worden omgezet in POINT geom ipv verwijderd

https://dev.kadaster.nl/jira/browse/PDOK-14231

Type verandering

  • Nieuwe feature
  • Verbetering oude feature
  • Refactor
  • Breaking change (opzet/werking veranderd)

Checklist:

  • Ik heb de code in deze PR zelf nogmaals nagekeken
  • Ik heb mijn code beter achtergelaten dan dat ik het aantrof
  • De code is leesbaar en de moeilijke onderdelen zijn voorzien van commentaar
  • Ik heb de tests toegevoegd/uitgebreid indien nodig
  • Ik heb de tests gedraaid die de werking van mijn wijziging bewijst
  • De PDOK documentatie is bijgewerkt indien nodig.
  • Er zit geen gevoelig informatie in deze PR (wachtwoorden etc)

Als OZON wil ik uitgefilterde geometrieën geaggregeerd kunnen weergeven (POC)
@DKKepinski DKKepinski requested review from WouterVisscher and roelarents and removed request for WouterVisscher July 6, 2022 06:11
pkg/gpkg/gpkg.go Outdated
@@ -28,6 +28,10 @@ func (f *featureGPKG) UpdateGeometry(geometry geom.Geometry) {
f.geometry = geometry
}

func (f *featureGPKG) IsReduced(isReduced bool) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

misschien SetIsReduced of AddIsReduced

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

goeie, gefixed

@WouterVisscher
Copy link
Contributor

WouterVisscher commented Jul 6, 2022

om maar te beginnen... volgende keer iets vriendelijker branch name....
dit wil ik nooit meer tegenkomen "PDOK-14231_Als_OZON_wil_ik_uitgefilterde_geometrieën_geaggregeerd_kunnen_weergeven_(POC)" 😄

@WouterVisscher
Copy link
Contributor

WouterVisscher commented Jul 6, 2022

Als ik er nu zo over nadenk hebben we nu een sieve functie die "meer" doet dan alleen zeven.
Ik zou het zeven en vervangen graag terug zien in 2 aparte functies en die dan mogelijk te chainen met een channel
m.a.w. dat de solution van read->sieve->write dan iets kan worden als read->replace->sieve->write. Ook om op die manier te kijken/proberen of we de isReduced 'state' niet meer nodig hoeven te hebben.

m.b.t. de twpayne/go-geom package lijken er handige func() in te zitten, maar moeten we wel ff goed nadenken of we die moeten gebruiken of hoe we de bruikbare specifieke delen kunnen implementeren.

@@ -9,6 +9,8 @@ require (
github.com/urfave/cli/v2 v2.8.1
)

require github.com/twpayne/go-geom v1.4.1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

waarom een 2de spatial pkg?
is was go-spatial/geom niet voldoende?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ik heb de centroid berekening van de huidige als eerste geprobeerd, maar toen kreeg ik hele rare uitkomsten die ik niet kon verklaren. Infinity numbers, NaNs, hele hoge negatieve getallen (terwijl alle punten boven 0 waren) en als er een berekening uit kwam, dan klopte die niet. Na een dag proberen dacht ik even een ander pkg gebruiken, en die leverde wel output die ik verwacht (met als nadeel dat ik wat dingen moest doen om coordinaten om te zetten.

pkg/sieve.go Outdated
@@ -69,19 +74,54 @@ func writeFeaturesToTarget(postSieve chan Feature, kill chan bool, target Target
kill <- true
}

// getMultiPolygonCentroid returns Point with the centroid value of a multiPolygon
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

waar (behalve de test) wordt deze (getMultiPolygonCentroid) gebruikt?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ha, das inderdaad dubbel. die kan weg (opzet is paar keer gewijzigd)

return multiXyCoordinates
}

func makeCoord(point [2]float64) geometry.Coord {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hoe nodig is deze functie gezien die 1x maar wordt aangeroepen?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

niet, maar ik dacht dat het leesbaarder zou zijn

pkg/sieve.go Outdated
for _, p := range mp {
if sievedPolygon := polygonSieve(p, resolution); sievedPolygon != nil {
if sievedPolygon, b := polygonSieve(p, resolution); b == false {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(b== false) -> !b

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair, gefixed

@WouterVisscher
Copy link
Contributor

oja, voor z'n grote wijziging is het ook fijn als de README geupdate is (+voorbeeld)

@DKKepinski
Copy link
Author

om maar te beginnen... volgende keer iets vriendelijker branch name.... dit wil ik nooit meer tegenkomen "PDOK-14231_Als_OZON_wil_ik_uitgefilterde_geometrieën_geaggregeerd_kunnen_weergeven_(POC)" smile

haha, nja, het is wel makkelijk te herleiden naar jira ticket zo ;) maar ik ga nadenken over hoe dat in de toekomst beter kan

Als ik er nu zo over nadenk hebben we nu een sieve functie die "meer" doet dan alleen zeven. Ik zou het zeven en vervangen graag terug zien in 2 aparte functies en die dan mogelijk te chainen met een channel m.a.w. dat de solution van read->sieve->write dan iets kan worden als read->replace->sieve->write. Ook om op die manier te kijken/proberen of we de isReduced 'state' niet meer nodig hoeven te hebben.

m.b.t. de twpayne/go-geom package lijken er handige func() in te zitten, maar moeten we wel ff goed nadenken of we die moeten gebruiken of hoe we de bruikbare specifieke delen kunnen implementeren.

dat is wat ik initieel wilde (sieve en replace functie los an elkaar), alleen dan zit ik met multipolygon die leunt op polygon sieve. omdat mp uit p bestaat, moet ik op dat punt al beslissen: weglaten of omzetten naar een punt.

het is mij niet helemaal duidelijk wat stap sieve in read-replace-sieve-write doet, we doen of weglaten of vervangen, maar dat is op basis van de berekeningen die in sieve functie gebeuren.

moeten we niet een situatie hebben zo van read->moet_ik_iets_mee?-(ja)->moet_ik_weglaten_of_vervangen->dat_gene_doen->write?

@DKKepinski
Copy link
Author

Nog over de isReduced state: ik dacht dat het wenselijk was om zichtbaar te maken dat iets aangepast is. Het was iig handig om te hebben voor het testen ;)

Maar het leek mij ook netjes om te vermelden van "hey, deze informatie is bewerkt en niet 1-op-1 uit de data gehaald. Soort disclaimer eigenlijk

// multiPolygonSieve will split it self into the separated polygons that will be sieved before building a new MULTIPOLYGON
func multiPolygonSieve(mp geom.MultiPolygon, resolution float64) geom.MultiPolygon {
func multiPolygonSieve(mp geom.MultiPolygon, resolution float64) (geom.MultiPolygon, bool) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kun je de return values namen geven? voor leesbaarheid en dan worden ze ook meteen geinitialiseerd

mp := feature.Geometry().(geom.MultiPolygon)
mp, b := multiPolygonSieve(mp, resolution)

if b {
Copy link
Contributor

@roelarents roelarents Aug 15, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

een beetje verwarrend (voor mij) dat de b hier net omgedraaid is t.o.v. die bij polygon. ook omdat hij in multiPolygonSieve needsProcessing genoemd is, maar de geometry hier dan juist niet in de needsProcessing channel gaat.

mp := feature.Geometry().(geom.MultiPolygon)
var processedMultiPolygon geom.MultiPolygon
for _, p := range mp {
minArea := resolution * resolution
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

die kan minstens één regel omhoog

polygonCoords := getPolygonCoords(p)
if polygonCoords != nil {
polygon := geometry.NewPolygon(geometry.XY).MustSetCoords(polygonCoords)
centroidCoord, err := xy.Centroid(polygon)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

waarom de centroide van de polygoon? en niet van de bbox?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants