LoginSignup
1
3

More than 5 years have passed since last update.

XMLの情報からGoogleMapにピンを刺す

Posted at

自分用メモ

tast1.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>TASK 1</title>

    <!-- Google Map API. サービスとして運用する場合にはAPI keyを追加する必要がある -->
    <script src="https://maps.googleapis.com/maps/api/js"></script>

    <!-- jQuery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

    <!--cross-domainの問題を解決するファイル-->
    <script src="js/jquery.xdomainajax.js"></script>

    <!-- 課題で編集するjavascriptのファイルパス -->
    <script src="js/readXml.js"></script>
</head>
<body style="margin: 0px; padding: 0px;">
    <!-- Google Mapを表示 -->
    <div id="map" style="width: 2000px; height: 1200px;"></div>

    <!-- Debug用(ヒント用のソースコードで使用している。無視してもOK)-->
    <div id="debug"></div>
</body>
</html>

js/readXml.js
$(function() {

    var latlng = new google.maps.LatLng(35.709700250, 139.762555620);

    var mapOptions = {
        zoom: 17,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map;

    $.ajax({
        url: 'http://www.nakl.t.u-tokyo.ac.jp/tmp/GPS/hongo.xml',
        type: "GET",
        success: function(res) {
            xml = $.parseXML($(res.responseText).text());
            console.log(xml);

            map = new google.maps.Map(document.getElementById('map'), mapOptions);

            for ( var i = 0;  i < xml.getElementsByTagName("trkpt").length;  i++  ) {
                var x = xml.getElementsByTagName("trkpt")[i];
          var lat = x.getAttribute("lat");
                var lon = x.getAttribute("lon");
                var mylatlng = new google.maps.LatLng(lat,lon);

                var marker = new google.maps.Marker({
                position: mylatlng,
                map: map
              });
            };

            // 現在地を取得してみる
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(
                    function(position) {
                        var mapLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
                        var marker = new google.maps.Marker({
                            map : map,
                            position : mapLatLng
                        });
                    }
                )
            }
        }
    });

});
js/jquery.xdomainajax.js
/**
 * jQuery.ajax mid - CROSS DOMAIN AJAX 
 * ---
 * @author James Padolsey (http://james.padolsey.com)
 * @version 0.11
 * @updated 12-JAN-10
 * ---
 * Note: Read the README!
 * ---
 * @info http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
 */

jQuery.ajax = (function(_ajax){

    var protocol = location.protocol,
        hostname = location.hostname,
        exRegex = RegExp(protocol + '//' + hostname),
        YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys',
        query = 'select * from htmlstring where url="{URL}" and xpath="*"';

    function isExternal(url) {
        return !exRegex.test(url) && /:\/\//.test(url);
    }

    return function(o) {

        var url = o.url;

        if ( /get/i.test(o.type) && !/json/i.test(o.dataType) && isExternal(url) ) {

            // Manipulate options so that JSONP-x request is made to YQL

            o.url = YQL;
            o.dataType = 'json';

            o.data = {
                q: query.replace(
                    '{URL}',
                    url + (o.data ?
                        (/\?/.test(url) ? '&' : '?') + jQuery.param(o.data)
                    : '')
                ),
                format: 'xml'
            };

            // Since it's a JSONP request
            // complete === success
            if (!o.success && o.complete) {
                o.success = o.complete;
                delete o.complete;
            }

            o.success = (function(_success){
                return function(data) {

                    if (_success) {
                        // Fake XHR callback.
                        _success.call(this, {
                            responseText: (data.results[0] || '')
                                // YQL screws with <script>s
                                // Get rid of them
                                .replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, '')
                        }, 'success');
                    }

                };
            })(o.success);

        }

        return _ajax.apply(this, arguments);

    };

})(jQuery.ajax);
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3