Frage

Ich habe also eine Tabelle mit einer Reihe verschiedener Adressen. Ich brauche einen Proc, der die Adressen in dieser Tabelle auswählt, die in Meilen von den in lat/langen Werten bestandenen Werten in einem bestimmten Abstand liegen.

Also Beispiel für meine Tabelle:

- messageId
- lat (float)
- long (float)

Proc geht in einem anderen lat/langen Paar (beide) vorbei floats auch) und eine int (Meilen)

ich habe das gefunden http://www.sqlteam.com/forums/topic.asp?topic_id=81360 Um die tatsächliche Formel zu berechnen, aber ich kann nicht herausfinden Id's der Adressen, die <= die Meilen (die ich eingehe), von der Lat/Long, die ich eingehe.

Kann ich hier Hilfe bekommen?

Vielen Dank!

War es hilfreich?

Lösung

SQL Server 2008

Verwenden der Raumfunktion STDistance Rückstand in Metern

Geographie :: Point ( @lat1, @lon1, 4326) .stdistance (Geographie :: Point ( @lat2, @lon2, 4326))

Andere Tipps

Ich habe tatsächlich einen kurzen geschrieben Blogeintrag Vor einiger Zeit zu diesem Zweck. Grundsätzlich die Frage, die ich habe, lautet:

SELECT
  Name,
  Address,
  City,
  State,
  Latitude,
  Longitude,
  (
    ACOS(
      COS(@center_latitude * (PI()/180)) *
      COS(@center_longitude * (PI()/180)) *
      COS(Latitude * (PI()/180)) *
      COS(Longitude * (PI()/180)) +
      COS(@center_latitude * (PI()/180)) *
      SIN(@center_longitude * (PI()/180)) *
      COS(Latitude * (PI()/180)) *
      SIN(Longitude * (PI()/180)) +
      SIN(@center_latitude * (PI()/180)) *
      SIN(Latitude * (PI()/180))
    ) *
    (
      (@equatorial_radius * @polar_radius) /
      (
        SQRT(
          (@equatorial_radius * @equatorial_radius) -
          (
            (
              (@equatorial_radius * @equatorial_radius) -
              (@polar_radius * @polar_radius)
            ) *
            (
              COS(@center_latitude) *
              COS(@center_latitude)
            )
          )
        )
      )
    )
  ) AS Miles
FROM
  Places
WHERE
  Miles <= @search_radius

Geben Sie ihm den Mittelweg, die mittlere Länge und den Suchradius und Sie sollten gut sein. (Die Parameter für die äquatorialen und polaren Radien der Erde können natürlich hart codiert werden.)

Alles, was die Mathematik für die Krümmung der Erde, die Bevölkerung am Äquator usw. berücksichtigen soll, usw.

Sie können die Funktion einfach direkt in der SP verwenden ... Ich dachte:

CREATE PROCEDURE [FindPlaces](@lat float, @long float, @min_dist float) 
AS 

select messageId from yourtable
where dbo.F_GREAT_CIRCLE_DISTANCE(@lat, @long, lat, long) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top