Seite 1 von 1
MapPoint : was ist auf der aktuellen Karte an PINs
Verfasst: Sa, 11. Okt 2008 8:37
von AUGE_OHR
moin,
so langsam fängt MapPoint an "Sinn" zu machen ... und dann kommen auch die komplizierteren
Fragen:
Ich hab also irgendeinen Karten Ausschnitt gewählt und will an "die" PINs die ich gerade sehe :
a.) dazu müsste ich wohl wissen wie die aktuellen KM X-Y Ausmasse der Karte sind (Radius ?)
b.) die PINs dann aus dem gesamten Array "aussortieren" und anzeigen mit :Note
... ich denke ein "click" auf die Karte als Startpunkt könnte "nützlich" sein wegen der Location ?
Den PushPin habe ich die Kunden ID gegeben so das ich die leicht identifizieren kann. Ich habe
den aber auch Symbol verpasst und zwar verschiedene ... wie kann ich alle mit Symbol = 200
"ausfiltern", oder soll ich das über meine DBF machen ?
wie kann ich eigentlich einen PushPin Hide()n / Show()n ... ?
Re: MapPoint : was ist auf der aktuellen Karte an PINs
Verfasst: Di, 14. Okt 2008 8:05
von AUGE_OHR
hi,
ein Möglichkeit scheint die
QueryCircle Methode zu sein.
Ich habe ja nun meine
PushPin´s auf der "präparierten" Karte wobei der
Name die Kunden ID ist.
Nun habe ich ein SLE wo man eine Kunden ID eingeben kann.
Code: Alles auswählen
{|| oPushPin := ::oMap:ActiveMap:FindPushpin( ::oDlgMap:oSeek:Getdata() ),;
::ShowRadius(oPushPin) }
damit kann ich also schnell einen
PushPin finden und seine
Location
Den PushPin übergebe ich nun an;
Code: Alles auswählen
METHOD XbMap:ShowRadius(oPushPin,nRadius)
LOCAL oLoc
DEFAULT nRadius TO 10
IF VALTYPE(oPushPin) = "O"
oLoc := oPushPin:Location
ELSE
RETURN
ENDIF
IF ::oPinRec = NIL
ELSE
// lösche alle "alten" Anzeigen
::oPinRec:MoveFirst()
DO WHILE .NOT. ::oPinRec:EOF()
// kein SLEEP notwendig bei None :)
::oPinRec:Pushpin:BalloonState := geoDisplayNone
::oPinRec:MoveNext()
ENDDO
ENDIF
oPushPin:GoTo()
// gibt es einen Zusammenhang zwischen "Höhe" und Radius ?
::oMap:ActiveMap:Altitude := nRadius
// Abfrage was sich in dem Radius befindet
::oPinRec := ::oPinMap:QueryCircle(oLoc,nRadius)
DO WHILE .NOT. ::oPinRec:EOF()
::oPinRec:Pushpin:BalloonState := geoDisplayBalloon
// muss sein sonst knallt es ...
SLEEP(10)
::oPinRec:MoveNext()
ENDDO
RETURN self
das funktioniert auch sehr schön, aber ...
innerhalb einer City zeigt er mir bei 10 KM "hunderte" an, während "auf dem platten Land" er evtl.
keinen findet innerhalb von 10KM ... jemand eine Idee wie man das "intelligent" lösen kann ?
Re: MapPoint : was ist auf der aktuellen Karte an PINs
Verfasst: Mi, 15. Okt 2008 6:12
von AUGE_OHR
Ich habe (fast) eine Lösung, den irgendwo gibt es einen Unterschied in der
QueryCircle Methode.
Code: Alles auswählen
DO WHILE .T.
oNearBy := oLoc:FindNearby(::oDlgMap:nRadius)
iMax := oNearBy:Count()
IF iMax > 6
FOR i := 1 TO iMax
IF i = 7
// maximum GeoUnit = KM
nValue := oLoc:DistanceTo( oNearBy:item(i):Location() )
EXIT
ENDIF
NEXT
EXIT
ELSE
::oDlgMap:nRadius := ::oDlgMap:nRadius * 2
ENDIF
ENDDO
// Spinbutton Anzeige, leider ohne Komma
::oDlgMap:oRadius:Setdata(nValue)
oPushPin:GoTo()
// so "passt" der "Kreis" in die Anzeige
::oMap:ActiveMap:Altitude := nValue*2*2
// so und hier nun die Abfrage
::oPinRec := ::oPinMap:QueryCircle(oLoc,nValue)
i := 0
DO WHILE .NOT. ::oPinRec:EOF()
::oPinRec:Pushpin:BalloonState := geoDisplayBalloon
i++
IF i = 7
// hier muss ich ihn "manuell" rauswerfen weil er "mehr" hat ???
EXIT
ELSE
SLEEP(20)
ENDIF
::oPinRec:MoveNext()
ENDDO
In der ersten Schleife verwende ich die Methode
FindNearby() um "Meine Pins" (wie heissen die in
der englischen Version ? ) zu finden wo bei es 6 sein sollen. Da die Einträge nach Entfernung
sortiert vorliegen (die nächsten am Anfang) ermittel ich mit
DistanceTo() die "maximale"
Entfernung des 6st. Kunden. Soweit so gut ...
In der zweiten Schleife ändere ich nun den
BalloonState und lassen ihn das anzeigen ... aber er
zeigt mir "mehr" als die 6 an ... ?
Nun hab ich "manuell" mal nach Infomationen gesucht unb bei ca. 10 KM (statt 8KM) die anzeigten
14 (statt 6) gefunden die mir durch
QueryCircle() anzeigt würden ... siehe Bild
Re: MapPoint : was ist auf der aktuellen Karte an PINs
Verfasst: Mi, 15. Okt 2008 10:26
von AUGE_OHR
hi,
nun hab ich es kapiert : :FindNearby() setzt den "gelben Kreis" und nicht QueryCircle() wie ich
dachte ... und der Wert ist immer x*2.
Wenn ich also den letzten KM Wert nehme und den dann nochmal durch FindNearby(KM) jage
bekomme ich den richtigen "gelben Kreis" angezeigt :-"
Re: MapPoint : was ist auf der aktuellen Karte an PINs
Verfasst: Sa, 18. Okt 2008 6:53
von AUGE_OHR
hi,
in dem Bild oben ist doch links ein Spinbutton zu sehen ... kommt an den "ran" den der steht immer
auf 1 wenn ich den Panestate einschalte.
dito hab ich doch ein TreeView und das ist am Anfang "collapsed" also "zu" ... ich hätte es gerne
gleich "geöffnet" ... leider weiss ich nicht wie ich an das Handle rankomme.
wer hat eine Tip ?