Domino 9 und frühere Versionen > ND8: Entwicklung

Umkreissuche mit Koordinaten

(1/3) > >>

bikerboy:
Hallo,

ich arbeite gerade eine kleine GeoIntegration für unser CRM-System aus. Nun kann ich schon Adressen selektieren und mir mit der freundlichen Unterstützung von OpenStreetMap angucken.

Ich habe hier schon mal im Forum gesucht und gefunden, aber ich leider sind die meisten Downloadlinks mittlerweile hinfällig. Ulrich hat zum Beispiel seine Homepage aktualisiert und die Links auf seine Seite laufen bei mir ins Leere.

Nun zum Versuchsaufbau.

Ich habe in meinem CRM-System die Koordinaten zu jeder erfassten Addresse. Diese sind in Longitude und Latitude angegeben. Die Entfernung zwischen 2 Punkten konnte ich nach einigen Kramen in meinen Kopf wieder nachvollziehen (Zumindest meine ich dass es so geht). Die Tatsache, dass Luftlinie nicht direkt Strassenentfernung ist mal abgesehen.

Nun versuche Ich hier schon ne Weile eine SQL-Abfrage in eine @Formula zu pressen, was mir aber nicht wirklich gelingt.

Hier einmal die SQL- Abfrage.


--- Code: ---SELECT
    zc_zip,
    zc_location_name,
    ACOS(
         SIN(RADIANS(zc_lat)) * SIN(RADIANS(49.1))
         + COS(RADIANS(zc_lat)) * COS(RADIANS(49.1)) * COS(RADIANS(zc_lon)
         - RADIANS(10.75))
         ) * 6380 AS distance
FROM zip_coordinates
--- Ende Code ---
WHERE ACOS(
         SIN(RADIANS(zc_lat)) * SIN(RADIANS(49.1))
         + COS(RADIANS(zc_lat)) * COS(RADIANS(49.1)) * COS(RADIANS(zc_lon)
         - RADIANS(10.75))
         ) * 6380 < 10
--- Code: ---  AND zc_id <> 9024
ORDER BY distance;

--- Ende Code ---

Den Interessanten Teil habe ich mal hevor gehoben.

Nun zu meinem transferierten Code.


--- Code: ---Dim strQuery As String
Dim collSearch As NotesDocumentCollection

'strQuery = {@ACos( @Sin(} + FLDLATI + {/(180/@Pi)) * @Sin((} + strLati + {/ (180/@Pi)))+ @Cos(} +FLDLATI + {/(180/@Pi)) * @Cos(} + strLati + {/(180/@Pi)) * @Cos( (} + FLDLONG +  {/ (180/@Pi)) - (} + strLongi + {/ (180/@Pi))) * 6380 < 200)}
strQuery = {@ACos( @Sin(} + FLDLATI + {*(180/@Pi)) * @Sin((} + strLati + {* (180/@Pi)))+ @Cos(} +FLDLATI + {*(180/@Pi)) * @Cos(} + strLati + {*(180/@Pi)) * @Cos( (} + FLDLONG +  {* (180/@Pi)) - (} + strLongi + {* (180/@Pi))) * 6380 < 200)}
Set collSearch = Dbthis.Search(strQuery,Nothing,0)

--- Ende Code ---

Leider gibt es in den @Functions keine @Radian() oder dergleichen. Daher der diletantische Versuch RADIANS gegen
--- Code: ---/(180/@Pi)
--- Ende Code ---
oder
--- Code: ---*(180/@Pi)
--- Ende Code ---
zu ersetzen.

Naja wer hätte es gedacht die Formel findet in beiden Fällen keine Dokumente zurück. Daher die Frage. Könnt ihr aushelfen? Hat das schon jemand mal umgesetzt ?

Kadlec:
Kommt den bei Deinem "Diletantischem" Versuch ein richtiger Wert raus?
Den Du dann auch finden könntest?

Boris

pram:
Lass dir strQuery doch mal ausgeben und schreib es testweise (ohne den < 200 Vergleich) in ein berechnetes Feld und schau ob/was da überhaupt raus kommt.

Ich hab mal grob drüber gekuckt, die Formel sollte passen
http://www.koordinaten.de/informationen/formel.shtml
wobei die Umrechnung wohl falsch ist. Probier mal ... @Sin(Feldname / 180 * @pi)... (das sollte passen)

Gruß
Roland

bikerboy:
@Kadlec

Es ist ja eine Suche über eine DB werde mal zwei punkte gegeneinander rechnen lassen und dann gucken was die Formel ausgibt.

@Pram

Also wäre mein erster Query der momentan auskommentiert ist der richtige

pram:
Ja, zumindest funktionierts so bei uns.
Sind deine Felder auch echte Zahlenfelder?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln