2012-01-07 19 views
6

मेरे पास संयुक्त राज्य अमेरिका के विशिष्ट भौगोलिक स्थानों पर होने वाली कई हजारों घटनाओं का डेटाबेस है। डेटा में प्रत्येक घटना के लिए x, y coodinates शामिल हैं, NAD83 संदर्भ प्रणाली का उपयोग करके एन्कोड किया गया है। मैं प्रत्येक एनएडी 83 एक्स, वाई समन्वय से जुड़े यूएस ज़िप कोड को विश्वसनीय रूप से प्राप्त करने के लिए एल्गोरिदम लिखना या उपयोग करना चाहता हूं।एल्गोरिदम जीआईएस एक्स से यूएस ज़िप कोड प्राप्त करने के लिए, y निर्देशांक

मेरे पास अभी तक NAD83 संदर्भ प्रणाली का उपयोग करके ज़िप कोड परिभाषाएं नहीं हैं। और मैंने पहले कभी इस तरह के प्रोग्रामिंग नहीं किया है। लेकिन ऐसा लगता है कि यह पता लगाने के लिए सहजता से सरल होगा कि एक दिया गया एक्स, वाई समन्वय एक ही एनएडी 83 संदर्भ प्रणाली का उपयोग करके परिभाषित यूएस ज़िप कोड के ज्यामितीय आकार के भीतर स्थित है या नहीं।

किसी को भी मेरा पीछा के साथ मदद कर सकते हैं:
1.) मैं कहां से NAD83 संदर्भ प्रणाली प्रारूप में विश्वसनीय अमेरिका पिन कोड परिभाषाओं मिलता है?
2.) एक्स, वाई समन्वय दिए गए ज़िप कोड को खोजने के लिए मुझे एल्गोरिदम के लिए उदाहरण कोड कहां मिल सकता है?

कोई भी लिंक जो आप निर्देशक लेख/ट्यूटोरियल, उदाहरण कोड, और NAD83 ज़िप कोड सीमा परिभाषा डेटा को भेज सकते हैं वास्तव में सहायक होंगे। मैं Google खोज कर रहा हूं, लेकिन मुझे लगा कि इस साइट पर लोग मुझे एक विशेषज्ञ की मार्गदर्शिका दे सकते हैं।

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

अंत में, मेरे डेटासेट में सड़क पते में ज़िप कोड शामिल नहीं हैं, और सड़क के पते खतरनाक रूप से लिखे गए हैं, ताकि पता डेटा को पर्याप्त रूप से साफ करने का प्रयास करना मुश्किल हो, ताकि ज़िप कोड प्राप्त करने का प्रयास किया जा सके। पतों। मैं कई सौ शहरों में डेटा को अलग कर सकता हूं, शायद कुछ सौ ज़िप कोड में, लेकिन मुझे लगता है कि एनएडी 83 एक्स, वाई निर्देशांक ज़िप कोड प्राप्त करने में मेरा सबसे अच्छा शॉट हैं जिसमें मेरे डेटासेट में प्रत्येक घटना हुई थी। मैं अपने परिणामस्वरूप ज़िप कोड को अन्य डेटा के साथ ज़िप कोड विश्लेषण से जोड़ना चाहता हूं जो मुझे यूएस जनगणना आदि जैसे स्रोतों से प्रत्येक ज़िप कोड के बारे में मिलता है।

आपकी मदद करने के इच्छुक व्यक्ति के लिए अग्रिम धन्यवाद।

+0

यह उपयोगी हो सकता है या नहीं भी हो सकता है: http://stackoverflow.com/questions/3564852/get-zip-code-from-latitude-longitude –

+1

यह देखते हुए कि ज़िप कोड सीमाएं मूल रूप से बहुभुज हैं (हालांकि किसी क्षेत्र पर) आप शायद http://en.wikipedia.org/wiki/Point_in_polygon पर एक एल्गोरिदम का उपयोग यह निर्धारित करने के लिए करेंगे कि क्या आप एक विशेष ज़िप कोड में हैं, शायद निकटतम उम्मीदवार ज़िप कोड का एक सेट चुनना (जिनके शिखर निकट हैं प्रश्न में बिंदु) एक अनुकूलन के रूप में। –

उत्तर

1

मुझे नहीं पता कि ज़िप कोड कहां प्राप्त करें, लेकिन मुझे लगता है कि आप इसे the ZIP code of each state पर Google से बाहर कर सकते हैं।

और प्रश्न (2), पहले आपको भौगोलिक सूचना की आवश्यकता होगी, यानी the boundary of each state। तो आप बस सभी बिंदुओं (x, y) का आकलन करें और यह निर्धारित करें कि यह कौन सा बहुभुज है।

यहां एक नमूना कोड है, यह SGU124 के लिए लिखा गया था।

#include <map> 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 

#define MAXN 10005 

using namespace std; 

struct pnt{ 
    int x,y; 
}; 
struct seg{ 
    pnt a,b; 
} s[MAXN]; 
int n; 
pnt p; 
int h[MAXN<<1]; 
int k[MAXN<<1]; 

void work(){ 
    int i,x,y,c = 0; 
    memset(h,0,sizeof(h)); 
    memset(k,0,sizeof(k)); 
    for (i=0;i<n;i++){ 
     if (s[i].a.x<=p.x && p.x<=s[i].b.x && s[i].a.y<=p.y && p.y<=s[i].b.y){ 
      printf("BORDER\n"); 
      return; 
     } 
     if (s[i].a.x==s[i].b.x){ 
      x = s[i].a.x; 
      y = p.y - p.x + x; 
      if (x<=p.x && s[i].a.y<=y && y<=s[i].b.y){ 
       h[x+MAXN] = 1; 
       if (y==s[i].a.y) k[x+MAXN] |= 1; 
        else if (y==s[i].b.y) k[x+MAXN] |= 2; 
      } 
     } 
     else{ 
      y = s[i].a.y; 
      x = p.x - p.y + y; 
      if (x<=p.x && s[i].a.x<=x && x<=s[i].b.x){ 
       //printf("%d %d %d %d\n",s[i].a.x,s[i].a.y,s[i].b.x,s[i].b.y); 
       h[x+MAXN] = 1; 
       if (x==s[i].a.x) k[x+MAXN] |= 4; 
        else if (x==s[i].b.x) k[x+MAXN] |= 8; 
      } 
     } 
    } 
    for (i=p.x;i>=-10000;i--){ 
     //if (h[i+MAXN]>0) printf("@ %d %d\n",i,k[i+MAXN]); 
     if (k[i+MAXN]!=9 && k[i+MAXN]!=6) c += h[i+MAXN]; 
    } 
    //printf("p @ %d %d ",p.x,p.y); 
    if (c%2) printf("INSIDE\n"); 
     else printf("OUTSIDE\n"); 
} 

int main(){ 
    freopen("sgu124.in","r",stdin); 
    int i; 
    while (~scanf("%d",&n)){ 
     for (i=0;i<n;i++){ 
      scanf("%d%d",&s[i].a.x,&s[i].a.y); 
      scanf("%d%d",&s[i].b.x,&s[i].b.y); 
      if (s[i].a.x>s[i].b.x || s[i].a.y>s[i].b.y) swap(s[i].a,s[i].b); 
     } 
     scanf("%d%d",&p.x,&p.y); 
     work(); 
     //break; 
    } 
    return 0; 
} 
+0

धन्यवाद। आपका नमूना कोड किस भाषा में लिखा गया है? भाषा को जानना मुझे जावा पर पोर्ट करने में सक्षम बनाता है। इसके अलावा, मुझे आपका स्थान नहीं पता है, लेकिन राज्य के भीतर शायद हजारों ज़िप कोड हैं। अगर कोई मुझे यह पता लगाने में मदद कर सकता है कि एनएडी 83 प्रारूप में ज़िप कोड की बहुभुज परिभाषाओं को कहां डाउनलोड करना है, तो मुझे लगता है कि आप सुझाव दे रहे हैं कि मैं बहुभुज परिभाषाओं के माध्यम से बस एक मैच कहां देख सकता हूं। मैं वास्तव में बहुभुज डेटा के इनपुट प्रारूप को अवधारणा नहीं दे रहा हूं, लेकिन यह आसान हो सकता है यदि आप मुझे बताएं कि आपका कोड किस भाषा में है। – CodeMed

+0

@CodeMed कोड '' C++ '' 'में लिखा गया है (हालांकि बहुत सारे' ''''' सामान) और एक अद्वितीय ज़िप कोड वाले प्रत्येक स्थान के लिए, आपको सीमा की आवश्यकता है जिसे' ''बिंदुओं की सूची' के रूप में प्रस्तुत किया जा सकता है। जैसे (0,0) -> (0,1) -> (1,1) -> (1,0) बस एक आयताकार का वर्णन करता है। अगर कुछ अच्छी तरह व्यवस्थित डेटा प्राप्त करना वाकई मुश्किल है, और आप पर्याप्त धीरज रखते हैं, तो आप सीमा को स्वयं खींच सकते हैं। – Topro

+0

मैं इसे उत्तर के रूप में चिह्नित कर रहा हूं क्योंकि मैंने जो कुछ पूछा है उसके लिए मुझे उपकरण देने का सबसे नज़दीक है। यहां ज़िप कोड के लिए एसीआईआई टेक्स्ट डेटा का एक लिंक दिया गया है जो आपके द्वारा सुझाए गए एल्गोरिदम से जुड़ा जा सकता है: http://www.census.gov/geo/www/cob/ascii_info.html मैं वास्तव में इसे अलग-अलग में कर सकता हूं मार्ग। और मैं एक और अधिक ध्यान केंद्रित प्रश्न के साथ एक और पोस्टिंग कर सकते हैं। यह पोस्टिंग सामान्य थी, और मुझे लगता है कि उस स्तर पर इसका उत्तर दिया गया है जिस पर यह पूछा गया था। तुम्हारे सहयोग के लिए तुम्हे धन्यवाद। +1, और इसका जवाब देने के लिए एक चेक मार्क। – CodeMed

4

आप जावा में GeoTools का उपयोग कर सकते हैं। यहां एक उदाहरण है जो एक आकृति फाइल में एक बिंदु की खोज है।

// projection/datum in SR-ORG:7169 (GCS NAD83) 
File shapeFile = new File("zt08_d00.shp"); 
FileDataStore store = FileDataStoreFinder.getDataStore(shapeFile); 
SimpleFeatureSource featureSource = store.getFeatureSource(); 
// Boulder, CO 
Filter filter = CQL.toFilter("CONTAINS(the_geom, POINT(-105.292778 40.019444))"); 
SimpleFeatureCollection features = featureSource.getFeatures(filter); 
for (SimpleFeature f : features) { 
    System.out.println(f.getAttribute('NAME')); 
} 

मैं 2000 की जनगणना से 5-Digit ZIP Code Tabulation Areas की अमेरिकी जनगणना ब्यूरो के संग्रह से एक शेपफ़ाइल पकड़ा। मैंने सिर्फ कोलोराडो राज्य के लिए एक ही फाइल का इस्तेमाल किया। आपको इन्हें एक FeatureSource में मर्ज करने की आवश्यकता होगी। बोल्डर, सीओ के लिए इस आउटपुट 80302 को चला रहा है।

जियोटूल आपको आवश्यक होने पर convert between projections पर भी अनुमति देता है। सौभाग्य से ये आकारफाइल पहले ही एनएडी 83 में हैं।

+0

धन्यवाद। +1। जब आप अपना सुझाव लिख रहे थे तो मैं वास्तव में जियोटूल ट्यूटोरियल पढ़ रहा था। और मैंने देखा कि इसमें कुछ लाइसेंसिंग प्रतिबंध हैं। वर्तमान में, मैं इस एप्लिकेशन का वाणिज्यिक उपयोग करने का इरादा नहीं रखता हूं। हालांकि, मैं केवल उन कोडों का उपयोग करने का प्रयास करता हूं जो लाइसेंस प्रतिबंधों के बिना आता है, ताकि मैं बाद में सॉफ़्टवेयर का वाणिज्यिक उपयोग करने के लिए स्वतंत्र हूं। इसके अलावा, GeoTools की आवश्यकता है कि निर्भरता मेरे कोड में जोड़ा जाए। मुझे उस क्षेत्र के लिए ज़िप कोड जानकारी के साथ एक आकृति फ़ाइल मिली है जिसे मैं देख रहा हूं। क्या आप जावा कोड में आकृति फ़ाइल को निर्भरता जोड़ने के बिना कैसे खोलें जानते हैं? – CodeMed

+0

GeoTools LGPL है, इसलिए आप इसे अपने कोड को जारी किए बिना वाणिज्यिक उत्पाद में उपयोग कर सकते हैं। अन्य सभी जावा आकारफाइल पुस्तकालय जिन्हें मैं परिचित हूं, वे वाणिज्यिक हैं। – JRideout

+0

मैंने ज़िप कोड सीमाओं की एक आकृति फ़ाइल लोड करने के लिए GeoTools को स्थापित और उपयोग किया। लेकिन यह मुझे संख्यात्मक डेटा नहीं देता है, मुझे ज़िप कोड निर्धारित करने की आवश्यकता है जिसमें प्रत्येक एक्स, वाई मेरे डेटा सेट में समन्वय होता है। यह ग्राफिक रूप से यह उत्तर दिखाता है, लेकिन डेटा के संदर्भ में नहीं, मैं सरणी में हेरफेर कर सकता हूं।मुझे अपने डेटासेट में एक ज़िप कोड के साथ प्रत्येक रिकॉर्ड को टैग करने की आवश्यकता है ताकि मैं इस ज़िप के अन्य प्रतिक्रियाओं द्वारा प्रस्तावित एल्गोरिदम का उपयोग करके प्रत्येक ज़िप कोड के भीतर क्या होता है, मात्रात्मक विश्लेषण कर सकूं। अगर मैं अगले लॉगिन से पहले जवाब देने में सक्षम नहीं हूं तो मैं इसे एक अलग पोस्ट के रूप में फ्रेम कर सकता हूं। – CodeMed

0

आपने उल्लेख किया है कि आपके पास ऐसे पते हैं जिनका आप उपयोग करने में सक्षम हो सकते हैं। उस स्थिति में, एक पता सत्यापन सेवा आपको पते और शहर/राज्य के आधार पर ज़िप कोड को प्रोग्रामेटिक रूप से ढूंढने की अनुमति देगी। यहां तक ​​कि यदि खराब रूप से स्वरूपित किया गया है, तो पता डेटा आपको अपने लक्ष्य का 9 0 या 9 5% तक पहुंच सकता है, शेष को या तो साफ करने और पुन: प्रसंस्करण करने के लिए या निर्धारित करने के लिए निर्देशांक का उपयोग करने का प्रयास कर सकता है।

SmartyStreets आपके डेटा के साथ एक अपलोड की गई CSV फ़ाइल लेगा और पता सत्यापन (पते को सही और मानकीकृत) करेगा और फिर यूएसपीएस से डेटा का उपयोग कर पते को सत्यापित करेगा। SmartyStreets की एक अनूठी विशेषता यह है कि वे बुरे पते के लिए कुछ भी चार्ज नहीं करते हैं। यह आपको प्रत्येक पते के विभिन्न क्रमपरिवर्तनों को प्रारूपित करने और संसाधित करने की अनुमति देगा (खतरनाक डेटा के लिए खाते का प्रयास करने के लिए) और यदि सकारात्मक मिलान हल हो जाता है तो केवल इसके लिए भुगतान करें।

पूर्ण प्रकटीकरण के हित में, मैं SmartyStreets का संस्थापक हूं। हम सड़क पता सत्यापन प्रदान करते हैं।

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