मैं इस के साथ काम कर रहा हूं (और मैंने देखा है कि आपने अपना प्रश्न संपादित किया है)।
ए) सामान्य गैर-तकनीकी उपयोगकर्ताओं को जीपीएस निर्देशांक इनपुट करने का सबसे आसान तरीका क्या है?
गैर-तकनीकी उपयोगकर्ताओं को विवरण दर्ज करने के लिए सबसे सरल, और सबसे उपयोगकर्ता अनुकूल फैशन Google मानचित्र का उपयोग करेगा। यह आपके इनपुट को पार्स करने के लिए Google Geocoder का उपयोग करने की अनुमति देगा (और अधिक मानकीकृत और स्वरूपित आउटपुट प्रदान करेगा)। इसके अलावा, यदि उपयोगकर्ता जो स्थान इनपुट कर रहा है वह उनका वर्तमान स्थान है, तो आप कुछ आधुनिक ब्राउज़रों द्वारा प्रदान की गई जिओलोकेशन कार्यक्षमता का उपयोग कर देख सकते हैं।
बी) मैं उपर्युक्त को अंतिम प्रारूप में कैसे परिवर्तित करूं? कोई भी अंतर्निहित फ़ंक्शंस जो डेटा इनपुट में इन भिन्नताओं को संभालता है?
अपने परीक्षण डेटा के आधार पर, मैंने इसे पार्स करने के लिए एक PHP नियमित अभिव्यक्ति तैयार की है और एक अनुमानित और मानकीकृत आउटपुट लौटा दिया है।
$rexp = '/^(\-?\d+(?:\.\d+)?)(?:\D+(\d+)\D+(\d+)([NS]?))?[^\d\-]+(\-?\d+(?:\.\d+)?)(?:\D+(\d+)\D+(\d+)([EW]?))?$/i';
$data = array(
"21° 16' 674S, 27° 30' 318E" ,
'21 16 674S, 27 30 318E' ,
'9.182, -39.140625' ,
'9.182/-39.140625' ,
'9.182,-39.140625' ,
'9.182 -39.140625'
);
foreach($data as $test) {
if(!preg_match($rexp , $test , $matches)) {
echo '<b>Failed</b>';
} else {
// Match Found
}
}
आउटपुट:
array(
[0] => Matched Text ,
[1] => Full Degrees ,
[2] => Minutes ,
[3] => Seconds ,
[4] => Hemisphere (N or S) ,
[5] => Full Degrees ,
[6] => Minutes ,
[7] => Seconds ,
[8] => Hemisphere (E or W)
)
उदाहरण:
// Matching 21° 16' 674S, 27° 30' 318E
array(
[0] => "21° 16' 674S, 27° 30' 318E" ,
[1] => "21" , [2] => "16" , [3] => "674" , [4] => "S" ,
[5] => "27" , [6] => "30" , [7] => "318" , [8] => "E"
)
// Matching 21 16 674S, 27 30 318E
array(
[0]=> "21 16 674S, 27 30 318E" ,
[1]=> "21" , [2]=> "16" , [3]=> "674" , [4]=> "S" ,
[5]=> "27" , [6]=> "30" , [7]=> "318" , [8]=> "E"
)
// Matching 9.182, -39.140625
array(
[0]=> "9.182, -39.140625" ,
[1]=> "9.182" , [2]=> "" , [3]=> "" , [4]=> "" ,
[5]=> "-39.140625" , [6]=> "" , [7]=> "" , [8]=> ""
)
// Matching 9.182/-39.140625
array(
[0]=> "9.182/-39.140625" ,
[1]=> "9.182" , [2]=> "" , [3]=> "" , [4]=> "" ,
[5]=> "-39.140625" , [6]=> "" , [7]=> "" , [8]=> ""
)
// Matching 9.182,-39.140625
array(
[0]=> "9.182,-39.140625" ,
[1]=> "9.182" , [2]=> "" , [3]=> "" , [4]=> "" ,
[5]=> "-39.140625" , [6]=> "" , [7]=> "" , [8]=> ""
)
// Matching 9.182 -39.140625
array(
[0]=> "9.182 -39.140625" ,
[1]=> "9.182" , [2]=> "" , [3]=> "" , [4]=> "" ,
[5]=> "-39.140625" , [6]=> "" , [7]=> "" , [8]=> ""
)
फिर आप बाद में, इस प्रक्रिया को नियमित अभिव्यक्ति के परिणाम, अक्षांश/देशांतर लिंक के लिए एक नाव तैयार कर सकते हैं तो :
// (Replacing the "Match Found" comment)
$latitude = $matches[1]+((int)$matches[2]/60)+((int)$matches[3]/3600)*(strtolower($matches[4])=='s'?-1:1);
$longitude = $matches[5]+((int)$matches[6]/60)+((int)$matches[7]/3600)*(strtolower($matches[8])=='w'?-1:1);
जो उत्पादन करता है:
// Matching 21° 16' 674S, 27° 30' 318E
$latitude = -21.4538888889
$longitude = 27.5883333333
// Matching 21 16 674S, 27 30 318E
$latitude = -21.4538888889
$longitude = 27.5883333333
// Matching 9.182, -39.140625
$latitude = 9.182
$longitude = -39.140625
// Matching 9.182/-39.140625
$latitude = 9.182
$longitude = -39.140625
// Matching 9.182,-39.140625
$latitude = 9.182
$longitude = -39.140625
// Matching 9.182 -39.140625
$latitude = 9.182
$longitude = -39.140625
लुकानोस को एक अद्भुत प्रयास के लिए बंद कर देता है ...! मैं अभी भी इसका परीक्षण कर रहा हूं लेकिन एक त्वरित रूप से मुझे यह देखने की ज़रूरत है कि मुझे क्या चाहिए !!! – Dave
फ्लोट करने के लिए अनुवाद करते समय आप केवल अंतिम घटक पर -1 गुणा का उपयोग करते हैं। आपका कोड उत्तर में सूचीबद्ध शब्दों की तुलना में अलग-अलग परिणाम देता है, इसे ठीक करने के लिए आपको '$ अक्षांश = ($ मैचों [1] + ((int) $ मैचों [2]/60) में अनुवाद बदलने की आवश्यकता है (+ int) $ मैचों [3]/3600)) * (strtolower ($ मैचों [4]) == 'एस' - 1: 1); $ देशांतर = ($ मैचों [5] + ((int) $ मैचों [6]/60) + ((int) $ मैचों [7]/3600)) * (स्ट्रेटोलॉवर ($ मैचों [8]) == ' w '- 1: 1); ' – Kyborek