2012-04-09 9 views
2

Ich suche dies für eine Community Sublet-Werbung Website, aber theoretisch wäre der Algorithmus für jede lokale Suche ähnlich.Wie kann ich den dynamischen Standardradius für die Kartensuche basierend auf der Bevölkerungsdichte des Gebiets berechnen?

Je weniger der gesuchte Bereich durchsucht wird, desto höher sollte der Standardradius für die Suche sein. Auf der anderen Seite sollten Gebiete mit hoher Bevölkerungsdichte einen niedrigen Standardradius haben, um die Dinge lokal relevant zu halten.

Dies könnte eher eine mathematische Frage als eine Programmierung sein, aber Code ist sehr willkommen. Bis jetzt habe ich die Anzahl der Untervermietungen innerhalb von 15 Meilen von jeder Stadt oder jedem Dorf berechnet und diese in der Datenbank als Annäherung für die Dichte gespeichert. Ich wollte diese Nummer verwenden, um herauszufinden, wie weit die Suche gehen soll, wenn jemand nach der Stadt oder dem Dorf sucht.

Um eine vorgeschlagene Lösung zu testen, habe ich einige ungefähre Zahlen herausgezogen, die der Algorithmus aufstellen sollte. Wenn es viele Untervermietungen innerhalb von 15 Meilen von einem Punkt gibt, sagen wir 30k, möchte ich, dass der Standardradius ungefähr 3 Meilen beträgt. Wenn es nur sehr wenig 1 oder 2 gibt, sollte der Standardradius hoch bis zu 25 Meilen gehen, noch mehr Meilen, wenn es keine Orte in der Nähe gibt. Ein mittlerer Bereich mit etwa 1 Tsd. Untervermietung hätte einen Standardradius von 15 Meilen. Dies sind nur Beispiele, die Dichte wird natürlich mit einer Anzahl von Dingen in der Datenbank wachsen oder schrumpfen.

Population -> Default search radius 
0   -> very high (~60 miles or more) 
1   -> 25 miles 
1k   -> 15 miles 
30k  -> 3 miles 

Gehe ich in die richtige Richtung? Python oder PHP wäre für code-zentrierte Antworten bevorzugt.

Danke

+1

Hmmm, vielleicht ein k-Means Clustering-Algorithmus mit Abstand zwischen Punkten negativ für die Dichte gewichtet? –

Antwort

1

Ein vernünftiger Ansatz sei Regionen definieren, so dass sie die gleiche Anzahl von Menschen enthalten und dann wird es in jeder Region ungefähr die gleiche Anzahl der verfügbaren Wohnungen sein.

N = total number of people within a region 
d = population density of the region (taken to be what you list as population) 
A = Area of region 
R = Radius of the region A 

So N = d*A = d*pi*R*R, und wir wollen N konstant sein, so R = K*sqrt(1/D), wo K eine Konstante Ihre Zahlen gewählt ist übereinstimmen, oder etwa 500 Meilen:

diese mathematisch zu schreiben. Dann

30K -> 2.9 miles 
1K -> 16 miles 
    1 -> 500 miles 

So funktioniert es für die ersten beiden, wenn auch nicht der Extremfall einer Population von 1 (aber es ist nicht klar, dass 1 ist wirklich ein wichtiger Fall zu betrachten, sondern als ein besonderer Fall all seine besitzen). Wie auch immer, ich denke, dass diese Herangehensweise einen Sinn ergibt und zumindest etwas zu berücksichtigen gibt.

+0

Das ist wirklich gut, schönes Denken. –

+1

Nur eine Randnotiz, wenn jemand anderes in python 2.x dies tun möchte: Vergiss nicht '1/float (D)', da die Division nicht wie erwartet funktionieren wird –

Verwandte Themen