không www.quanmin.tv v Tâm是什么意思?

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
T h&ocircng_h&ng phok-sū s&n-siunn-a0drtai.doc10页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
正在加载中,请稍后...C?ng ??ng developerWorks
Scott Davis cho b?n bi?t làm cách nào b?n có th? nhúng các b?n
?? vào m?t ?ng d?ng Grails s? d?ng nh?ng d?ch v? Web và APIs s?n có mi?n phí
trong b? cài ??t m?i nh?t này c?a . ?ng s? d?ng ?ng d?ng m?u l?p k?
ho?ch-chuy?n ?i t? nh?ng cài ??t tr??c và ??a nó t?i m?c ti?p theo b?ng m? ??a
lí, Các b?n ?? Google, và nh?ng d?ch v? Grails.
(1233 KB) |
, T?ng Biên t?p,
Scott Davis là m?t tác gi?, di?n gi? và nhà phát tri?n ph?n m?m ???c c?ng
??ng qu?c t? th?a nh?n, ?ng có nh?ng cu?n sách nh? Groovy Recipes:
Greasing the Wheels of Java (Các cách th?c Groovy: B?i tr?n các b? máy
ho?t ??ng c?a Java), GIS for Web Developers: Adding Where to Your Application (GIS cho các nhà phát tri?n web: Thêm vào ??u trong ?ng d?ng c?a b?n), The Google Maps API (các b?n ?? Google c?a API) và JBoss At Work (JBoss trong c?ng vi?c)
T?i ?? x?y d?ng m?t ?ng d?ng l?p k? ho?ch-chuy?n ?i t?
trong lo?t bài này. Gi? khung làm vi?c Ng??i
?i?u khi?n-Khung nhìn-M? hình (Model-View-Controller (MVC)) c? b?n ?ó ?ang
? ??y, ta s?n sàng ?? hòa tr?n v?i nh?ng k? thu?t bên ngoài. C? th?, ta s?
thêm m?t b?n ??. T?i có th? nói, "T?i ?ang ??t m?t chuy?n ?i t? Denver t?i
Raleigh, v?i nh?ng ?i?m d?ng ? San Jose và Seattle d?c ???ng ?i," nh?ng
m?t b?n ?? s? giúp m? t? chuy?n ?i t?t h?n. B?n có th? bi?t r?ng Seattle
và Raleigh ? nh?ng phía ??i di?n nhau c?a n??c M?, nh?ng m?t b?n ?? giúp
b?n hình dung kho?ng cách gi?a hai thành ph? này. Cho b?n m?t ? t??ng ban ??u v? ?ng d?ng gì s? làm ? ph?n cu?i c?a bài vi?t
này, h?y vào trang
và nh?p m? IATA DEN
trong h?p tìm ki?m. B?n nên k?t thúc ? S?n bay Qu?c t? Denver, nh? ???c
bi?u di?n trong Hình 1. (Bi?t thêm v? nh?ng m? IATA, xem .)Hình 1. S?n bay Denver, nh? Các b?n ??
c?a GoogleBên c?nh vi?c hi?n th? các s?n bay c?a M? b?n t?o m?t b?ng HTML, l?p k?
ho?ch-chuy?n ?i c?ng s? v? ???c các s?n bay trên m?t b?n ??. T?i s? s?
d?ng API Các b?n ?? Google mi?n phí trong bài vi?t này. B?n có th? s? d?ng
API Các b?n ?? Yahoo! mi?n phí ho?c b?t k? cái nào khác (xem ). M?t khi b?n hi?u nh?ng ?i?u c? b?n
v? b?n ?? Web tr?c tuy?n, b?n s? hi?u r?ng các API khác nhau có th? hoán
??i cho nhau m?t cách h?p lí. Tr??c khi b?n có th? ánh x? m?t ph?n c?a
gi?i pháp, b?n c?n hi?u làm th? nào ?? m?t chu?i ba kí t? ??n gi?n nh? DEN
bi?n ??i thành m?t ?i?m trên b?n ?? M? ??a líKhi b?n nh?p DEN vào Các b?n ?? Google, ?ng d?ng th?c hi?n m?t phép bi?n
??i nh? ??ng sau. B?n có th? ngh? t?i nh?ng ??a ph??ng v? m?t ??a ch?
???ng ph? nh? ???ng 123 Main, nh?ng các b?n ?? Google c?n m?t ?i?m v?
??/kinh ?? ?? hi?n th? nó trên b?n ??. H?n n?a b?t bu?c b?n cung c?p ?i?m
v? ??/kinh ?? c?a mình, nó d?ch các ??a ch? ng??i dùng có th? ??c ???c vào
nh?ng v? ??/kinh ?? thay cho b?n. Phép bi?n ??i này ???c g?i là m? ??a
lí (geocoding) (xem ).
M?t phép bi?n ??i t??ng t? x?y ra khi b?n l??t Web. V? k? thu?t, cách duy
nh?t ?? liên l?c v?i m?t máy ch? Web t? xa là ??a ch? IP c?a máy ch? cung
c?p. May thay, b?n kh?ng c?n nh?p ??a ch? IP c?a mình. B?n nh?p m?t URL
th?n thi?n vào trình duy?t Web c?a b?n, và nó th?c hi?n vi?c g?i máy ch?
H? th?ng Tên Mi?n (Domain Name System (DNS)). Máy ch? DNS ??i URL thành
??a ch? IP t??ng ?ng, và trình duy?t th?c hi?n k?t n?i HTTP t?i máy ch? t?
xa. T?t c? ?i?u này là trong su?t v?i ng??i dùng. DNS th?c hi?n Web v?
cùng d? dàng ?? s? d?ng. Nh?ng trình sinh m? ??a lí (geocoder) th?c hi?n
vi?c t??ng t? cho các ?ng d?ng b?n ?? d?a trên Web. Tìm ki?m Web nhanh trên trình sinh m? ??a kí mi?n phí mang l?i m?t
s? kh? n?ng phù h?p v?i nhu c?u m? hóa ??a lí c?a nh?ng ng??i l?p k? ho?ch
chuy?n ?i. C? Google và Yahoo! cung c?p các d?ch v? m? ??a l? nh? m?t ph?n
tiêu chu?n c?a các API c?a h?, nh?ng v?i ?ng d?ng này, t?i s? s? d?ng d?ch
v? m? ??a l? mi?n phí ???c cung c?p trên geonames.org (xem ). RESTful API c?a nó cho phép t?i ch?
ra r?ng t?i ?ang cung c?p m?t m? IATA thay vì m?t gi?i h?n tìm ki?m-v?n
b?n chung chung. T?i kh?ng có gì ch?ng l?i các c? d?n c?a Ord, Ned., nh?ng
t?i quan t?m nh?t là S?n bay Qu?c t? Chicago O'Hare. Nh?p URL
http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full
vào trình duy?t Web c?a b?n. B?n nên xem XML tr? v? ???c trình bày trong
Ví d? 1: Ví d? 1. XML tr? v? t? yêu c?u m? ??a
l?&geonames style="FULL"&
&totalResultsCount&1&/totalResultsCount&
&name&Denver International Airport&/name&
&lat&39.8583188&/lat&
&lng&-104.6674674&/lng&
&geonameId&5419401&/geonameId&
&countryCode&US&/countryCode&
&countryName&United States&/countryName&
&fcl&S&/fcl&
&fcode&AIRP&/fcode&
&fclName&spot, building, farm&/fclName&
&fcodeName&airport&/fcodeName&
&population/&
&alternateNames&DEN,KDEN&/alternateNames&
&elevation&1655&/elevation&
&continentCode&NA&/continentCode&
&adminCode1&CO&/adminCode1&
&adminName1&Colorado&/adminName1&
&adminCode2&031&/adminCode2&
&adminName2&Denver County&/adminName2&
&alternateName lang="iata"&DEN&/alternateName&
&alternateName lang="icao"&KDEN&/alternateName&
&timezone dstOffset="-6.0" gmtOffset="-7.0"&America/Denver&/timezone&
&/geoname&
&/geonames& Tham s? name_equals trong URL b?n nh?p vào là m? IATA cho s?n
bay. Nó ch? là m?t ph?n c?a URL mà c?n b? thay ??i cho m?i truy v?n.
fcode=airp ch? ra r?ng m? ??c tr?ng b?n ?ang tìm ki?m là m?t
s?n bay. Tham s? style—short,
medium, long, ho?c
full— ch? r? tính ??y ?? c?a c?u tr? l?i
Gi? ??y b?n có m?t trình sinh m? ??a l?, b??c ti?p theo là tích h?p nó vào
?ng d?ng Grails c?a b?n. ?? làm ???c nh? v?y, b?n c?n m?t d?ch
v?. Nh?ng d?ch v? Grails B?ng ?i?m này , b?n có m?t ? t??ng hay v?
các ph?n l?p mi?n, các ki?m soát, và các Trang Máy ch? Groovy (GSP) t?t c?
làm vi?c v?i nhau trong m?t ki?u t? h?p nh? th? nào. Chúng làm cho các
thao tác c? b?n T?o/Truy l?c/C?p nh?t/Xóa (Create/Retrieve/Update/Delete
(CRUD)) d? dàng trên m?t ki?u d? li?u ??n. D?ch v? m? ??a l? này v??t m?t
chút ra ngoài ph?m vi c?a các phép bi?n ??i ?nh x? Quan h? ??i t??ng
Grails (Grails Object Relational Mapping (GORM)) t? các b?n ghi c? s? d?
li?u quan h? t?i POGOs (các ??i t??ng Groovy c? ??n gi?n). Ngoài ra, d?ch
v? s? có th? ???c s? d?ng b?i nhi?u h?n m?t ph??ng th?c. C?
save và update s? c?n m? ??a l? m? IATA, nh? b?n
s? th?y ? m?t th?i ?i?m. Grails cung c?p cho b?n m?t n?i ?? l?u tr? các
ph??ng th?c ???c s? d?ng ph? bi?n mà v??t qua b?t k? l?p mi?n ??n: các
?? t?o m?t d?ch v? Grails, g? grails create-service Geocoder
? dòng l?nh. Xem grails-app/services/GeocoderService.groovy, ???c trình
bày ? Ví d? 2, trong m?t b? so?n th?o v?n b?n: Ví d? 2. M?t d?ch v? Grails nhi?u
nhánh-raclass GeocoderService {
boolean transactional = true
def serviceMethod() {
} Tr??ng transactional ???c quan t?m n?u b?n ?ang th?c hi?n các
truy v?n c? s? d? li?u ph?c t?p trong cùng m?t ph??ng th?c. Nó gói m?i th?
trong m?t giao d?ch c? s? d? li?u ??n mà tr? v? n?u b?t k? truy v?n nào
l?i. B?i vì trong ví d? này b?n ?ang th?c hi?n g?i m?t d?ch v? Web t? xa,
b?n có th? thi?t l?p nó m?t cách an toàn là false. serviceMethod tên là m?t trình gi? ch? mà có th? ???c thay ??i
thành cái gì ?ó h?n là m? t?. (Các d?ch v? có th? ch?a nhi?u ph??ng th?c
nh? b?n mu?n.) Trong Ví d? 3, t?i thay ??i tên thành
geocodeAirport: Ví d? 3. Ph??ng th?c d?ch v? trình sinh m? ??a
l? geocodeAirport()class GeocoderService {
boolean transactional = false
// http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full
def geocodeAirport(String iata) {
def base = "http://ws.geonames.org/search?"
def qs = []
qs && "name_equals=" + URLEncoder.encode(iata)
qs && "fcode=airp"
qs && "style=full"
def url = new URL(base + qs.join("&"))
def connection = url.openConnection()
def result = [:]
if(connection.responseCode == 200){
def xml = connection.content.text
def geonames = new XmlSlurper().parseText(xml)
result.name = geonames.geoname.name as String
result.lat = geonames.geoname.lat as String
result.lng = geonames.geoname.lng as String
result.state = geonames.geoname.adminCode1 as String
result.country = geonames.geoname.countryCode as String
log.error("GeocoderService.geocodeAirport FAILED")
log.error(url)
log.error(connection.responseCode)
log.error(connection.responseMessage)
return result
} Ph?n ??u c?a ph??ng th?c geocodeAirport x?y d?ng URL và th?c
hi?n k?t n?i. Nh?ng ph?n t? chu?i-truy v?n ???c t?p h?p trong m?t
ArrayList và sau ?ó n?i v?i nhau b?i d?u "và". Ph?n cu?i c?a
ph??ng th?c ph?n tích k?t qu? XML s? d?ng m?t XmlSlurper
Groovy và l?u tr? các k?t qu? trong m?t b?n ?? b?m.
Các d?ch v? Groovy kh?ng th? truy c?p m?t cách tr?c ti?p t? m?t URL. N?u
b?n mu?n ki?m tra ph??ng th?c d?ch v? m?i này trong trình duy?t Web c?a
b?n, thêm m?t bao ?óng ??n gi?n cho AirportController, nh?
???c trình bày trong Ví d? 4: Ví d? 4. Cung c?p m?t URL cho m?t d?ch v?
trong m?t b? ?i?u khi?n.import grails.converters.*
class AirportController {
def geocoderService
def scaffold = Airport
def geocode = {
def result = geocoderService.geocodeAirport(params.iata)
render result as JSON
} Spring xen d?ch v? vào b? ?i?u khi?n m?t cách t? ??ng n?u b?n ??nh ngh?a
m?t bi?n thành viên v?i tên trùng v?i d?ch v?. (V?i bí quy?t ?? làm vi?c
này, b?n ph?i thay ??i kí t? ??u tiên c?a tên d?ch v? t? ch? hoa thành ch?
th??ng theo nh?ng quy ??c ??t tên bi?n c?a Java.) ?? ki?m tra d?ch v?, nh?p URL
http://localhost:9090/trip/airport/geocode?iata=den trong
trình duy?t Web c?a b?n. B?n nên xem k?t qu? ???c th? hi?n trong Ví d?
5:Ví d? 5. Các k?t qu? c?a yêu c?u trình sinh m?
??a l?{"name":"Denver International Airport",
"lat":"39.8583188",
"lng":"-104.6674674",
"state":"CO",
"country":"US"} Bao ?óng geocode trong AirportController là ch?
?? cho b?n ki?m tra s? ?úng ??n d?ch v?. B?n có th? g? b? nó ?i, ho?c b?n
có th? ?? nó l?i cho các cu?c g?i Ajax t??ng lai có th? có. B??c ti?p theo
là h? s? l?i c? s? h? t?ng Airport ?? t?n d?ng ?u ?i?m c?a
d?ch v? m? ??a l? m?i này. Hòa tr?n trong d?ch v? ?? b?t ??u, thêm các tr??ng m?i lat và lng vào
grails-app/domain/Airport.groovy, nh? ???c trình bày trong Ví d? 6: Ví d? 6. Thêm các tr??ng lat và
lng vào Airport POGOclass Airport{
static constraints = {
iata(maxSize:3)
state(maxSize:2)
String name
String iata
String city
String state
String country = "US"
String lat
String lng
String toString(){
"${iata} - ${name}"
} G? grails generate-views Airport ? d?u nh?c l?nh ?? t?o các
t?p tin GSP. Chúng ???c g?n liên k?t ??ng ? th?i gian ch?y t?i ?i?m này,
nh? dòng def scaffold = Airport trong
AirportController.groovy. Vì t?i mu?n th?c hi?n vài thay ??i cho các khung
nhìn, t?i c?n m? hóa th? c?ng.
Khi t?o m?t Airport m?i, t?i s? gi?i h?n các tr??ng ng??i
dùng-có th? so?n th?o là iata và city. Tr??ng
iata là c?n thi?t cho truy v?n m? ??a l? làm vi?c. T?i ??
city ? ??y b?i vì t?i mu?n cung c?p th?ng tin ?ó cho b?n
th?n. DEN th?c s? là ? Denver, nh?ng ORD (Chicago O'Hare) thì ? Rosemont,
Ill., và CVG (Cincinnati, s?n bay Ohio) là ? Florence, Ky. ?? hai tr??ng
này trong create.gsp và xóa ph?n còn l?i, do ?ó b?y gi? create.gsp gi?ng
nh? Ví d? 7: Ví d? 7. Thay ??i create.gsp&g:form action="save" method="post" &
&div class="dialog"&
&tr class="prop"&
&td valign="top" class="name"&&label for="iata"&Iata:&/label&&/td&
&td valign="top"
class="value ${hasErrors(bean:airport,field:'iata','errors')}"&
&input type="text"
maxlength="3"
name="iata"
value="${fieldValue(bean:airport,field:'iata')}"/&
&tr class="prop"&
&td valign="top" class="name"&&label for="city"&City:&/label&&/td&
&td valign="top"
class="value ${hasErrors(bean:airport,field:'city','errors')}"&
&input type="text"
name="city"
value="${fieldValue(bean:airport,field:'city')}"/&
&div class="buttons"&
&span class="button"&&input class="save" type="submit" value="Create" /&&/span&
&/g:form&Hình 2 th? hi?n bi?u m?u k?t qu?:Hình 2. T?o bi?u m?u Airport Bi?u m?u này ???c ??a t?i bao ?óng save trong
AirportController. Thêm ?o?n m? trong Ví d? 8 vào b? ?i?u
khi?n ?? th?c hi?n g?i t?i geocodeAirport tr??c khi
Airport m?i ???c l?u l?i: Ví d? 8. Thay ??i bao ?óng
savedef save = {
def results = geocoderService.geocodeAirport(params.iata)
def airport = new Airport(params + results)
if(!airport.hasErrors() && airport.save()) {
flash.message = "Airport ${airport.id} created"
redirect(action:show,id:airport.id)
render(view:'create',model:[airport:airport])
} S? l??ng l?n ph??ng th?c là gi?ng h?t nh?ng gì b?n th?y n?u b?n g?
grails generate-controller Airport ? d?u nh?c l?nh. S? khác
bi?t duy nh?t v?i bao ?óng ???c sinh ra m?c ??nh là hai dòng ??u tiên.
Dòng th? nh?t có HashMap t? d?ch v? trình sinh m? ??a l?.
Dòng th? hai k?t h?p resultsHashMap v?i
paramsHashMap. (V?ng, vi?c hòa nh?p hai
HashMaps trong Groovy ??n gi?n nh? vi?c thêm chúng v?i nhau.)
N?u l?u tr? c? s? d? li?u hoàn thành, b?n ???c g?i m?t l?n n?a t?i hành
??ng ch? d?n, kh?ng có thay ??i nào ???c yêu c?u cho show.gsp, nh? ???c
trình bày trong Hình 3: Hình 3. Th? hi?n bi?u m?u
Airport ?? h? tr? vi?c so?n th?o m?t Airport, ?? l?i các tr??ng
iata và city trong edit.gsp. B?n có th? sao chép
và dán ph?n còn l?i c?a các tr??ng t? show.gsp ?? th?c hi?n chúng ch? ??c.
(Ho?c n?u b?n ?? ??t "sao chép và dán là hình th?c th?p nh?t c?a l?p trình
h??ng ??i t??ng" t? , b?n có th? gi?i nén các tr??ng ph? bi?n vào
m?t m?u riêng và hoàn tr? nó trên c? show.gsp và edit.gsp.) Ví d? 9 trình
bày thay ??i edit.gsp: Ví d? 9. Thay ??i edit.gsp&g:form method="post" &
&input type="hidden" name="id" value="${airport?.id}" /&
&div class="dialog"&
&tr class="prop"&
&td valign="top" class="name"&&label for="iata"&Iata:&/label&&/td&
&td valign="top"
class="value ${hasErrors(bean:airport,field:'iata','errors')}"&
&input type="text"
maxlength="3"
name="iata"
value="${fieldValue(bean:airport,field:'iata')}"/&
&tr class="prop"&
&td valign="top" class="name"&&label for="city"&City:&/label&&/td&
&td valign="top"
class="value ${hasErrors(bean:airport,field:'city','errors')}"&
&input type="text"
name="city"
value="${fieldValue(bean:airport,field:'city')}"/&
&tr class="prop"&
&td valign="top" class="name"&Name:&/td&
&td valign="top" class="value"&${airport.name}&/td&
&tr class="prop"&
&td valign="top" class="name"&State:&/td&
&td valign="top" class="value"&${airport.state}&/td&
&tr class="prop"&
&td valign="top" class="name"&Country:&/td&
&td valign="top" class="value"&${airport.country}&/td&
&tr class="prop"&
&td valign="top" class="name"&Lat:&/td&
&td valign="top" class="value"&${airport.lat}&/td&
&tr class="prop"&
&td valign="top" class="name"&Lng:&/td&
&td valign="top" class="value"&${airport.lng}&/td&
&div class="buttons"&
&span class="button"&&g:actionSubmit class="save" value="Update" /&&/span&
&span class="button"&
&g:actionSubmit class="delete"
onclick="return confirm('Are you sure?');"
value="Delete" /&
&/g:form&Bi?u m?u k?t qu? ???c trình bày ? Hình 4:Hình 4. Bi?u m?u so?n th?o
Airport Nh?n chu?t vào nút Update g?i các giá tr? bi?u m?u t?i
bao ?óng update. Thêm d?ch v? g?i và b?n ?? b?m tr?n vào m?
m?c ??nh, nh? ???c trình bày trong Ví d? 10: Ví d? 10. Thay ??i bao ?óng
updatedef update = {
def airport = Airport.get( params.id )
if(airport) {
def results = geocoderService.geocodeAirport(params.iata)
airport.properties = params + results
if(!airport.hasErrors() && airport.save()) {
flash.message = "Airport ${params.id} updated"
redirect(action:show,id:airport.id)
render(view:'edit',model:[airport:airport])
flash.message = "Airport not found with id ${params.id}"
redirect(action:edit,id:params.id)
} T?i th?i ?i?m này, b?n ?? tích h?p hoàn toàn m? ??a lí vào ?ng d?ng c?a
b?n c?ng gi?ng nh? Các b?n ?? Google. M?t m?t chút th?i gian ?? xem xét
toàn b? các v? trí trên ?ng d?ng c?a b?n mà b?n ?ang thu nh?n các ??a ch?
— các khách hàng, các nh?n viên, các v?n phòng t? xa,
kho hàng, các ??a ph??ng bán l?, v.v.. B?ng vi?c thêm m?t c?p các tr??ng
?? l?u tr? v? ??/kinh ?? và tr?n vào d?ch v? m? ??a lí, b?n ?ang thi?t l?p
cho b?n th?n mình nh?ng b?n ?? d? dàng ?? hi?n th? các ??i t??ng
— ?ó chính là nh?ng gì t?i s? làm ti?p theo. Các b?n ?? Google H?u h?t m?i ng??i ??ng ? r?ng Các b?n ?? Google thi?t l?p chu?n giúp d? s?
d?ng h?n khi nó thành b?n ?? Web. M?t vài ng??i nh?n ra r?ng vi?c d? dùng
này m? r?ng cho vi?c nhúng m?t b?n ?? Google vào trang Web c?a riêng b?n.
??a t?a ?? v? ??/kinh ?? cho các ?i?m d? li?u là ph?n bài t?p khó nh?t, và
chúng ta s?n sàng gi?i quy?t v?n ?? ?ó.
?? nhúng m?t B?n ?? Google vào ?ng d?ng Grails c?a b?n, ?i?u tr??c tiên
b?n c?n làm là có m?t khóa API mi?n phí. Trang ??ng kí chi ti?t các ?i?u
kho?n s? d?ng. V? c? b?n, Google cung c?p API cho b?n mi?n phí v?i ?i?u
ki?n ?ng d?ng c?a b?n c?ng là mi?n phí. ?i?u này có ngh?a là b?n kh?ng th?
b?o v? ?ng d?ng Các b?n ?? Google c?a b?n b?ng m?t kh?u, tính phí cho vi?c
truy c?p vào nó, ho?c l?u tr? nó ??ng sau t??ng l?a. (Shameless plug: My
book GIS for Web Developers cho b?n t?p các h??ng d?n t?ng b??c
cho vi?c x?y d?ng m?t ?ng d?ng gi?ng B?n ?? Google s? d?ng d? li?u mi?n
phí và ph?n m?m ngu?n m?; xem . ?i?u
này gi?i phóng b?n kh?i nh?ng h?n ch? Google ??t trên API c?a b?n).
Khóa API ???c g?n v?i m?t URL và th? m?c c? th?. G?
http://localhost:9090/trip trên bi?u m?u và nh?n nút
Generate API Key. Trang xác nh?n cho th?y khóa API
???c sinh ra c?a b?n, nó liên quan ??n URL, và m?t trang Web m?u, nh? h?
nói, "?? b?n b?t ??u trên con ???ng l?p b?n ??"
?? k?t h?p trang m?u này vào ?ng d?ng Grails c?a b?n, t?o m?t t?p tin có
tên map.gsp trong th? m?c grails-app/views/airport. Sao chép trang m?u t?
Google vào map.gsp. Ví d? 11 cho th?y các n?i dung c?a map.gsp: Ví d? 11. M?t trang Web B?n ?? Google ??n
gi?n&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="content-type" content="text/ charset=utf-8"/&
&title&Google Maps JavaScript API Example&/title&
&script src="///maps?file=api&v=2&key=ABCDE"
type="text/javascript"&&/script&
&script type="text/javascript"&
//&![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
&body onload="load()" onunload="GUnload()"&
&div id="map" style="width: 500 height: 300px"&&/div&
&/html& Chú ? r?ng khóa API c?a b?n ???c nhúng vào t?p l?nh URL ? ??u trang. Trong
ph??ng th?c load, b?n ?ang th? hi?n m?t ??i t??ng
GMap2 m?i. ??y là b?n ?? mà xu?t hi?n ? &div /& v?i ID
c?a map ? cu?i c?a trang. N?u b?n mu?n b?n ?? l?n h?n, ?i?u
ch?nh ?? r?ng và chi?u cao trong thu?c tính style c?a
Cascading Style Sheets (CSS). Hi?n nay b?n ?? ???c t?p trung vào Palo
Alto, Calif. ? m?c ?? phóng 13 (M?c 0 là m?c thu nh? t?t c? các tr??ng
h?p. Khi các s? t?ng lên, b?n có khung nhìn các ???ng ph? r? h?n). B?n s?
?i?u ch?nh các giá tr? này ch? trong m?t th?i ?i?m. Trong khi ch? ??i,
thêm m?t bao ?óng map r?ng vào
AirlineController, nh? ???c trình bày ? Ví d? 12:Ví d? 12. Thêm bao ?óng
mapclass AirportController {
def map = {}
} B?y gi? vào ??a ch? http://localhost:9090/trip/airport/map trên trình
duy?t c?a b?n. B?n th?y B?n ?? Google ???c nhúng, nó trong gi?ng nh? Hình
5:Hình 5. B?n ?? Google ??n gi?nB?y gi? quay l?i map.gsp và ng?t các giá tr?, nh? ???c bi?u di?n trong Ví
d? 13:Ví d? 13. ?i?u ch?nh b?n ?? c? b?n
&script type="text/javascript"&
var usCenterPoint = new GLatLng(39.833333, -98.583333)
var usZoom = 4
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"))
map.setCenter(usCenterPoint, usZoom)
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
&body onload="load()" onunload="GUnload()"&
&div id="map" style="width: 800 height: 400px"&&/div&
&/body& 800 x 400 ?i?m ?nh là t?p kích th??c t?t cho vi?c xem toàn b? b?n ?? n??c
M?. Ví d? 13 ?i?u ch?nh ?i?m trung t?m và m?c ?? phóng ?? b?n có th? xem
toàn b? b?n ??. B?n có th? thêm m?t s? các ?i?u khi?n b?n ?? khác.
GLargeMapControl và GMapTypeControl trong Ví d?
13 cho b?n các ?i?u khi?n th?ng th??ng d?c theo góc trái và trên ph?i c?a
b?n ??. ??nh kì nh?n nút Refresh c?a trình duy?t c?a b?n ?? xem nh?ng thay
??i c?a b?n có hi?u l?c khi b?n th?c hi?n xung quanh. Hình 6 ph?n ánh
nh?ng ?i?u ch?nh ?? th?c hi?n trong Ví d? 13: Hình 6. B?n ?? ?? ?i?u ch?nh B?y gi? b?n ?? c?a b?n là ? ??y, b?n ?? s?n sàng ?? b?t ??u thêm các ?ánh
d?u — push-pin cho m?i s?n bay c?a b?n. Tr??c khi t?i t?
??ng hóa ti?n trình, Ví d? 14 thêm m?t ?ánh d?u ??n m?t cách th? c?ng: Ví d? 14. Thêm m?t ?ánh d?u vào b?n
??&script type="text/javascript"&
var usCenterPoint = new GLatLng(39.833333, -98.583333)
var usZoom = 4
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"))
map.setCenter(usCenterPoint, usZoom)
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
var marker = new GMarker(new GLatLng(39.8583188, -104.6674674))
marker.bindInfoWindowHtml("DEN&br/&Denver International Airport")
map.addOverlay(marker)
&/script&Hàm GMarker ??a ra ?i?m GLatLng. Ph??ng th?c
bindInfoWindowHtml cung c?p ?o?n m? HTML ???c hi?n th? trên
c?a s? Info khi ng??i dùng nh?n vào ?ánh d?u. ?i?u cu?i cùng c?a Ví d? 14
th?c hi?n là thêm ?ánh d?u vào b?n ?? s? d?ng ph??ng th?c
addOverlay. Hình 7 th? hi?n b?n ?? v?i ?ánh d?u ?? thêm vào:Hình 7. B?n ?? v?i ?ánh d?u Vì b?n bi?t làm th? nào ?? thêm m?t ?i?m ??n, vi?c thêm m?t cách t? ??ng
t?t c? các ?i?m t? c? s? d? li?u yêu c?u hai thay ??i nh?. Thay ??i th?
nh?t ?? th?c hi?n bao ?óng map trong
AirportController tr? v? m?t danh sách các
Airport, nh? ???c trình bày ? Ví d? 15: Ví d? 15. Tr? v? m?t danh sách các
Airportdef map = {
[airportList: Airport.list()]
} Ti?p theo, b?n c?n l?p ?i l?p l?i danh sách các Airport và
t?o các ?ánh d?u cho m?i danh sách. Trong ph?n tr??c c?a lo?t bài này, b?n
?? th?y th? &g:each& ???c dùng ?? thêm các dòng vào m?t
b?ng HTML. Ví d? 16 s? d?ng th? này ?? t?o các dòng JavaScript c?n thi?t
?? hi?n th? các Airport trên b?n ??: Ví d? 16. Thêm các ?ánh d?u vào b?n
??&script type="text/javascript"&
var usCenterPoint = new GLatLng(39.833333, -98.583333)
var usZoom = 4
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"))
map.setCenter(usCenterPoint, usZoom)
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
&g:each in="${airportList}" status="i" var="airport"&
var point${airport.id} = new GLatLng(${airport.lat}, ${airport.lng})
var marker${airport.id} = new GMarker(point${airport.id})
marker${airport.id}.bindInfoWindowHtml("${airport.iata}&br/&${airport.name}")
map.addOverlay(marker${airport.id})
&/script&Hình 8 cho th?y b?n ?? v?i t?t c? các ?ánh d?u ?? thêm vào m?t cách t?
??ng:Hình 8. B?n ?? v?i nhi?u ?ánh
d?u Chuy?n ?i này c?a API B?n ?? Google ch? v?a ?? ?? b?n th?o lu?n s? qua b?
ngoài nh?ng th? mà b?n có th? làm. B?n có th? quy?t ??nh ?? c?p ??n m?
hình s? ki?n ?? th?c hi?n các l?i g?i Ajax mà tr? v? d? li?u JavaScript
Object Notation (JSON) khi các ?ánh d?u ???c nh?n. B?n có th? s? d?ng các
GPolyline ?? v? các ch?ng riêng c?a m?t chuy?n ?i trên b?n
??. Các kh? n?ng là v? t?n. ?? bi?t thêm th?ng tin, tài li?u tr?c tuy?n
c?a Google là tuy?t v?i. B?n c?ng có th? có m?t gi?i thi?u nh? v? API t?
cu?n sách PDF c?a t?i Google Maps API (xem ). K?t lu?n Vi?c thêm các b?n ?? vào ?ng d?ng Grails c?a b?n yêu c?u ??a vào ba thành
Ph?n ??u tiên là m? ??a l? d? li?u c?a b?n. Ngoài ra có nhi?u trình sinh
m? ??a lí mi?n phí mà chuy?n ??i các v? trí ng??i dùng có th? ??c ???c
thành các ?i?m v? ??/kinh ??. G?n nh? b?t kì ?i?u gì có th? ???c m? hóa
??a lí: các ??a ch? ???ng ph?, các thành ph?, các h?t, các bang, các qu?c
gia, các m? vùng, các s? ?i?n tho?i, các ??a ch? IP, và th?m chí các m?
IATA cho các s?n bay. M?t khi b?n tìm th?y trình sinh m? ??a lí ?úng cho c?ng vi?c, t?o m?t d?ch
v? Grails ?? ?óng gói các d?ch v? Web t? xa g?i ??n ph??ng th?c s? d?ng
l?i. Nh?ng d?ch v? cho các ph??ng th?c này mà ?i xa h?n các thao tác CRUD
??n gi?n trên ??i t??ng mi?n ??n. Nh?ng d?ch v? kh?ng liên quan ??n URL
m?c ??nh, nh?ng b?n có th? t?o m?t cách d? dàng m?t bao ?óng trong m?t b?
?i?u khi?n ?? th?c hi?n ??a ch? hóa Web chúng. Cu?i cùng, t?n dùng ?u ?i?m c?a API ánh x? Web mi?n phí ch?ng h?n nh? B?n
?? Google ?? v? các ?i?m v? ??/kinh ?? c?a b?n trên m?t b?n ??. Nh?ng d?ch
v? mi?n phí này th??ng ?òi h?i ?ng d?ng c?a b?n c?ng ???c truy c?p mi?n
phí. N?u b?n mu?n gi? b?n ?? cá nh?n c?a riêng b?n, h?y xem xét API ngu?n
m? ch?ng h?n nh? OpenLayers, nó cung c?p kinh nghi?m ng??i dùng gi?ng nh?
B?n ?? Google mà kh?ng có s? h?n ch? s? d?ng t??ng ?ng (xem ). B?n s? c?n ph?i cung c?p các l?p
b?n ?? c?a riêng b?n, nh?ng b?n s? có th? l?u tr? toàn b? ?ng d?ng vào máy
ch? c?a riêng b?n.
Trong bài vi?t ti?p theo, t?i s? nói v? cách ?? th?c hi?n ?ng d?ng Grails
c?a b?n trên m?ng di ??ng m?t cách th?n thi?n. B?n s? bi?t làm th? nào ??
t?i ?u các khung nhìn cho hi?n th? iPhone. T?i c?ng s? gi?i thích vi?c g?i
th?ng tin t? Grails qua th? ?i?n t? mà xu?t hi?n nh? là m?t tin nh?n SMS
trên ?i?n tho?i c?a b?n. Cho ??n lúc ?ó, h?y vui v? v?i vi?c n?m v?ng
T?i v?M? t?TênKích th??cM? ví d?863KB
Tài nguyên: ??c thêm trong lo?t bài này ?? thu
???c s? hi?u bi?t h?n v? Grails và t?t c? nh?ng gì mà b?n có th? làm v?i
nó.: Ghé th?m trang Web Grails. : ??a b?n qua vi?c b?t ??u v?i Grails và x?y d?ng
các ?ng d?ng Web v?i khung làm vi?c Grails. : D?ch v? m? ??a lí GeoNames ???c d?a trên ki?n trúc
Representational State Transfer (REST) : Nhúng
Các b?n ?? Google vào các trang Web c?a b?n.: Nhúng các b?n ?? Yahoo! vào trang Web c?a b?n và
các ?ng d?ng màn hình n?n.: Nh?p m? ??a lí trên Wikipedia. (Scott Davis, Pragmatic Programmers, 2007): Sách c?a
Scott Davis gi?i thi?u v? H? th?ng Th?ng tin ??a lí (Geographic
Information Systems (GIS)) theo nh?ng t? ng? ??n gi?n và th? hi?n nh?ng
h??ng d?n th?c hành.
(Scott Davis, Pragmatic
Programmers, 2006): H?c làm th? nào ?? v? các b?n ??, thêm các di?n gi?i
và các l? trình, và m? hóa ??a lí d? li?u c?a b?n.: OpenLayers là m?t th? vi?n JavaScript dành cho
vi?c hi?n th? d? li?u b?n ?? trên h?u h?t các trình duy?t Web. (Scott Davis, Pragmatic Programmers, 2007): Bi?t thêm
v? Groovy và Grails trong cu?n sách m?i nh?t c?a Scott Davis.: Chu?i các developerWorks này
???c dành ?? khám phá tác d?ng th?c t? c?a Groovy và d?y cho b?n khi nào
và nh? th? nào ?? áp d?ng chúng m?t cách thành c?ng.: Bi?t thêm v? Groovy ? trang Web d? án. : Keep up with the latest Groovy news and article
links. : Duy?t các cu?n sách v? các ch? ?? k? thu?t này
và khác.: Tìm hàng tr?m bài vi?t v? m?i khía c?nh c?a l?p
trình Java. : T?i v? các
Grails m?i nh?t. : T?i v?
OpenLayers. Ki?m tra
tham gia vào c?ng ??ng .
developerWorks: ??ng nh?p
Các tr??ng ???c ?ánh d?u hoa th? là b?t bu?c (*).
??nh danh IBM:*
M?t kh?u:*
Gi? tr?ng thái ??ng nh?p.
B?ng vi?c nh?n G?i, b?n ?? ??ng ? v?i các ?i?u kho?n s? d?ng developerWorks .
? l?n b?n ??ng nh?p ??u tiên vào trang developerWorks, m?t h? s? cá nh?n c?a b?n ???c t?o ra.
Th?ng tin trong b?n h? s? này (tên b?n, n??c/vùng l?nh th?, và tên c? quan) s? ???c tr?ng ra cho m?i ng??i và s? ?i cùng các n?i dung mà b?n ??ng, tr? khi b?n ch?n vi?c ?n tên c? quan c?a b?n.
B?n có th? c?p nh?t tài kho?n trên trang IBM b?t c? khi nào.
Th?ng tin g?i ?i ???c ??m b?o an toàn.
Ch?n tên hi?n th? c?a b?n
L?n ??u tiên b?n ??ng nh?p vào trang developerWorks, m?t b?n trích ngang ???c t?o ra cho b?n, b?n c?n ph?i ch?n m?t tên ?? hi?n th?.
Tên hi?n th? c?a b?n s? ?i kèm theo các n?i dung mà b?n ??ng t?i trên developerWorks.Tên hi?n th? c?n có t? 3 ??n 30 k? t?.
Tên xu?t hi?n c?a b?n ph?i là duy nh?t trên trang C?ng ??ng developerWorks và vì lí do an ninh nó kh?ng ph?i là ??a ch? email c?a b?n.
Các tr??ng ???c ?ánh d?u hoa th? là b?t bu?c (*).
Tên hi?n th?:*
(Tên hi?n th? c?n có t? 3 ??n 30 k? t?)
B?ng vi?c nh?n G?i, b?n ?? ??ng ? v?i các ?i?u kho?n s? d?ng developerWorks .
Th?ng tin g?i ?i ???c ??m b?o an toàn.
Khám phá các bài vi?t xoay quanh l?nh v?c d? li?u, Qu?n l? h? th?ng th?ng tin
Xem các bài vi?t v? HTML, CSS, JavaScript,...
Tìm hi?u v? ?i?n toán ?ám m?y
static.content.url=/developerworks/js/artrating/SITE_ID=70Zone=C?ng ngh? JavaArticleID=461870ArticleTitle=Làm ch?
Grails: Các d?ch v? Grails và b?n ?? Googlepublish-date=

我要回帖

更多关于 quanhuang 的文章

 

随机推荐