GoogleMaps API を利用して、緯度経度を取得するプログラムにおいての疑問です。
jsonを取得するのに、「http://maps.google.com/maps/api/geocode/json?address=東京駅&sensor=false」をGoogle Chrome に直接URLを放り込むと、日本語・漢字で帰ってくるのに、TIdHTTPを使って次のようにすると、英語で帰ってきます。
今回は、緯度経度は、問題なく得られるので目的に対する支障はないのですが、TIdHTTPを使って日本語で返すにはどうしたらよいのでしょうか。
環境はwin7、XE2です。
例1:Google Chromeに、直接「http://maps.google.com/maps/api/geocode/json?address=東京駅&sensor=false」を放り込ん場合
{
"results" : [
{
"address_components" : [
{
"long_name" : "東京駅",
"short_name" : "東京駅",
"types" : [ "train_station", "transit_station", "establishment" ]
},
{
"long_name" : "東京都",
"short_name" : "東京都",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "日本",
"short_name" : "JP",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "日本, 東京駅(東京)",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 35.691470,
"lng" : 139.7783240
},
以下略
例2:TIdHTTPを用いた場合 Add=東京駅
procedure TForm2.SetLatLng(const Add: string; var formatted_address, lat, lng: String);
var
req: string;
jsonStr: string;
jsonObj: TJSONObject;
values: TJSONArray;
// Add1: String;
HTTP: TIdHTTP;
MS: TMemoryStream;
ENC: TEncoding;
StringList1: TStringList;
Add1: String;
begin
Add1 := Add;
ENC := TEncoding.UTF8;
MS := TMemoryStream.Create;
HTTP := TIdHTTP.Create;
StringList1 := TStringList.Create;
req := 'http://maps.google.com/maps/api/geocode/json?address=' +
TIdURI.ParamsEncode(Add1, TEncoding.UTF8) + '&sensor=false';
http.Get(req, MS);
MS.Position := 0;
StringList1.LoadFromStream(MS,ENC);
jsonStr := StringList1.Text;
//途中の処理は省略
end;
StringList1の結果
{
"results" : [
{
"address_components" : [
{
"long_name" : "Tokyo Station",
"short_name" : "Tokyo Station",
"types" : [ "train_station", "transit_station", "establishment" ]
},
{
"long_name" : "9",
"short_name" : "9",
"types" : [ "sublocality_level_3", "sublocality", "political" ]
},
{
"long_name" : "1丁目",
"short_name" : "1丁目",
"types" : [ "sublocality_level_2", "sublocality", "political" ]
},
{
"long_name" : "Marunouchi",
"short_name" : "Marunouchi",
"types" : [ "sublocality_level_1", "sublocality", "political" ]
},
{
"long_name" : "Chiyoda",
"short_name" : "Chiyoda",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Tokyo",
"short_name" : "Tokyo",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Japan",
"short_name" : "JP",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Tokyo Station, 1丁目-9 Marunouchi, Chiyoda, Tokyo, Japan",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 35.691470,
"lng" : 139.7783240
},
以下略
HTTP.Request.AcceptLanguage:='ja,en-US;q=0.8,en;q=0.6';
としみてたら、どうでしょうか。(すみませんが未検証です)
代入している値はGoogleChromeと同じものです。
ルインリル さん、ありかどうございました。
日本語表記で、とれました。
ツイート | ![]() |