0

foursquare はどのようなデータベースを使用していますか?
MySQL、Oracle、またはその他のことを意味しているわけではありません

グーグルマップから?

4

2 に答える 2

2

私が知る限り、4SQ はGoogle マップGeolocationを使用しています

あなたがテクノロジーに何を使用しているかはわかりませんが、Google マップと Bing マップで動作する非常に優れた「緯度/経度」ロケーターを作成しました。これは VB.NET にあり、緯度と経度を JSON として出力します。

Imports System.Runtime.Serialization
Imports System.Web
Imports System.Net
Imports System.Runtime.Serialization.Json
Imports System.Web.Script.Serialization

Namespace Utilities.Apis
    Public NotInheritable Class Geolocation
        ''# This is the object that we are going to store the latitude and
        ''# longitude contained in the API response.
        Private coordinates As Coordinates
        Public Sub New()
            coordinates = New Coordinates
        End Sub

        Private Const googleUrl As String = "http://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false"
        Private Const bingUrl As String = "http://dev.virtualearth.net/REST/v1/Locations?addressLine={0}&key={1}&CountryRegion={2}"
        Private Const bingKey As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

        Public Enum apiProvider
            Google = 1
            Bing = 2
        End Enum

        ''''# <summary>
        ''''# Gets the Latitude and Longitude of an address using either Bing or Google Geolocation
        ''''# </summary>
        ''''# <param name="Provider">ENUM apiProvider [Bing] or [Google]</param>
        ''''# <param name="Address">The address of the coordinates you'd like to locate</param>
        ''''# <param name="countryCode">Bing doesn't play nice outside the US without this. use "CA" for Canada</param>
        ''''# <returns>A JSON string using "Latitude" and "Longitude" from the Coordinates class</returns>
        Public Function GetLatLon(ByVal Provider As Integer,
                                  ByVal Address As String,
                                  Optional ByVal CountryCode As String = "CA") As String

            ''# If there happens to be some strange behavior with the placeholder,
            ''# we want to ensure that the "demo" content is not submitted to the
            ''# api.
            If Address = "6789 university drive" Then
                Return Nothing
            End If

            Address = HttpUtility.UrlEncode(Address)

            Dim url As String
            Dim responseType As Type
            If Provider = apiProvider.Bing Then
                url = String.Format(bingUrl, Address, bingKey, CountryCode)
                responseType = GetType(BingResponse)
            ElseIf Provider = apiProvider.Google Then
                url = String.Format(googleUrl, Address)
                responseType = GetType(GoogleResponse)
            Else
                ''# If for some reason, the apiResponse is NOT Google or Bing,
                ''# then we want to return Google anyways.
                url = String.Format(googleUrl, Address)
            End If

            ''# Initiate the Http Web Request to the respective provider
            Dim request = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)

            ''# Deflate the compressed (gzip'd) response
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate")
            request.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate

            ''# Serialize the response into it's respective Data Contract
            Dim serializer As New DataContractJsonSerializer(responseType)

            ''# Because the JSON Response from Google and Bing are drastically
            ''# different, we need to consume the response a little differently
            ''# for each API.  I'd like to figure out a way to shrink this a
            ''# little more, but at the same time, it's working. So I'm going to
            ''# leave it alone for now [Nov 28,2010]


            ''# Here we're handling the Bing Provider
            If Provider = apiProvider.Bing Then
                Dim res = DirectCast(serializer.ReadObject(request.GetResponse().GetResponseStream()), BingResponse)
                Dim resources As BingResponse.ResourceSet.Resource = res.resourceSets(0).resources(0)
                Dim point = resources.point
                With coordinates
                    .latitude = point.coordinates(0)
                    .longitude = point.coordinates(1)
                End With


                ''# Here we're handling the Google Provider
            ElseIf Provider = apiProvider.Google Then
                Dim res = DirectCast(serializer.ReadObject(request.GetResponse().GetResponseStream()), GoogleResponse)
                Dim resources As GoogleResponse.Result = res.results(0)
                Dim point = resources.geometry.location
                With coordinates
                    .latitude = point.lat
                    .longitude = point.lng
                End With
            End If

            ''# Serialize the coordinates and return the string
            Dim jsonSerializer = New JavaScriptSerializer
            Return jsonSerializer.Serialize(coordinates)
        End Function
    End Class

    <DataContract()>
    Public Class BingResponse
        <DataMember()>
        Public Property resourceSets() As ResourceSet()
        <DataContract()>
        Public Class ResourceSet
            <DataMember()>
            Public Property resources() As Resource()
            <DataContract([Namespace]:="http://schemas.microsoft.com/search/local/ws/rest/v1", name:="Location")>
            Public Class Resource
                <DataMember()>
                Public Property point() As m_Point
                <DataContract()>
                Public Class m_Point
                    <DataMember()>
                    Public Property coordinates() As String()
                End Class
            End Class
        End Class
    End Class

    <DataContract()>
    Public Class GoogleResponse
        <DataMember()>
        Public Property results() As Result()
        <DataContract()>
        Public Class Result
            <DataMember()>
            Public Property geometry As m_Geometry
            <DataContract()>
            Public Class m_Geometry
                <DataMember()>
                Public Property location As m_location
                <DataContract()>
                Public Class m_location
                    <DataMember()>
                    Public Property lat As String
                    <DataMember()>
                    Public Property lng As String
                End Class
            End Class
        End Class

    End Class
End Namespace

簡単に呼び出す方法を次に示します。

Geolocate.GetLatLon(Utilities.Apis.Geolocation.apiProvider.Google, "1234 Some Funky Street, Home Town, MI", "US")

そのため、最終的には、独自の位置情報と、Twitter またはエンド ユーザーのモバイル デバイス (たとえば、iPhone は、位置情報の送信を許可するかどうかを尋ねます) によって送信できる情報を組み合わせて使用​​します。 )。

于 2010-12-10T03:59:50.397 に答える
0

彼らは、ユーザーが新しい場所に入るのを頼りにしています。彼らはある時点でそれをインポートでシードした可能性があります。

于 2010-12-10T04:12:43.130 に答える