GoogleMapのStaticmapを使用してMap表示するには


Hiisan  2021-05-24 08:21:12  No: 149674

[Window10,Delphi10.3 Delphi Community Edition]で、下記動作を、すると、
   エラー[Exception:HTTp/1.1 403 Forbidden]がでる
URL:'http://maps.googleapis.com/map/api/staticmap?パラメータ'
     パラメータ:'center=35.0,135.0&size=640x320&scale=1&zoom=1&key=apikey'
keyの設定:apikey:13桁-18桁_6桁、アプリケーションの制限:HTTPリファラー、APIの制限:キーを制限
で設定し、Google Maps Patform API Checker:緑色表示で確認OK
-----------------------------
[A]formに、[Buttutton1][idhttp1][ImageMap(Timage)]を配置し
[B]procedure TForm1.Button1Click(Sender)
 var
  StreamData :TMemoryStream;
  JPEGImage  : TJPEGImage;
  Apikey,build,Url:string;
begin
  buildUrl:=URL;
  StreamData := TMemoryStream.Create;
  JPEGImage  := TJPEGImage.Create;
  try
    try
     idhttp1.Get(BuildURL, StreamData); //Send the request and get the image
     StreamData.Seek(0,soFromBeginning);
     JPEGImage.LoadFromStream(StreamData);//load the image in a Stream
     ImageMap.Picture.Assign(JPEGImage);//Load the image
    Except On E : Exception Do
     MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
    End;
  finally
    StreamData.free;
    JPEGImage.Free;
  end;
end;
[C]コンパイルすると、エラー[EXceptinException HTTP/1.1 403 Forbidden]
[D]Exception HTTP/1.1 403 forbiddenを、検索し、検討しましたが、原因不明:Google側?
宜しくご指導願います。


take  2021-05-24 09:06:10  No: 149675

動かないも何もサンプルURL
http://maps.googleapis.com/map/api/staticmap

が404で値を返さないのでDelphiは関係無いと思います

httpだから値を返さないのかと思ってGoogleのJavascriptを呼んでみました

http://maps.google.com/maps/api/js?language=ja

API不要なこれは返すみたいですね。

で使いたいのは「staticmap」のようなので試しに

https://maps.googleapis.com/maps/api/staticmap?key=&size=640x480

を呼んだらAPIを要求されたのでAPIを入れれば動くんじゃないですかね?


Hiisan  2021-05-25 14:34:26  No: 149676

takeさま、ご指摘の文にapikeyを入れ
https://maps.googleapis.com/maps/api/staticmap?key=&size=640x480&key=Apikeyで
実行すると、コンパイルエラー[SSLライブラリーが、読み込めませんでした]が、でました。
確認事項:APiの認証要件、APIの使用状況と請求は、問題ありませんでした。
参照 http://developers/google.com/maps/documentation/maps-static/start?hl=ja
idhttp1.Get(BuildURL, StreamData)で、発生しています。
よろしくお願いいたします。


take  2021-05-25 15:00:03  No: 149677

GoogleMAP APIから地図データ得るのに SSLサイトを使用すべきなのかはGoogleのヘルプ見ないとわからないので
とりあえずhttpsのサイトとして SSLを使うのであればまず

Mr.XRAYさんのWEBサイトでHTTPSサーバーへのアクセス方法を調べて下さい
http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07

それでも駄目な場合は最新版 Windows10と SSLの相性?みたいなのもあるのでそっちも疑わないと行けなくなります
https://note.com/ksakurai007/n/nf1108992aedb

SSLサイトのページが読めるかどうか、その後Googleから読めるのかどうか?
段階的に見ないと、どこで問題が発生しているのかわからなくなります。


Hiisan  2021-05-26 22:03:18  No: 149679

takeさま、どうも有り難う御座いました
>それでも駄目な場合は最新版 Windows10と SSLの相性?みたいなのもあるのでそっちも疑わないと行けなくなります
>https://note.com/ksakurai007/n/nf1108992aedb:indyのSSLライブラリー問題
--->Net タブにある TNetHTTPRequestコンポーネント、TNetHTTPClientコンポーネントを使うのがよさそうです。
それで
TNetHTTPRequestコンポーネントとClientプロパティで、進めたいのですが、
StaticMapの参考例を、誠にお手数ですがご教授願えませんんか。


take  2021-05-27 08:47:03  No: 149680

やりたいことはおそらくDelphiアプリでGoogleMAPを表示させたいのだと思われますが
まず

1.GoogleChromeなどのWEBブラウザのURL入力に画像要求用パラメータを記入して
  正しく地図データが得られるか?
  得られないのであればそのときのエラー番号から推測

2.Delphi でhttps通信が正しくできているか確認
  OpenSSLのダウンロードと適切な場所へのコピー
  Delphiコンポーネントの設定が必要
  その後  OpenSSLで正しくhttps通信が出来ているか
  例えば  https://www.google.com/ を呼んで情報が得られれば成功です
  得られないならDelphi側の設定の問題
  得られるなら検索ワードを送って検索結果を返したりできるはず

1と2まで出来れば Delphiのコンポーネントから 1のURLを呼ぶプログラムを書いて
ただしく情報が得られるか?
という事になります。

参考になるようなサイトはかなり古い情報なので今のGoogleでは使えないでしょう
私自身はGoogleの他のサーバーと通信するプログラムを書いていますが
残念ながらStaticMapの経験はありません。

通信部分も自作でOpenSSLとの暗号化複合化も自作なので通信部分のアドバイスは出来ますが
Indyは使ったも無い状態です


Mr.XRAY  2021-05-29 06:29:11  No: 149681

2018年6月11日以降、Google Map 関係の API の使用には,課金登録が必要となっています.また,

> /api/staticmap?パラメータ'
Google Static Maps の機能を使用するには署名の設定が必要ですが,
この点はよろしいでしょうか ?. 

[ Google Static Mapsを使ってみた ]
https://www.okamoto-net.com/c1036/

[ Google Maps API を使用して地図を表示 ]
http://mrxray.on.coocan.jp/Delphi/Others/000-007.htm


Mr.XRAY  2021-05-29 07:09:48  No: 149683

それと,Google Static Maps API で取得する画像の形式は,
デフォルトでは PNG です.


Hiisan  2021-05-29 11:30:35  No: 149684

Mr.XRAYさま、いつもお世話になっております。
下記[Q1-3]について、お教えねがいます。(pngの件、署名のは、未対応です)
作成プログラム:
usess: NetHTTPClient1: TNetHTTPClient;  NetHTTPRequest1: TNetHTTPRequest;
procedure TForm2.btnGetpictureClick(Sender: TObject);
var
  APIkey,URL:string;URL:='http://maps.googleapis.com/maps/api/staticmap?         &center=35.000,135.000&size=640x320&scale=1&zoom=10&sensor=false&'+Apikey;
  ResponceContent:=TMemoryStream.Create;
  Encoding:=TEncoding.GetEncoding(932);
  NetHTTPRequest1.Get(URL,ResponceContent);<---A:下記[1]のエラーがでる
  Memo1.Lines.LoadFromStream(ResponceContent,Encoding);
 ResponceContent.free;
end;
[1]エラー内容
 The Google Maps Platform server rejected your request. 
 You must use an API key to authenticate each request to Google Maps Platform APIs.
  For additional information, please refer to http://g.co/dev/maps-no-account
[2]上記エラーは、AKeyの設定エラーですが、[Google platform Api Checker]では、Sucessが、出ているので
   (Q1)Account,課金も、問題なくすべてがOKと、考えていますが、Sucessは、Projectと、IDのみOKと考えるのでしょうか
[3][Google platform Api Checker]に表示
  MapsPlatform Report
   Sucess:WooHoo! This Site is correctly Using an API key when Loading the maps JavaScript API V3.
  JS API Call:
   http://maps.googleapis.com/js?key=AIZA****s5qk&&callback=initmap
---------------↑:massage
  (Q2)StaticMap:JavaScript APIは、使用しない 
      StaticAPIでは:設定ミス
  (Q3)JS API Call以降の意味が解りません
宜しくご指導願います。いつも質問ばかりで恐れ入ります


Mr.XRAY  2021-05-29 14:49:05  No: 149685

> usess: NetHTTPClient1: TNetHTTPClient;  NetHTTPRequest1: TNetHTTPRequest; 

これ,エラーになりません ?

> 宜しくご指導願います。いつも質問ばかりで恐れ入ります

私の理解を越えています (私の脳が拒絶反応しています).
ということで,
堪えがたきを耐え,忍び難きを忍び,謹んで辞退させて頂きます.


take  2021-05-29 22:03:03  No: 149687

回答者がこうしてみたらどうなりますか?に対してそれを試さずにさらに質問が来てもなぁ

[1]エラー内容
そのエラー内容の一部単語で検索したら普通に日本語で回答出てきました。
どうしてダメなのかとかどうすればいいのか?詳しく解説されてるWEBサイトでした。

[2]AKeyの設定エラー・・・
アカウントも課金も問題なしと思ってるだけなのでは?
設定出来てなければエラーが出ます

>ご指導願います。
答えだけ求められても

DelphiからGoogleMAPの画像を取得するプログラム
うん、これ普通に客先から依頼されて作ってお金もらうやつですね


Mr.XRAY  2021-05-30 21:53:38  No: 149688

take さんのレス (2021-05-27 08:47:03  No: 149680) にある

> 1.GoogleChromeなどのWEBブラウザのURL入力に画像要求用パラメータを記入して
>   正しく地図データが得られるか? 

の具体的な方法の説明用画像です.

http://mrxray.on.coocan.jp/Delphi/Others/000-007.htm#fig4


Mr.XRAY  2021-06-11 14:38:02  No: 149708

以前提示した記事で,API キーを HTML コードから隠す必要があると書きました.
以下のページの最後の方に,参考になるかも知れないことを書いておきました.

[ HTTP サーバの環境変数を取得 ]
http://mrxray.on.coocan.jp/Delphi/Others/000-009.htm


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加