プログラマメモ2 - programmer no memo2

郵便番号から、緯度経度をもとめて、地図の真ん中に設定したいです。 2015/07/05


google map apiです。
郵便番号から、緯度経度をもとめて、地図の真ん中に設定したいです。
コードはかなりわかってないです。

下記のコードは、いろいろ試行錯誤した結果です。



<script type="text/javascript"> var map; function initialize() { var mapOptions = { center: { lat: -34.397, lng: 150.644}, zoom: 13, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); } google.maps.event.addDomListener(window, 'load', initialize); function show01() { var p = document.getElementById('postalCode'); var pcode = p.value; var geocoderCallback = function( results, status ) { if( status == google.maps.GeocoderStatus.OK ) { var movePos = results[0].geometry.location; console.log(movePos); map.setCenter(movePos); } else { alert(status); } }; var geocoder = new google.maps.Geocoder(); geocoder.geocode({ 'address': pcode , 'componentRestrictions':{'country':'jp'} , 'language':'ja', 'region': 'JP'} , geocoderCallback); } </script>

AJAX Search API をYAJLで使ってみます。 2010/06/07


アプリ経由でgoogleさんの検索結果が欲しいなと思いました。
JSONで取得することにして、簡単だー、と思っていたら、Objective-CでどうJSONって扱うのだろうというところでとまどいました。


こちらの記事を読んでYAJLを使ってみることに決定。

使用しているライブラリは、

ここまではいいのですが、Objctive-Cをよく理解できていない僕は、悩むわけでした。

なんとか、必要な情報をとるためのコードをこさえました。
参考

yajl-objcをとりこんだあとは、
これを忘れずに、
#import "YAJL.h"


Objective-Cってなかなか柔軟であることに気がつきました。
(いまさらですが...)

YAJLDocumentベースで作成してます。

コード
NSString *urlString = @"http://ajax.googleapis.com/ajax/services/search/web?q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%A1%E3%83%A22&v=1.0&rsz=large&hl=ja";

NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];

NSError *error = nil;
YAJLDocument *document = [[YAJLDocument alloc] initWithData:data parserOptions:YAJLDecoderCurrentTypeDict error:&error];

NSLog(@"Root: %@", document.root);
NSLog(@"==================================");
NSLog(@"responseStatus==>[%@]", [document.root objectForKey:@"responseStatus"]);// ステータス200ならOK
id cursor = [[document.root objectForKey:@"responseData"] objectForKey:@"cursor"];// カーソル
{
NSLog(@"型を調べてみると==>[%@]", [cursor class]);
for (id o in cursor) {
NSLog(@" 型==>%@", [o class]);
}
}
id results = [[document.root objectForKey:@"responseData"] objectForKey:@"results"];// 検索結果

NSLog(@"型を調べてみると==>[%@]", [results class]);
for (id o in results ) {
NSLog(@" 型==>%@", [o class]);
NSLog(@" %@", [o objectForKey:@"cacheUrl"]);
NSLog(@" %@", [o objectForKey:@"content"]);
NSLog(@" %@", [o objectForKey:@"titleNoFormatting"]);
NSLog(@" %@", [o objectForKey:@"url"]);
}
[document release];


あとは型でチェックするコードを追加すればまあまあいけるかな。どうでしょうか。

ジオコード知っているのならgetLatLngを使うより、直接GLatLngをつくって使ったほうがよいかも。- google map api 2010/05/22

グーグルさんのMap APIです。
GClientGeocoderには、getLatLng(address:String, callback:function) というメソッドがあってそれを使用していました。
でaddressに、例)「35.7524424,139.8022971」とかいうデータを渡して使っていました。
で、この結果で得られる、GLatLngがのlat.lngが僕が期待している値と違う場合がありました。
冷静に考えれば、ジオコードわかってるのなら、検索かけて作る必要がないわけで....

結論ですが、ジオコードがわかってるなら、getLatLngを使わず、直接、GLatLngを作成して、GMarkerを使うべしというわけです。
反省してます。。。

var ss = address.split(",");
var point = new GLatLng(ss[0], ss[1]);
var marker = new GMarker(point);

旧ブログからの引っ越し その2 blogger(GoogleAPI) 2006/11/26
2008/04/05

旧ブログからデータを移行させる試みです。

旧ブログからgoogleApiを使用して、一気にデータを取得する方法をみつけきれなかったので、ちょっと工夫して取得してみました。
短いコードですが、ここまでたどりつくのに、時間がかかってしまいまいた。

実行すると簡単にデータを移行できました。

工夫した点:apiを利用してデータを取得する場合、取得する上限あるようにみえるの(25?)なので、時間指定(min,max)を使用して細かくデータを取得する方法をとった。

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import com.google.gdata.client.GoogleService;
import com.google.gdata.client.Query;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.Person;
import com.google.gdata.util.ServiceException;

public class TestBlogger5 {

public static void main(String[] args) throws IOException, ServiceException {
newBlog(getAllEntry());
}

public static List<entry> getAllEntry() throws IOException,
ServiceException {

URL feedUrl = new URL("http://www.blogger.com/feeds/old-blog-id/posts/full");
Query query = new Query(feedUrl);
GoogleService service = new GoogleService("blogger", "getAllEntry.app");
service.setUserCredentials("blogger id", "password");

DateTime min = DateTime.parseDateTime("2005-12-31T23:59:59");
// DateTime max = DateTime.now();
DateTime max = DateTime.parseDateTime("2006-10-24T23:59:59");
List<entry> returnList = new ArrayList<entry>();
do {
query.setUpdatedMin(min);
query.setUpdatedMax(max);
Feed resultFeed = service.query(query, Feed.class);

if (!(0 <> list = resultFeed.getEntries();
for (Entry entry : list) {
// thid code need?
max = new DateTime(entry.getPublished().getValue());
System.out.println(entry.getId());
System.out.println(max);
}
returnList.addAll(list);

} while (true);
return returnList;
}

public static void newBlog(List<entry> list) throws IOException,
ServiceException {
URL postUrl = new URL("http://www.blogger.com/feeds/new-blog-id/posts/default");

GoogleService myService = new GoogleService("blogger",
"add.new.blog.app");
myService.setUserCredentials("google-id", "password");
Person author = new Person("your name", null, "google-id");

int cnt = 0;
for (Entry entry : list) {
entry.getAuthors().add(author);
Entry insertedEntry = myService.insert(postUrl, entry);
cnt += 1;
System.out.println("o_o>>" + cnt);
}
}
}


いまさらながら、apiが公開されているのは便利ですね。