0

私は現在、Visual Studio 2010 で asmx Web サービスとして Visual Basic で構築した Web サービスを持っています。現在、Android アプリで Web サービスをクエリすると、指定された数のアドレスがデータベースから取得されます。Androidアプリがユーザーの現在の場所をWebサービスに渡し、データベース内の最も近い住所の10のリストを返すようにする必要がありますが、どうすればよいですか?

以下は、そのクエリがデータベースである方法です。

<WebMethod()> _
Public Function GetFuelStops(ByVal skip As Integer, ByVal take As Integer) As FuelStop()
    Dim resultList = New List(Of FuelStop)()

    Using sqlCon As New SqlConnection()
        sqlCon.ConnectionString = "Data Source=(local);Initial Catalog=****;User ID=****;Password=***(***"
        Dim sql = <sql>
            SELECT
                [Physical_Address_Street]
                , [Physical_Address_Local]
                , [Physical_Address_State]
                , [Physical_Address_Zip]
                , [Phone_Number]
            FROM Gas_Stations
            WHERE Location_Type = 1
            </sql>

        Dim command As New SqlCommand()
        command.CommandText = CStr(sql)
        command.Connection = sqlCon
        sqlCon.Open()

        Using reader = command.ExecuteReader()
            While reader.Read()
                Dim fuelStop = New FuelStop()
                fuelStop.Physical_Address_Street = reader.GetString(0)
                fuelStop.Physical_Address_Local = reader.GetString(1)
                fuelStop.Physical_Address_State = reader.GetString(2)
                fuelStop.Physical_Address_Zip = reader.GetString(3)
                fuelStop.Phone_Number = reader.GetString(4)

                resultList.Add(fuelStop)
            End While
        End Using
    End Using
    Return resultList.Skip(skip).Take(take).ToArray()
4

1 に答える 1

1

アプリで GPS を有効にする必要があります (現在の位置座標をトリガーします)。つまり、緯度と経度です。

一方、データベース テーブルには住所ごとに緯度と経度の値が必要です。これらの緯度と経度の値は距離の比較に使用されるためです。

緯度/経度の値をすべて入手したら、クエリで sin/cos 式を使用して、データベースから上位 5 件または上位 10 件のレコードを返す必要があります。

乾杯

于 2013-04-24T02:07:20.823 に答える