StreetAdress zur GPS Position ? [erledigt]

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

StreetAdress zur GPS Position ? [erledigt]

Beitrag von AUGE_OHR »

hi,

wenn ich mit GetLocation(x,y) eine Location ermittle dann möchte ich die Adresse dazu haben ... wie ?
auf StreetAdress kann ich anscheinend nur zugreifen wenn es aus einem FindResult oder ähnlichen kommt.

wie bekomme ich von einem PushPin oder WayPoint, dessen Locatio ich habe, die Adresse ?

Code: Alles auswählen

...
   objResults := ::oMap:ActiveMap:???
   cAdress  := objResults:Item(1):Location:StreetAddress:Value 
Zuletzt geändert von AUGE_OHR am Mi, 02. Okt 2013 7:04, insgesamt 1-mal geändert.
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: StreetAdress zur GPS Position ?

Beitrag von AUGE_OHR »

hier eine Mögliche Lösung

Code: Alles auswählen

   oPushPin := ::oMap:ActiveMap:AddPushpin(oOldLoca,cMemo)
...
   // muss im Anzeige Bereich sein
   oPushPin:Goto()
...
   // x,y Koordinaten der Location
   aPoint[1] := ::oMap:ActiveMap:LocationToX(oPushPin:Location)
   aPoint[2] := ::oMap:ActiveMap:LocationToY(oPushPin:Location)

   // Objecte bei den X,Y Koordinaten für ein FindResult Object
   objResults := ::oMap:ActiveMap:ObjectsFromPoint(aPoint[1]+1,aPoint[2]+1)
...
   FOR i := 1 TO nLen
      ERRORBLOCK( { | e | BREAK( e ) } )
      BEGIN SEQUENCE
         // this may crash ...  
         cAdress  := objResults:Item(i):Location:StreetAddress:Value
         IF SUBSTR(cAdress,1,4) = "Tel:"
             // sometimes 1st Item is a Telefon Number
         ELSE
             // exit here
             i := nLen
         ENDIF
      RECOVER USING oError

      END SEQUENCE
      ERRORBLOCK( bSaveError )
   NEXT
zu beachten das die Ergebnisse stark von der verwendeten Altitude abhängig ist !

Wenn man zu kleine Altitude Werte verwendet findet er nur was wenn es sich exact mit einer Strasse deckt.
Wenn sich das Fahrzeug auf dem Grundstück ( Parkplatz ) befindet findet er damit keine Strasse bei Altitude = 1
Wenn man Altitude zu gross wählt bekommt man evtl. nur den Ort/PLZ oder die Landstrassen Bezeichnung aber nicht den Namen.

Ich setze PushPins dort wo ich in den GPS Tracking Daten eine Pause (gleiche Koordinaten / Zeitstempel Sprung) habe.
Dies ist meistens an einer Tankstelle oder Rasthaus (Essen/Toilette).

Code: Alles auswählen

// finde POI in der Nähe
objNearby := oPushPin:Location:FindNearby(0.1)
IF NIL <> objNearby
   nLen := objNearby:Count()
   IF nLen > 0
      FOR i := 1 TO nLen
         bSaveError := ERRORBLOCK()
         ERRORBLOCK( { | e | BREAK( e ) } )
         BEGIN SEQUENCE
            cAdress  := objNearby:Item(i):Location:StreetAddress:Value
            AADD(aNearby,{i,cAdress})
         RECOVER USING oError
         END SEQUENCE
         ERRORBLOCK( bSaveError )
      NEXT
   ENDIF
ENDIF
...
RETURN aNearby
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: StreetAdress zur GPS Position ? [erledigt]

Beitrag von AUGE_OHR »

ein interessantes Beispiel für einen Parkplatz
MP_StreetAdress.PNG
MP_StreetAdress.PNG (14.43 KiB) 7468 mal betrachtet
die Breite sind ca. 400m, die gedachte orange Line sind ca. 100m.
In diesem Fall ist die Altitude "zu gross" eingestellt d.h. man müsste näher ran ... oder nimmt den PIO der in 100m Umkreis ist.
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: StreetAdress zur GPS Position ? [erledigt]

Beitrag von AUGE_OHR »

gleiches Thema aber andere Situation wo der "Workaround" nicht hin haut :(

das ist der "normale" Code wenn man über eine Adresse geht

Code: Alles auswählen

   oResult := ::oMap:ActiveMap:FindAddressResults( ;
                                                mStrasse, ;
                                                mOrt, ;
                                                NIL, ;
                                                NIL, ;
                                                mPLZ, ;
                                                SeekEU( mLAND ) )
   ...
   oLocation := oResult:Item( nWahl )
   oPushPin := ::oMap:ActiveMap:AddPushpin( oLocation, cKdnr )
damit bekommt man dies Resultat
StreetAdress.JPG
StreetAdress.JPG (7.01 KiB) 7115 mal betrachtet
ganz oben ist die Kunden-Nummer 00001, dann kommt das Resultat von FindAddressResults() -> Adresse.

getrennt wird das ganze, in der Höhe der Lila Linie, von oPushPin:Note was mein "Memo" darstellt.
nun ist das "Memo" austauschbar z.b. letzter Konto-Stand aber nicht die Adresse (oberhalb der Lila Linie )

nun möchte ich aus den GPS das selbe Resultat wie mit einer Adresse / FindAddressResults() wenn man damit einen PushPin setzt

Code: Alles auswählen

   oLocation := ::oMap:ActiveMap:GetLocation(VAL(cXPos) ,VAL(cYPos),nAltitude)
   //
   // wie bekomme ich die Street Informationen "in" das Location Object ?
   //
   oPushPin  := ::oMap:ActiveMap:AddPushpin( oLocation, mKdnr )
aber das resultat ist "nur" so
GPS_NoStreetAdress.JPG
GPS_NoStreetAdress.JPG (4.22 KiB) 7115 mal betrachtet
es fehlt mir also die Adresse bis zur Lila Linie (danach kommt das Memo) :banghead:
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: StreetAdress zur GPS Position ? [erledigt]

Beitrag von AUGE_OHR »

so nun habe ich die Lösung

Code: Alles auswählen

// Location mittels GPS Position ermitteln
   oLocation := ::oMap:ActiveMap:GetLocation(VAL(cXPos) ,VAL(cYPos),nAltitude)

// sammeln -> :Union( ::aLocation ):goto()
   AADD(::aLocation,oLocation)

// muss auf der Karten Position sein
   oLocation:Goto()

// x,y Koordinaten der Location auf der Karte ! ( nicht GPS )
   aPoint[1] := ::oMap:ActiveMap:LocationToX(oLocation)
   aPoint[2] := ::oMap:ActiveMap:LocationToY(oLocation)

// Objecte bei den X,Y Koordinaten auf der Karte für ein FindResult Object
   oResults  := ::oMap:ActiveMap:ObjectsFromPoint(aPoint[1]+1,aPoint[2]+1)

// nicht die Location
// oPushPin  := ::oMap:ActiveMap:AddPushpin( oLocation, mKdnr )
/*************************************************/
// sondern das erste Item vom Result Object
   oPushPin  := ::oMap:ActiveMap:AddPushpin( oResults:Item(1), mKdnr )
wichtig ist dabei das nAltitude eine niedrigen Wert hat was auf

Code: Alles auswählen

::oMap:Units := geoKm
bezogen ist.

leider ergibt sich eine Ungenauigkeit da Mappoint "nur" mit 5 Dezimalstellen arbeitet statt 8 ...
obwohl die meisten Hausnummer stimmen "verrutscht" es bei einigen um +/- eine Hausnummer ...
bei einem Restaurant oder Laden Geschäft wird man das vor Ort wohl merken.

p.s. aber die Strassen Seite stimmt ;)
z.b. 77 statt 75 also auf der rechten Seite wenn man Richtung Zentrum fährt.
gruss by OHR
Jimmy
Antworten