MapPoint : was ist auf der aktuellen Karte an PINs

Rund um MS-MapPoint

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

MapPoint : was ist auf der aktuellen Karte an PINs

Beitrag 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 ... ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: MapPoint : was ist auf der aktuellen Karte an PINs

Beitrag 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 ? :-k
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: MapPoint : was ist auf der aktuellen Karte an PINs

Beitrag 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
Dateianhänge
QueryCircle.jpg
QueryCircle.jpg (285.25 KiB) 7287 mal betrachtet
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: MapPoint : was ist auf der aktuellen Karte an PINs

Beitrag 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 :-"
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: MapPoint : was ist auf der aktuellen Karte an PINs

Beitrag 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 ?
gruss by OHR
Jimmy
Antworten