Koordinatlar Set değiştirmek gerekiyor

3 Cevap php

Burada sorgusu ile ilgili başka koordinatları ile şaşırıp. Ancak koordinatları koordinatları böylece göstermiştir bazı dosyaları gibi biçimleri farklı olan CSV dosyaları bir dizi var ve hepsi belirtilen koordinatların bir grup var:

40.0873°N 20.1531°E

Bazı böylece onları varken:

27°50′21″N 00°11′07″W

Ben PHP bu bir işlevini ayarlamak için bir yol gerekir:

Koordinatlar içinde ne biçim tüm deduces Öncelikle

Sonra böylece enlem ve boylamları içine koordinatları dönüştürmek:

37.235
-115.811111

Artı ikinci biçimi Saat Dakika Saniye olduğunu anlamak - şey nasıl dize bu tür saat dakika ve saniye ayıklamak olmasıdır.

Herhangi bir yardım büyük mutluluk duyacağız ...

3 Cevap

Kod:

print_r(parse("40.0873°N 20.1531°E"));
print_r(parse("27°50′21″N 00°11′07″W"));
function parse($coord)
{
    $strings = split(' ',$coord);
    $ret['lat'] = degree2decimal($strings[0]);
    $ret['lon'] = degree2decimal($strings[1]);
    return $ret;
}
function degree2decimal($deg_coord="")
{
    $dpos=strpos($deg_coord,'°');
    $mpos=strpos($deg_coord,'‘');
    $spos=strpos($deg_coord,'"');
    $mlen=(($mpos-$dpos)-1);
    $slen=(($spos-$mpos)-1);
    $direction=substr(strrev($deg_coord),0,1);
    $degrees=substr($deg_coord,0,$dpos);
    $minutes=substr($deg_coord,$dpos+1,$mlen);
    $seconds=substr($deg_coord,$mpos+1,$slen);
    $seconds=($seconds/60);
    $minutes=($minutes+$seconds);
    $minutes=($minutes/60);
    $decimal=($degrees+$minutes);
    if (($direction=="S") or ($direction=="W"))
    	{ $decimal=$decimal*(-1);}
    return $decimal;
}

Çıktı:

Array
(
    [lat] => 40.08732425
    [lon] => 20.153142527778
)
Array
(
    [lat] => 27.835277777778
    [lon] => -0.18333333333333
)

O sadece iki biçimleri vardır varsayarsak, bir dize (bunun için strpos kullanabilirsiniz) "için 'ya da arayarak hangi biçim bulabiliriz.

Biçim ilk türü ise gerekli hemen hemen hiçbir dönüşüm - Eğer değer negatif ya da yapmak gerekirse kullanımı N / S ve E / W belirlemek.

Eğer derece, dakika ve saniye sonra varsa sscanf kullanarak dize değerlerini alabilirsiniz. Eğer bireysel değerlere sahip olarak bir kez derece + dakika / 60 + saniye / (60 * 60) sonra ondalık derece bulabilirsiniz.

Ne gerek bazı düzenli ifadeler vardır. Belirli bir dize istersen ayıklamak için php fonksiyonları ile birlikte normal bir ifade kullanabilirsiniz. Ne muhtemelen yapacağını belirli bir dosya formatını kontrol etmek ve daha sonra ilgili bilgileri ayıklamak için bir regex kullanarak, bir dosyanın her hattı üzerinden yineleme olacak bir regex kullanmaktır. Örneğin, [0-9]{1,3}\.[0-9]{1,4}°(N|W|E|S) şey birinci tip uygun olup olmadığını kontrol etmek gibi normal bir ifade kullanabilirsiniz. Sonra ([0-9]{1,3})\.([0-9]{1,4})°(N|W|E|S) preg_match_all ile böyle bir şey karşısında girişin her satırı maç ve matches dizi ilgili verileri ayıklamak. Buradan, dönüşüm için gerekli tüm verilere sahip olur. Benzer bir şey diğer türü için yapılabilir. Ben bir php karşı bu Düzenli ifadeler test yüklemeniz gerekmez, bu yüzden onları okuduğunda patlattığı php önlemek için bazı hafif verdiği gerekebilir unutmayın (büyük olasılıkla ° karakter kodlanmış gerekebilir farklı, büyük olasılıkla sadece tek bir boşluk olmayan karakteri maç olacak gibi, . meta-karakter kullanabilirsiniz) olabilir ancak.

Düzenli ifadeler için bazı iyi kaynaklar:

Yukarıdaki SO linke belirtildiği gibi, test çeşit olması gibi bir şey olsun, düzenli ifadeler üretmek için oldukça yararlıdır RegEx Buddy, Reggy, ya da Kodos .