tugas translate idham amdin


Menggunakan metode replaceAll Java-asli pada String melakukan trik. Ya, saya sangat menyadari bahwa argumen pertama dari replaceAll adalah ekspresi reguler. Hidup panjang dan makmur, teman Vulcan saya. 9.2 Geocoding Data Anda Jadi, dalam 65 baris kode Groovy, kami beralih dari data CSV dalam file flat ke pernyataan SQL dan 7.018 catatan dalam database. Masalah dengan catatan ini adalah bahwa mereka masih hampir spasial. Mari kita secara geocode mem-address-kan alamat untuk mendapatkan titik lat / long yang sebenarnya bisa kita petakan. Ingat set data Biro HARIMAU Sensus A.S. yang kita bicarakan di Bagian 2.8, Amerika Yang Dapat Diunduh, di halaman 32? Kami telah bekerja dengan shapefile batas negara sejak. Data Biro Sensus A.S. lebih dalam dari garis negara sederhana — jauh lebih dalam. Tetapi daripada harus mengunduh data dan bergulat dengan format file ASCII yang funky itu sendiri, bagaimana jika seseorang telah melakukan semua pekerjaan kotor untuk Anda dan mengeksposnya sebagai situs web yang ramah. Bagaimana jika, memang? Jalankan peramban web Anda, dan kunjungi Geocoder.us.3 Situs web ini, dipelihara oleh penulis Mapping Hacks (O’Reilly), adalah cara paling ramah untuk berinteraksi dengan kumpulan data TIGER tanpa harus benar-benar mengunduhnya. (Lihat Gambar 9.1, di halaman berikutnya.) Masukkan alamat jalan Anda — lihat apakah Biro Sensus A.S. tahu di mana Anda tinggal pada tahun 2000. (Ingat, data Biro Sensus A.S. diperbarui setiap sepuluh tahun.) Meskipun bekerja dengan situs web secara interaktif adalah hal yang menyenangkan, namun kurang menyenangkan mengetikkan 7.019 alamat dengan tangan. Untungnya, Geocoder.us menawarkan layanan web dan juga situs web. Gulir ke bagian bawah halaman beranda dan cari bagian berjudul "Bagaimana Saya Bisa Menggunakannya?" Ini menawarkan SOAP, XML-RPC, RESTful, dan bahkan layanan berbasis CSV.
Meskipun keren bahwa kita bisa mendapatkan data kembali sebagai XML, kami sudah cukup bagus dalam menangani data CSV. Coba ini sebagai gantinya: Kami akan melakukan kueri ini dalam kode sesaat lagi. Sebelum kita melanjutkan, apakah Anda melihat ada perbedaan halus antara alamat yang kami kirimkan dan alamat yang dikembalikan? Alamat kami dinormalisasi. Tetapi apakah "W Maxwell Blvd" dan "Maxwell Blvd E" benar-benar merupakan lokasi yang sama? Ketikkan yang berikut ini ke browser web Anda: Pada peta yang dihasilkan, "E Maxwell" dan "W Maxwell" berada di kedua sisi jendela info. Saya merasa cukup nyaman bahwa alamat mendapat geocode dengan benar. (Hanya untuk menyeringai, coba kirimkan sebagai "W Maxwell" ke Google. Perhatikan bahwa itu juga membingungkan.) Oke, mari kita coba alamat selanjutnya pada daftar: Kutukan! Digagalkan pada upaya kedua kami. Apa yang dikatakan Google tentang hal itu? Google menariknya ke atas. Mungkin sebaiknya kita menggunakan geocoder4 Google saja. Dokumentasi menunjukkan contoh menggunakannya dalam JavaScript serta permintaan HTTP GET. Anda bisa mendapatkan hasilnya kembali sebagai CSV, XML, KML, atau JSON. Untuk menggunakannya, yang harus Anda lakukan adalah mendaftar untuk kunci API gratis.5 Ini permintaan untuk geocoder Google:
Dan jawabannya? Nilai pertama adalah kode kembali. Yang kedua adalah tingkat akurasi. Yang ketiga adalah garis lintang, dan yang keempat adalah garis bujur. Jadi, apa artinya 602? Alamat tidak ditemukan. Hah? Tapi kami menemukannya di peta. Google jelas tahu di mana itu. Apa yang menyebabkannya? Saya akan melakukan riset Internet untuk Anda saat ini. Dalam entri basis pengetahuan berjudul "Mengapa geocoder API menyediakan lokasi yang berbeda dari Google Maps?" 6 kalimat pertama mengatakan semuanya: "Geocoder API dan geocoder Google Maps bergantung pada dua sumber data yang berbeda." (Jangan ragu untuk bergumam pelan. Saya melakukannya ....) Ini adalah dugaan murni di pihak saya, tapi itu kedengarannya seperti masalah lisensi bagi saya. Google membeli geodata-nya dari penyedia komersial, dan penyedia itu kemungkinan besar membatasi beberapa cara Google dapat mengekspos data. Google Maps? Tidak masalah. API terprogram? Tidak terlalu cepat, Bub .... Oke, mari kita coba sekali lagi. Yahoo juga menawarkan geocoder gratis.7 Seperti Google, Anda harus mendaftar untuk mendapatkan ID aplikasi gratis. Hasilnya kembali kepada Anda sebagai XML atau PHP:
Aha! Kami mendapat hit saat ini. Tapi tunggu dulu — di mana alamatnya? Perhatikan atribut presisi di elemen hasil? Itu berarti bahwa Yahoo mencoba melakukan geocode pada alamat dan gagal, sehingga jatuh kembali ke geocode kode ZIP. Jika Anda kembali dan melihat lebih dekat pada hasil Google Maps — yang berhasil — perhatikan sesuatu yang berbeda tentang alamat itu? Alamat yang kami kirimkan adalah "4107 Meridian St, Normal, AL 35762." Respons yang kami dapatkan adalah "4107 Meridian St N, Huntsville, AL 35811." Itu bukan hanya alamat jalan yang berbeda tetapi juga kota dan kode ZIP yang sama sekali berbeda. Peta tersebut menunjukkan titik tepat di tepi kampus, sehingga sebagian besar kemungkinan merupakan pukulan yang bagus, tetapi ini menunjukkan betapa geocoding permainan yang rumit. Sebagai upaya terakhir, Anda dapat melakukan geocode data dengan tangan. InfoS-ports8 menyediakan layanan yang menarik. Mereka memasang peta Google Maps dan memungkinkan Anda mengklik peta untuk menemukan lat / long sendiri. Tidak ada cara bagi Anda untuk memasukkan alamat, jadi itu tidak banyak membantu kami. Ini hanyalah contoh menarik dari geocoder titik-dan-klik. Mengkode Geocoding Karena sepertinya tidak ada peluru perak untuk masalah geocoding kami, mari gunakan pilihan pertama kami — Geocoder.us — pada kumpulan data lengkap dan lihat berapa banyak hit yang kami dapatkan. Saya tidak mengharapkan 100%, tetapi saya berharap kami akan melakukan lebih baik daripada 50% yang kami dapatkan dalam dua upaya. Mari kita jalankan skrip Groovy kami yang didukung Geoserver.us baru terhadap kumpulan sampel kami dan lihat bagaimana kami melakukannya:
Berita baiknya adalah bahwa data kami sekarang berisi titik lat / long. Kabar buruknya adalah bahwa skrip kami membutuhkan waktu lebih lama untuk berjalan (rata-rata sekitar sepuluh hingga dua belas detik per permintaan — jangka waktu yang lengkap membutuhkan waktu lebih dari tiga puluh jam). Untuk keperluan bab ini, mari kita tetap dengan file sample.csv. (Anda dapat menemukan hasil lengkap dari Geocoder.us di college-gecoder.us.sql.) Mari kita lihat kode yang menyelesaikan ini. Untuk memulai, kami memperluas pernyataan ddl untuk memasukkan bidang baru: lat, long, dan alamat yang di-normalisasi dikembalikan dari geocoder. Tidak ditampilkan di sini, kami juga memperluas bidang dalam pernyataan SQL INSERT: Hal berikutnya yang kami lakukan adalah membuat kelas Addr. Ini tidak hanya merupakan tempat yang nyaman untuk menyimpan nilai-nilai kami — kami juga dapat menggantung beberapa fungsi khusus Addr darinya. Tampaknya tidak masuk akal untuk membaut metode geocode ke semua menggunakan metaprogramming. Karena kita perlu memiliki bidang khusus bernama cara tertentu, itu lebih masuk akal untuk membuat kelas. Inilah bidang-bidang kelas. Perhatikan bahwa kami membuat konstruktor yang menarik nilai dari array token kami yang ada dan mengisi kelas.
Dan di sini adalah metode geocode yang mengambil nilai-nilai dan mengirimkannya ke Geocoder.us: urlStart harus terlihat familier — itu adalah alamat layanan web. url-Body merangkai variabel bersama dalam urutan yang tepat. Sebelum kita dapat mengirimnya ke Geocoder.us, kita perlu URLEncode9 string.
Ini mengonversi spasi menjadi +, koma ke% 2C, dan seterusnya. URLEncoder adalah kelas Java asli yang menangani logistik untuk kami. Setelah kami memiliki URL yang terbentuk dengan baik, Groovy memudahkan kami untuk memanggil layanan web. URL baru (urlEncoded) menciptakan panggilan. EachLine melakukan panggilan dan, seperti namanya, memungkinkan kita untuk beralih melalui baris respon demi baris. Anda mungkin telah memperhatikan sebelumnya bahwa geocoder dapat berpotensi mengembalikan lebih dari satu baris. (Lihat “Universitas Kristen Selatan.”) Kode kami menjebak untuk respons multiline, menyimpan baris terakhir di objek Addr. Mari kita lihat semua ini dalam aksi. Kami membuat Addr baru, melewati array token. Kami memanggil metode geocode. Akhirnya, kita memanggil toSql dan menambahkannya ke string insertMiddle:
9.3 Menambahkan Bidang PostGIS Script kami adalah jagoan dalam membuat bidang String. Mengapa kita tidak mencoba membuat bidang spasial sekarang? Ingat dari Bagian 5.3, Menambahkan Kolom Geometrik dengan Tangan, di halaman 113, bahwa AddGeometryColumn menyisipkan bidang ke dalam tabel Anda dan tabel geometry_columns: Setelah kita memiliki kolom geometri di tempatnya, kita perlu mengubah pernyataan SQL INSERT kita untuk memanggil GeomFromText: Berikut ini adalah metode geocode baru kami yang membuat string SQL yang terbentuk dengan baik jika geocoder mengembalikan data, atau jika tidak maka hanya akan membuat field null: Jalankan kode Anda untuk terakhir kalinya. Ketik psql -U postgres -d g4wd -f college.sql untuk memasukkan data Anda. Butuh kurang dari 200 baris Groovy untuk beralih dari data mentah dari NCES ke database PostGIS yang terisi penuh. Itu akan menjadi kurang dari 150 baris jika saya tidak begitu suka dengan semua komentar, printlns, dan file hasil. Secara keseluruhan, itu tidak terlalu buruk. Statistik terakhir untuk Geocoder.us juga tidak terlalu buruk. Dari 7.018 catatan, ia mengembalikan alamat untuk 5.103, atau hanya sedikit dari 75%. Kelemahannya adalah prosesnya membutuhkan waktu lebih dari tiga puluh jam untuk diselesaikan.

Komentar