2009-03-12 10 views
9

क्या आप कुछ उपयोगिता या वेबसाइट जानते हैं जहां मैं इनपुट के रूप में मील में अमेरिकी शहर, राज्य और रेडियल दूरी दे सकता हूं और यह मुझे उस त्रिज्या के सभी शहरों को वापस कर देगा?किसी दिए गए त्रिज्या में नजदीक के शहरों को कैसे ढूंढें?

धन्यवाद!

+0

हो सकता है कि आप संपादित और "शहरों" का एक बेहतर परिभाषा दे सकता है पढ़ने के लिए सुनिश्चित करें? क्या आपका मतलब केवल नाम रखना है या क्या आपका मतलब आबादी केंद्र है? –

+0

इसे आज़माएं: http://www.cityradius.com/ त्रिज्या सीमित है लेकिन फिर भी यह बहुत अच्छा है। मैंने यह भी देखा: http://www.zip-codes.com/free-zip-code-tools.asp#radius –

उत्तर

0

मेरे पास कोई वेबसाइट नहीं है, लेकिन हमने इसे ओरेकल में डेटाबेस फ़ंक्शन के रूप में और एसएएस में सांख्यिकी मैक्रो के रूप में कार्यान्वित किया है। इसे केवल सभी शहरों और उनके lat और long के साथ एक डेटाबेस की आवश्यकता है।

2

xmethods.net पर विज्ञापित इस वेब सेवा पर नज़र डालें। इसे वास्तव में उपयोग करने के लिए सदस्यता की आवश्यकता होती है, लेकिन आपको जो चाहिए वह करने का दावा करता है।

प्रश्न के विवरण में विज्ञापित विधि:

GetPlacesWithin दिए गए स्थान से कुछ दूरी के भीतर स्थानों भू की एक सूची देता है। पैरामीटर्स: - स्थान का नाम (65 चार अधिकतम), राज्य - 2 अक्षर राज्य कोड ( ज़िप कोड के लिए आवश्यक नहीं), मील, दूरी टाइप दूरी पर दूरी - दूरी देखने के लिए: ज़िपकोड या शहर (किसी भी गांव, कस्बों, आदि सहित)।

http://xmethods.net/ve2/ViewListing.po?key=uuid:5428B3DD-C7C6-E1A8-87D6-461729AF02C0

2

आप http://geonames.usgs.gov से भू-अवस्थित शहरों/स्थानों के नामों की एक बहुत अच्छी डेटाबेस प्राप्त कर सकते हैं - एक उपयुक्त डेटाबेस डंप पाते हैं, तो यह आपके डीबी में आयात, और क्वेरी की तरह अपनी जरूरत बिल्कुल स्पष्ट है प्रदर्शन, अपने डीबीएमएस स्थानिक प्रश्नों किसी तरह का समर्थन करता है, विशेष रूप से अगर (जैसे की तरह Oracle Spatial, MySQL Spatial Extensions, PostGIS या SQLServer 2008)

यह भी देखें: how to do location based search

4

जीआईएस एक्सटेंशन के साथ ओरेकल, पोस्टजीआईएस, माइस्क्ल, जीआईएस एक्सटेंशन के साथ एसक्लाइट सभी इस प्रकार के प्रश्नों का समर्थन करते हैं।

आप कम से डाटासेट नज़र नहीं है, तो:

http://www.geonames.org/

5

यहाँ कैसे मैं यह कर रहा है।

आप शहर, सेंट, ज़िप कोड और उनके अक्षांश और अक्षांश की एक सूची प्राप्त कर सकते हैं। (मुझे अपने सिर के शीर्ष को याद नहीं किया जा सकता है जहां हमें हमारा मिला)

संपादित करें: http://geonames.usgs.gov/domestic/download_data.htm ऊपर वर्णित किसी की तरह शायद काम करेगा।

फिर आप त्रिज्या के आधार पर न्यूनतम और अधिकतम अक्षांश और अक्षांश की गणना करने के लिए एक विधि लिख सकते हैं, और उन न्यूनतम और अधिकतम के बीच के सभी शहरों के लिए क्वेरी पूछ सकते हैं। तब के माध्यम से लूप और दूरी की गणना और किसी भी है कि मेरे कोड का एक अंश है, उम्मीद है कि आप देख सकते हैं क्या हो रहा है त्रिज्या

double latitude1 = Double.parseDouble(zipCodes.getLatitude().toString()); 
double longitude1 = Double.parseDouble(zipCodes.getLongitude().toString()); 

//Upper reaches of possible boundaries 
double upperLatBound = latitude1 + Double.parseDouble(distance)/40.0; 
double lowerLatBound = latitude1 - Double.parseDouble(distance)/40.0; 

double upperLongBound = longitude1 + Double.parseDouble(distance)/40.0; 
double lowerLongBound = longitude1 - Double.parseDouble(distance)/40.0; 

//pull back possible matches 
SimpleCriteria zipCriteria = new SimpleCriteria(); 
zipCriteria.isBetween(ZipCodesPeer.LONGITUDE, lowerLongBound, upperLongBound); 
zipCriteria.isBetween(ZipCodesPeer.LATITUDE, lowerLatBound, upperLatBound); 
List zipList = ZipCodesPeer.doSelect(zipCriteria); 
ArrayList acceptList = new ArrayList(); 

if(zipList != null) 
{ 
    for(int i = 0; i < zipList.size(); i++) 
    { 
     ZipCodes tempZip = (ZipCodes)zipList.get(i); 
     double tempLat = new Double(tempZip.getLatitude().toString()).doubleValue(); 
     double tempLon = new Double(tempZip.getLongitude().toString()).doubleValue(); 
     double d = 3963.0 * Math.acos(Math.sin(latitude1 * Math.PI/180) * Math.sin(tempLat * Math.PI/180) + Math.cos(latitude1 * Math.PI/180) * Math.cos(tempLat * Math.PI/180) * Math.cos(tempLon*Math.PI/180 -longitude1 * Math.PI/180)); 

     if(d < Double.parseDouble(distance)) 
     { 
      acceptList.add(((ZipCodes)zipList.get(i)).getZipCd()); 
     } 
    } 
} 

में नहीं हैं हटा दें। मैं एक ज़िपकोड (मेरे डीबी में एक टेबल) के साथ शुरू करता हूं, फिर मैं संभावित मैचों को वापस खींचता हूं, और आखिरकार मैंने उन लोगों को बुझाया जो त्रिज्या में नहीं हैं।

0

शायद यह मदद कर सकता है। परियोजना हालांकि किलोमीटर में कॉन्फ़िगर किया गया है। आप

public List<City> findCityInRange(GeoPoint geoPoint, double distance) { 
    List<City> cities = new ArrayList<City>(); 
    QueryBuilder queryBuilder = geoDistanceQuery("geoPoint") 
      .point(geoPoint.getLat(), geoPoint.getLon()) 
      //.distance(distance, DistanceUnit.KILOMETERS) original 
      .distance(distance, DistanceUnit.MILES) 
      .optimizeBbox("memory") 
      .geoDistance(GeoDistance.ARC); 

    SearchRequestBuilder builder = esClient.getClient() 
      .prepareSearch(INDEX) 
      .setTypes("city") 
      .setSearchType(SearchType.QUERY_THEN_FETCH) 
      .setScroll(new TimeValue(60000)) 
      .setSize(100).setExplain(true) 
      .setPostFilter(queryBuilder) 
      .addSort(SortBuilders.geoDistanceSort("geoPoint") 
        .order(SortOrder.ASC) 
        .point(geoPoint.getLat(), geoPoint.getLon()) 
        //.unit(DistanceUnit.KILOMETERS)); Original 
        .unit(DistanceUnit.MILES)); 

    SearchResponse response = builder 
      .execute() 
      .actionGet(); 


    SearchHit[] hits = response.getHits().getHits(); 

    scroll: 
    while (true) { 

     for (SearchHit hit : hits) { 
      Map<String, Object> result = hit.getSource(); 
      cities.add(mapper.convertValue(result, City.class)); 
     } 

     response = esClient.getClient().prepareSearchScroll(response.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet(); 
     if (response.getHits().getHits().length == 0) { 
      break scroll; 
     } 
    } 

    return cities; 
} 

CityDAO.java

में इन संशोधित कर सकते हैं "LocationFinder \ src \ मुख्य \ संसाधन \ json \ cities.json" फ़ाइल बेल्जियम से सभी शहरों में शामिल है। यदि आप चाहें तो आप प्रविष्टियों को हटा या बना सकते हैं। जब तक आप नाम और/या संरचना नहीं बदलते, तब तक कोई कोड परिवर्तन आवश्यक नहीं होता है।

README https://github.com/GlennVanSchil/LocationFinder

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