Android中天地图的使用解析

最近项目中需要使用天地图的项目。因为项目需求必须使用天地图来显示,这里对踩过的坑和开发做一个总结:

效果图如下:

1:首先注册天地图的账号,这个不用过多介绍。

2:找到个人界面,创建一个新应用,目的是获取天地图的key,从2019年1月1日开始需要用户注册才能获取key。

3:用户创建新应用的时候会让我们填入应用的SHAI值,我们打开Androidstudio找到我们任意一个有签名的项目,

    如果没有可以自己设置一个签名,然后输入如下命令,其中打码的是我本地应用的签名文件名,这里就不展示了:

然后输入密码,就是我们签名的密码,SHAI就出来了,然后填入需要申请的填入发布版SHA1和开发版SHA1就可以了。

4:地图key申请好了然后在相关下载----->移动API开发包(找到最新的)下载解压出来。

5:找到解压文件夹打开:如下标1的部分和标2的部分放到下面对应的文件夹下

放入Androidstudio的如下目录下的界面显示如下:

6:在AndroidManifest中添加如下权限:

<!-- 天地图所需权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission androi
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
计算Maghrib时,可以使用以下公式: ``` double fajrAngle = 18.0; // Fajr angle in degrees double maghribAngle = 17.0; // Maghrib angle in degrees double ishaAngle = 18.0; // Isha angle in degrees double latitude = /* Your latitude in degrees */; double longitude = /* Your longitude in degrees */; double timeZone = /* Your time zone offset from GMT in hours */; double julianDate = getJulianDate(/* Current date and time */); double solarNoon = getSolarNoon(longitude, timeZone, julianDate); double fajrTime = getFajrTime(latitude, fajrAngle, timeZone, solarNoon); double maghribTime = getMaghribTime(latitude, maghribAngle, timeZone, solarNoon); double ishaTime = getIshaTime(latitude, ishaAngle, timeZone, solarNoon); // Maghrib time in 24-hour format String maghribTimeString = formatTime(maghribTime); ``` 其中,`getJulianDate`、`getSolarNoon`、`getFajrTime`、`getMaghribTime`、`getIshaTime`和`formatTime`是自定义的方法,可以根据以下算法实现: 1. 计算儒略日(Julian Date) ``` private static double getJulianDate(/* Current date and time */) { // TODO: Implement Julian Date algorithm } ``` 2. 计算太阳中天时间(Solar Noon) ``` private static double getSolarNoon(double longitude, double timeZone, double julianDate) { double t = julianDate - 2451545.0; double longitudeHour = longitude / 15.0; double solarNoon = 12.0 - longitudeHour - timeZone + (t / 36525.0); return solarNoon; } ``` 3. 计算黎明时间(Fajr Time) ``` private static double getFajrTime(double latitude, double fajrAngle, double timeZone, double solarNoon) { double sinDec = 0.39779 * Math.cos(0.2163108 + 2 * Math.atan(0.9671396 * Math.tan(0.00860 * (solarNoon - 12.0))))); double cosDec = Math.sqrt(1 - sinDec * sinDec); double cosH = (Math.sin(Math.toRadians(fajrAngle)) - sinDec * Math.sin(Math.toRadians(latitude))) / (cosDec * Math.cos(Math.toRadians(latitude))); double fajrTime = 12.0 + (Math.toDegrees(Math.acos(cosH)) / 15.0) - timeZone; return fajrTime; } ``` 4. 计算日落时间(Maghrib Time) ``` private static double getMaghribTime(double latitude, double maghribAngle, double timeZone, double solarNoon) { double sinDec = 0.39779 * Math.cos(0.2163108 + 2 * Math.atan(0.9671396 * Math.tan(0.00860 * (solarNoon - 12.0))))); double cosDec = Math.sqrt(1 - sinDec * sinDec); double cosH = (Math.sin(Math.toRadians(maghribAngle)) - sinDec * Math.sin(Math.toRadians(latitude))) / (cosDec * Math.cos(Math.toRadians(latitude))); double maghribTime = 12.0 + (Math.toDegrees(Math.acos(cosH)) / 15.0) - timeZone; return maghribTime; } ``` 5. 计算晚间祷告时间(Isha Time) ``` private static double getIshaTime(double latitude, double ishaAngle, double timeZone, double solarNoon) { double sinDec = 0.39779 * Math.cos(0.2163108 + 2 * Math.atan(0.9671396 * Math.tan(0.00860 * (solarNoon - 12.0))))); double cosDec = Math.sqrt(1 - sinDec * sinDec); double cosH = (Math.sin(Math.toRadians(ishaAngle)) - sinDec * Math.sin(Math.toRadians(latitude))) / (cosDec * Math.cos(Math.toRadians(latitude))); double ishaTime = 12.0 + (Math.toDegrees(Math.acos(cosH)) / 15.0) - timeZone; return ishaTime; } ``` 6. 格式化时间(Format Time) ``` private static String formatTime(double time) { int hours = (int) Math.floor(time); int minutes = (int) Math.floor((time - hours) * 60.0); return String.format("%02d:%02d", hours, minutes); } ``` 需要注意的是,以上计算方法仅适用于标准日历,不适用于夏令时和其他时区调整。在实际使用中,应该考虑这些因素并进行相应的调整。
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值