Soweit ich das in aller schnelle überflogen habe, ist dieser Algorithmus ein Sweeping Line Algorithmus von oben nach unten für eine Ebene mit Punkten. Jeder Punkt ist dabei ein Zentrum, genau. Und wenn ich so jetzt dieses Posting von dir nochmal lese, dann suchst du weniger nach Voronoi oder Thiessen-Polygon, sondern nach was anderem. (war aber auch nicht so ganz so einfach zu verstehen)
Das Frankfurter Problem würdest/könntest/solltest du dann einfach damit lösen, dass du Frankfurt Stadtmitte als Koordinatenpaar mitführst (aber im Normalfall nicht mit ausgibst).
Also kennst du das Polygon und möchtest dazu das Zentrum haben? Oder du kennst gar nichts, weder das Zentrum, noch das Polygon. Dann solltest du eine der beiden Unbekannten eliminieren.
Wenn du technisch beschreiben kannst, was ein Gebiet (eine Ebene begrenzt durch existente / virtuelle Koordinatenpaare) ausmacht und wie du die Mengen darin gewichtest. Wie ich schon andeutete, du kannst imaginäre Punkte, z.b. auf Stadt / Kreis / Region / Land / Staat / Kontinent Level definieren und dafür jeweils noch Einschränkungen für maximale Entfernung, Min-/Max-Anzahl von Koordinatenpaaren um ein Zentrum herum setzen. Aus der Gewichtung der Mengen und der Strecke zwischen den Punkten kannst du dann evt. schon eine "Verschiebung" des Ergebnisses ableiten. Die Gewichtung bekommst du mittels GROUP BY, COUNT() und WHERE aus deinen gespeicherten Daten.
Aber andere Frage: Muss es denn wirklich so kompliziert werden? Das Verhältnis Nutzen zu Aufwand ist dann ggf nicht mehr wirklich sinnvoll.
Ciao, Frank