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 ... ?
MapPoint : was ist auf der aktuellen Karte an PINs
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: MapPoint : was ist auf der aktuellen Karte an PINs
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.
damit kann ich also schnell einen PushPin finden und seine Location
Den PushPin übergebe ich nun an;
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 ?
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) }
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
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 ?
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: MapPoint : was ist auf der aktuellen Karte an PINs
Ich habe (fast) eine Lösung, den irgendwo gibt es einen Unterschied in der QueryCircle Methode.
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
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
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
- Dateianhänge
-
- QueryCircle.jpg (285.25 KiB) 7989 mal betrachtet
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: MapPoint : was ist auf der aktuellen Karte an PINs
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 :-"
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 :-"
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: MapPoint : was ist auf der aktuellen Karte an PINs
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 ?
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 ?
gruss by OHR
Jimmy
Jimmy