2011-01-24 22 views
6

मेरे पास एक "सामाजिक" भौगोलिक जागरूक एप्लिकेशन है जो मैं विकसित कर रहा हूं, और लाखों डॉलर का सवाल यह है कि मैं "मेरे स्थान" के "एक्स मील के भीतर" आइटमों का एक सेट कैसे सूचीबद्ध करूं, क्योंकि वहां हैं ऐसा करने वाले लाखों एप्लिकेशन, मुझे यह जानकर आश्चर्य हुआ कि केवल Google मानचित्र API के लिए एक नि: शुल्क वेब सेवा है, और इससे भी बदतर, यह केवल Google मानचित्र के भीतर उपयोग किए जाने पर ही समर्थित है। तो क्या मुझे अपना दूरी कैलक्यूलेटर विकसित करना है? क्या कोई मुफ्त/सशुल्क सेवा है जो मुझे कम से कम एक पते को XY समन्वय में बदलने की अनुमति देगी?दो पते के बीच दूरी कैसे खोजें? (जावा सर्वर साइड)

मुझे यकीन है कि वहाँ एक उद्योग मानक समाधान है (या तो मुफ्त या वाणिज्यिक), लेकिन मैं अभी तक आप एसक्यूएल (आप यह नहीं कहा) ... मुझे लगता है कि प्रयोग कर रहे हैं अगर यह

उत्तर

4

असल में, Google के पास web services है जो आप इसे प्राप्त करने के लिए सर्वर पक्ष पर उपयोग कर सकते हैं।

सबसे पहले आप अक्षांश/देशांतर समन्वय जोड़े में पते का अनुवाद करने के लिए Geocoding API का उपयोग करना चाहेंगे। फिर आप उन लोगों का उपयोग कर सकते हैं, हालांकि आप फिट बैठते हैं (यानी यदि आप उन्हें संग्रहीत कर रहे हैं तो अपने डेटाबेस के विरुद्ध)

यदि आस-पास की वस्तुओं को आप खोजना चाहते हैं तो दुनिया में वास्तविक स्थान हैं जिन्हें Google शायद पहले ही जानता है, आप Google की कोशिश कर सकते हैं नया Places API जो आपको एक निश्चित त्रिज्या के भीतर परिणाम दे सकता है।

आपको ध्यान रखना चाहिए कि दूरी से अक्षांश/देशांतर निर्देशांक के अनुवाद के लिए कुछ गणित की आवश्यकता होती है, लेकिन मुझे लगता है कि यह कुछ बाहरी सर्वर पर खेती करने के बजाय स्थानीय रूप से सर्वोत्तम रूप से किया जाता है (सर्वर पर आपका आवेदन चल रहा है) यह केवल गणित है। गुगलिंग ने this का उत्पादन किया।

4

को खोजने के लिए कर रहा हूँ कर रहा हूँ

ALTER FUNCTION [dbo].[DistanceBetween] (@Lat1 as real, 
       @Long1 as real, @Lat2 as real, @Long2 as real) 
RETURNS real 
AS 
BEGIN 

DECLARE @dLat1InRad as float(53); 
SET @dLat1InRad = @Lat1 * (PI()/180.0); 
DECLARE @dLong1InRad as float(53); 
SET @dLong1InRad = @Long1 * (PI()/180.0); 
DECLARE @dLat2InRad as float(53); 
SET @dLat2InRad = @Lat2 * (PI()/180.0); 
DECLARE @dLong2InRad as float(53); 
SET @dLong2InRad = @Long2 * (PI()/180.0); 

DECLARE @dLongitude as float(53); 
SET @dLongitude = @dLong2InRad - @dLong1InRad; 
DECLARE @dLatitude as float(53); 
SET @dLatitude = @dLat2InRad - @dLat1InRad; 
/* Intermediate result a. */ 
DECLARE @a as float(53); 
SET @a = SQUARE (SIN (@dLatitude/2.0)) + COS (@dLat1InRad) 
       * COS (@dLat2InRad) 
       * SQUARE(SIN (@dLongitude/2.0)); 
/* Intermediate result c (great circle distance in Radians). */ 
DECLARE @c as real; 
SET @c = 2.0 * ATN2 (SQRT (@a), SQRT (1.0 - @a)); 
DECLARE @kEarthRadius as real; 
/* SET kEarthRadius = 3956.0 miles */ 
SET @kEarthRadius = 6376.5;  /* kms */ 

DECLARE @dDistance as real; 
SET @dDistance = @kEarthRadius * @c; 
return (@dDistance); 
END 


ALTER FUNCTION [dbo].[NearestPeople] 
    (
    @lat real, 
    @long real, 
    @maxdist real 
    ) 
RETURNS TABLE 
AS 
    RETURN 
    SELECT  Person.ID 
    FROM  Person 
    WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) < @maxdist 

मैं तो इन एसक्यूएल कार्यों सर्वर से इस तरह सी # में का उपयोग करें:: मैं NerdDinner परियोजना से कॉपी किया

public IQueryable<Person> FindNearbyPeople(float latitude, float longitude, float maxdistance) 
{ 
    var people = from person in FindAllPeople() 
       join i in db.NearestPeople(latitude, longitude, maxdistance) 
       on person.ID equals i.ID 
       select person; 

    return people; 
} 

है कि मुझे जो बताता है (इस मामले में, लोगों) के करीब है मुझे अधिकतम दूरी के भीतर।

यह मुफ़्त संस्करण है। मुझे लगता है कि SQL Server 2008 इसे भौगोलिक पैकेज

4

तुम भाग्यशाली हो और आप mysql या PostgreSQL जो दोनों स्थानिक सक्षम डेटाबेस का उपयोग कर रहे हैं आप them.For mysql के खिलाफ स्थानिक प्रश्नों निष्पादित कर सकते हैं अगर वहाँ spatial extensions कर रहे हैं और PostgreSQL के लिए वहाँ postgis है।
यदि आप मैन्युअल रूप से जाने का निर्णय लेते हैं तो कृपया question पर हेड अप के लिए देखें। साथ ही मुझे समझ में नहीं आता कि Google स्थान एपीआई आपकी मदद कर सकता है क्योंकि आप अपने डेटा को त्रिज्या के भीतर और Google स्थानों पर नहीं देख रहे हैं। चीयर्स

3
  1. आप "क्रो फ्लाइज ऐज़" (सीधी रेखा) दूरी, या दूरी/समय ड्राइविंग करना चाहते हैं?

  2. मैपक्वेट का एपीआई आसान लगता है क्योंकि आप केवल एक क्वेरी स्ट्रिंग का उपयोग कर सकते हैं।

एक अन्य विकल्प geocoder.us (या .ca अगर कनाडा)

है
संबंधित मुद्दे