基于SpringBoot和PostGIS的全球首都信息管理设计与实现

举报
夜郎king 发表于 2024/12/31 12:59:41 2024/12/31
【摘要】 博客主要讲解如何在SpringBoot和PostGIS的首都信息管理,首先讲解结合全球城市信息和全球国家信息进行空间数据库表的建模,然后讲解如何在SpringBoot中的业务逻辑管理设计与实现,最后给出当前的数据整理出来的全球首都信息成果列表。

 目录


前言

一、首都空间表的设计

1、三张空间表的结构

二、SpringBoot后台管理的设计与实现

1、模型层的实现

2、业务层及控制层实现

三、前端的实现与成果可视化

1、新增数据的保存

2、首都的实际管理成果

3、全球首都信息

 四、总结



前言

        首都,一个国家的政治、文化和经济中心,是国家的心脏,也是其对外展示的窗口。它们不仅是国家权力的象征,更是全球交流与合作的重要平台。在这个全球化的时代,首都的作用愈发显著,它们不仅是国内政策的制定地,也是国际关系和全球治理的关键节点。首都,作为国家的象征,承载着国家的历史与文化。从北京的紫禁城到华盛顿的白宫,从巴黎的埃菲尔铁塔到莫斯科的克里姆林宫,每一座首都都有其独特的故事和魅力。它们不仅是历史的见证者,也是现代文明的创造者。首都的建筑风格、城市规划和文化活动,无一不反映出一个国家的精神面貌和发展理念。

        在全球政治舞台上,首都扮演着至关重要的角色。它们是国家领导人会晤、国际会议举办的地方,是外交政策的发源地。在这里,各国领导人就全球性问题进行磋商,寻求合作与解决方案。首都的决策往往影响着世界的未来走向,从和平协议的签署到经济合作的达成,首都是这些重大事件的见证地。经济上,首都往往是国家的经济引擎。它们集中了国家的主要金融机构、企业总部和创新中心,是经济发展的驱动力。首都的经济活力不仅影响着本国的繁荣,也对全球经济产生深远影响。例如,纽约的华尔街、伦敦的金融城、东京的丸之内,这些地区不仅是本国经济的心脏,也是全球金融市场的重要组成部分。

        文化上,首都是国家文化的汇聚地。博物馆、剧院、艺术画廊和学术机构在这里云集,它们保存和传播着国家的文化遗产,同时也是国际文化交流的平台。首都的文化活动和节日庆典,如北京的春节、里约热内卢的狂欢节、柏林的电影节,不仅丰富了市民的生活,也吸引了世界各地的游客和文化爱好者。然而,首都也面临着诸多挑战。随着城市化进程的加快,首都面临着交通拥堵、环境污染、住房紧张等问题。如何在保持经济增长的同时,实现可持续发展,是每个首都都需要面对的问题。在这个多元化和互联互通的世界中,首都的作用越来越重要。它们不仅是国家的心脏,也是连接世界的桥梁。通过研究全球首都,我们可以更好地理解国家之间的互动,以及它们在全球舞台上的角色和影响。

        在全球一体化的今天,研究全球首都的时空分布以及空间位置,同时加上经济和人口的分析就显得非常有必要。博客主要讲解如何在SpringBoot和PostGIS的首都信息管理,首先讲解结合全球城市信息和全球国家信息进行空间数据库表的建模,然后讲解如何在SpringBoot中的业务逻辑管理设计与实现,最后给出当前的数据整理出来的全球首都信息成果列表。如果您对此比较有兴趣,不妨来这里看看。

一、首都空间表的设计

        要想实现全球首都的信息管理,需要与之前我们介绍过的两类数据进行管理。第一个是全球国家的信息,第二个是全球的城市信息。一个国家有许多的城市,它与城市的关系是一对多的关系。因此,这里的首都信息,其实是关联我们的国家信息与城市信息,为了能支持迁都这种特殊的业务,因此我们就涉及出一个中间表,并且能标记出当前城市的使用标识,以此来标识当前城市是否作为首都在使用。本节就将重点介绍这三张表以及空间关系表的设计与实现。

1、三张空间表的结构

        为了让第一次看到这篇博客的朋友不至于太突兀,这里还是打算把三张表的主要字段和联系给大家说明一下。首先第一张是国家信息表,作用是存储全球的国家基本信息以及国家的矢量范围。它的表结构如下:

        它包括基本的中英文全称、简称等信息、所属大洲以及空间字段信息。

         第二张表是全球的城市信息,这里采用的OSM分享的数据,数据总条数大约在7342,从全球的范围来说,基本包含了主要的城市,同时这张表的字段非常多,有人口的数据,不同语种的城市名称信息。

        这张表的字段大约有130多列,当然,在实际的业务中,我们是可以根据一些业务的维度来进行拆分,比如可以将人口拆成多行,这样就可以极大的避免宽度的爆炸。当然,这是在数据库设计时究竟是采用高表还是宽表的设计方法。大家可以根据实际业务来进行抉择。 

        每个国家的首都,首先也是一个城市,因此,首都必然是全球这么多城市集合中的一个子集,所以我们可以建立一张关系表也就是中间表,如前文所提的,将国家id信息和城市id信息关联起来。以此来进行信息的串联。中间表的结构如下:

        在这张中间关系表中,分别有两个字段用来关联国家信息和城市信息,还有一个开始日期和结束日期。主要的作用就是有一些国家在建设过程中曾经进行过迁都,因此我们将首都信息进行合理的管理,也为后续的分析和可视化打下良好的基础。

二、SpringBoot后台管理的设计与实现

        在完成空间数据建模及物理表的设计与实现之后,就可以根据物理表来进行实际API接口的开发,这里采用MVC设计模式来进行实现。主要讲解如何使用SpingBoot来进行后台管理功能的设计与实现。

1、模型层的实现

        模型层包含两个方面的内容,第一个是数据库操作实体,比如数据库物理表对应的实体对象。第二个是就是基于物理实体对象的Mapper对象,也是ORM的主要对象。物理表的对应实体代码如下:

package com.yelang.project.extend.earthquake.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yelang.framework.web.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@TableName(value ="biz_country_capital")
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class CountryCapital extends BaseEntity{

	private static final long serialVersionUID = -5930058973652379187L;
	@TableId(value = "pk_id")
    private Long pkId;//主键
	@TableField(value = "start_time")
	@JsonFormat(pattern = "yyyy-MM-dd")
	private Date startTime;
	@TableField(value = "end_time")
	@JsonFormat(pattern = "yyyy-MM-dd")
	private Date endTime;
	@TableField(value = "use_flag")
	private Integer useFlag = 1;
	@TableField(value = "country_id")
	private Long countryId;
	@TableField(value = "places_id")
	private Long placesId;
	@TableField(exist = false)
	private String placesName;
}

        再定义了物理表的实体类之后,我们来创建数据操作对象的实现,这里主要是实现自定义的城市信息的查询,这里基于Mybatis-plus来实现内置SQL的实现模式,关键代码如下:

package com.yelang.project.extend.earthquake.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yelang.project.extend.earthquake.domain.CountryCapital;
public interface CountryCapitalMapper extends BaseMapper<CountryCapital> {
	static final String FIND_LISTBY_COUNTRYID_SQL="<script>"
			+ "select t1.*,t2.name_zh placesName from biz_country_capital t1,biz_ne_10m_populated_places t2 "
			+ "where t1.places_id = t2.pk_id and t1.country_id = #{countryId} "
			+ "order by t1.start_time desc "
			+ "</script>";
	@Select(FIND_LISTBY_COUNTRYID_SQL)
	List<CountryCapital> findListByCountryId(@Param("countryId")Long countryId);
}

         以上就是模型层的设计与代码实现。

2、业务层及控制层实现

        有了模型层之后,我们采用自底向上的方法进行建设。接下来进行业务层及控制层的实现,其中业务层是我们的核心,这是实际代码的核心部分。为了保证一个城市,最多只能属于一个国家的首都, 因此在进行城市管理和构建时,我们需要保证城市的唯一性。这里我们结合jquery-validate和remote模式来进行讲解。其它的业务层实现比较简单,仅包括数据的插入、修改、删除、查询等,这里还需要定义一个检查数据重复的方法。代码如下:

@Override
public String checkCapitalUnique(CountryCapital capital) {
	Long countryId = StringUtils.isNull(capital.getCountryId()) ? -1L : capital.getCountryId();
	QueryWrapper<CountryCapital> queryWrapper = new QueryWrapper<CountryCapital>();
	queryWrapper.eq("places_id", capital.getPlacesId());
	CountryCapital info = this.baseMapper.selectOne(queryWrapper);
    if (StringUtils.isNotNull(info) && info.getCountryId().longValue() != countryId.longValue())
    {
        return CapitalConstants.CAPITAL_NOT_UNIQUE;
    }
    return CapitalConstants.CAPITAL_UNIQUE;
}

        控制层作为接收前端提交的请求的地方,这里定义以下的接口列表用来处理用户的请求。

序号 方法名称 说明
1 String capital(@PathVariable("countryId") Long countryId,ModelMap mmap) 跳转管理界面
2 TableDataInfo list(@PathVariable("countryId") Long countryId) 查询首都数据
3 String add(@PathVariable("countryId") Long countryId,ModelMap map) 跳转新增界面
4 AjaxResult addSave(CountryCapital capital,String startTimeStr,String endTimeStr) 保存数据
5 String checkCapitalUnique(CountryCapital capital) 重复检查
6 String edit(@PathVariable("id") Long id, ModelMap mmap) 跳转编辑页面
7 AjaxResult editSave(CountryCapital capital,String startTimeStr,String endTimeStr) 保存编辑数据
8 AjaxResult remove(String ids) 删除信息
9 String pplaces() 跳转城市列表
10 TableDataInfo list(Ne10mPopulatedPlaces places) 查询城市信息

        上面给出了控制接口的信息,对于详细的方法实现不进行赘述,代码比较简单,这里给出保存的一个数据处理细节,即将字符串转换成时间。下面分享一种处理办法,在方法中传入字符串,然后将字符串转为时间,具体代码如下:

if(StringUtils.isNotEmpty(startTimeStr)) {
    capital.setStartTime(DateUtils.parseDate(startTimeStr, DateUtils.YYYY_MM_DD));
}
if(StringUtils.isNotEmpty(endTimeStr)) {
    capital.setEndTime(DateUtils.parseDate(endTimeStr, DateUtils.YYYY_MM_DD));
}

        当然为了保证数据的有效性,对于城市定都的开始和结束时间,是可以填写空值的。因此这里如果填入空值,对输入值就可以不进行处理。

三、前端的实现与成果可视化

        在后台实现了API控制接口之后,接下来第三步就是实现处理的界面,毕竟前端界面需要进行业务的实现。这里的实现比较简单,在进行首都的管理时以新增或者编辑为例,我们再打开城市选择列表,勾选城市信息后,再将关系保存到后台,最终实现城市和国家的首都关系建立。

1、新增数据的保存

        在我们的期望当中,我们需要打开一个全球城市的查询列表窗口,用户可以在这个列表窗口中进行城市信息查询,然后勾选后关闭窗口,同时根据选择的结果填充到隐藏的表单字段上,业务逻辑代码如下:

function selectPlaces() {
    var treeId = $("#treeId").val();
    var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
    var url = prefix + "/pplaces";
	var options = {
		title: '选择城市',
		width: parent.window.innerWidth * 0.8,//宽度*0.8
		height: parent.window.innerHeight * 0.85,// 高度*0.8
		url: url,
		callBack: doSubmit
	};
	$.modal.openOptions(options);
}
		
function doSubmit(index, layero){
	var body = $.modal.getChildFrame(index);
	//获取弹出窗口的window对象,需要调用js方法
	var doc = parent.window['layui-layer-iframe' + index].window;
	//获取数据
	var placesData = doc.getSelectedData();
	if(placesData.length >=1){
		$("#placesId").val(placesData[0].pkId);
		$("#placesInfo").val(placesData[0].nameZh + "/" + placesData[0].nameEn);
	}
   	$.modal.close(index);
}

        编辑和新增的业务处理逻辑是差不多的,这里不再进行赘述。需要注意的是,在编辑过程中,需要对首都信息进行处置话,这里分享一些初始化的便捷代码。

<form class="form-horizontal m" id="form-capital-edit" th:object="${capital}">
     <input name="id" th:field="*{pkId}" type="hidden">
     <input type="hidden" th:value="${capital.countryId}" name="countryId" />
     <div class="form-group">    
          <label class="col-sm-3 control-label">开始日期:</label>
          <div class="col-sm-8">
              <div class="input-group">
                   <input type="text" class="form-control" th:value="${#dates.format(capital.startTime, 'yyyy-MM-dd')}" name="startTimeStr" placeholder="yyyy-MM-dd" readonly="readonly"> 
                  <span class="input-group-btn">
                  <button type="button" class="btn btn-success"><i class="fa fa-calendar"></i>
               </button> 
          </span>
      </div>
   </div>
</div>

2、首都的实际管理成果

        在经过上述的开发之后,我们就可以进行首都信息的管理,这里我们将按照场景来分别展示首都的添加、删除、编辑等操作。

        首先在这个界面中点击“首都”按钮,然后打开首都管理列表,以阿富汗为例,打开后可以看到以下的信息:

        这说明我们已经配置好了一条城市信息,如果想要增加城市或者编辑,都是可以进行信息的变更的。 

        选择好目标城市后,点击确认,然后在外面的窗口中点击确定按钮实现城市的管理

3、全球首都信息

        下面分享个人管理查询得到的全球首都信息,将信息都维护好之后。我们就可以使用SQL语句来查询首都信息。查询的SQL语句如下所示:

SELECT
	tc.full_chinese_name,
	tc.full_english_name,
	tp.name_zh,
	tp.name_en 
FROM
	biz_ne_10m_populated_places tp,
	biz_world_country tc,
	biz_country_capital tcc 
WHERE
	tp.pk_id = tcc.places_id 
	AND tc.pk_id = tcc.country_id 
	AND tcc.use_flag = 1;

        在数据库客户端软件中可以查询到以下结果: 

到此说明我们的城市信息已经全部配置完,将完整的信息分享给大家,如果有问题请及时联系。

full_chinese_name	full_english_name	name_zh	name_en
葡萄牙	Portugal	里斯本	Lisbon
拉脱维亚	Latvia	里加	Riga
阿富汗	Afghanistan	喀布尔	Kabul
日本	Japan	东京	Tokyo
叙利亚	Syria	大马士革	Damascus
中华人民共和国	China	北京	Beijing
加拿大	Canada	渥太华	Ottawa
蒙古	Mongolia	乌兰巴托	Ulaanbaatar
朝鲜民主主义人民共和国	Democratic People's Republic of Korea	平壤	Pyongyang
大韩民国	Republic of Korea	首尔	Seoul
越南	Vietnam	河内	Hanoi
老挝人民民主共和国	The Lao People’s Democratic Republic	万象	Vientiane
柬埔寨	Cambodia	金边	Phnom Penh
泰国	Thailand	曼谷	Bangkok
马来西亚	Malaysia	吉隆坡	Kuala Lumpur
新加坡	Singapore	新加坡	Singapore
文莱	Baker Island	斯里巴加湾	Bandar Seri Begawan
菲律宾	Philippines	马尼拉	Manila
吉尔吉斯斯坦	Kyrgyzstan	比什凯克	Bishkek
乌兹别克斯坦	Uzbekistan	塔什干	Tashkent
塔吉克斯坦	Tajikistan	杜尚别	Dushanbe
土库曼斯坦	Turkmenistan	阿什哈巴德	Ashgabat
不丹	Bhutan	延布	Yanbu governorate
印度	India	新德里	New Delhi
孟加拉国	Bangladesh	达卡	Dhaka
斯里兰卡	Sri Lanka	科伦坡	Colombo
马尔代夫	Maldives	马累	Malé
伊朗伊斯兰共和国	Iran	德黑兰	Tehran
伊拉克	Iraq	巴格达	Baghdad
科威特	Kuwait	科威特城	Kuwait City
巴林	Bahrain	麦纳麦	Manama
卡塔尔	Qatar	多哈	Doha
沙特阿拉伯	Saudi Arabia	利雅德	Riyadh
阿曼	Oman	马斯喀特	Muscat
也门	Yemen	萨那	Sanaa
约旦	Jordan	安曼	Amman
以色列	Israel	特拉维夫	Tel Aviv
黎巴嫩	Lebanon	贝鲁特	Beirut
土耳其	Turkey	安卡拉	Ankara
塞浦路斯	Cyprus	尼科西亚	Nicosia
阿塞拜疆	Azerbaijan	巴库	Baku
格鲁吉亚	Georgia	第比利斯	Tbilisi
亚美尼亚	Armenia	埃里温	Yerevan
英国	United Kingdom	伦敦	London
意大利	Italy	罗马	Rome
法国	France	巴黎	Paris
西班牙	Spain	马德里	Madrid
瑞士	Switzerland	伯尔尼	Bern
俄罗斯联邦	Russia	莫斯科	Moscow
瑞典	Sweden	斯德哥尔摩	Stockholm
比利时	Belgium	布鲁塞尔	Brussels
丹麦	Denmark	哥本哈根	Copenhagen
保加利亚	Bulgaria	索非亚	Sofia
白俄罗斯	Belarus	明斯克	Minsk
奥地利共和国	The Republic of Austria	维也纳	Vienna
捷克	Czech Republic	布拉格	Prague
波兰	Poland	华沙	Warsaw
波黑	Bosnia and Herzegovina	萨拉热窝	Sarajevo
安道尔公国	The Principality of Andorra	安道尔城	Andorra la Vella
爱沙尼亚共和国	Republic of Estonia	塔林	Tallinn
爱尔兰	Ireland	都柏林	Dublin
梵蒂冈	Vatican City	梵蒂冈	Vatican City
芬兰	Finland	赫尔辛基	Helsinki
荷兰	Netherlands	阿姆斯特丹	Amsterdam
冰岛	Iceland	雷克雅未克	Reykjavík
摩尔多瓦	Moldova	基希讷乌	Chișinău
匈牙利	Hungary	布达佩斯	Budapest
希腊	Greece	雅典	Athens
乌克兰	Ukraine	基辅	Kyiv
斯洛文尼亚	Slovenia	卢布尔雅那	Ljubljana
斯洛伐克	Slovakia	布拉迪斯拉发	Bratislava
圣马力诺	San Marino	圣马力诺	San Marino
摩纳哥	Monaco	摩纳哥	Monaco
克罗地亚	Croatia	萨格勒布	Zagreb
马耳他	Malta	瓦莱塔	Valletta
卢森堡	Luxembourg	卢森堡	Luxembourg
直布罗陀	Gibraltar	直布罗陀	Gibraltar
立陶宛	Lithuania	维尔纽斯	Vilnius
阿尔巴尼亚共和国	The Republic of Albania	地拉那	Tirana
挪威	Norway	奥斯陆	Oslo
埃及	Egypt	开罗	Cairo
苏丹	Sudan	喀土穆	Khartoum
埃塞俄比亚	Ethiopia	亚的斯亚贝巴	Addis Ababa
厄立特里亚	Eritrea	阿斯马拉	Asmara
索马里	Somalia	摩加迪休	Mogadishu
利比亚	Libya	的黎波里	Tripoli
阿尔及利亚	Algeria	阿尔及尔	Algiers
突尼斯	Tunisia	突尼斯	Tunis
摩洛哥	Morocco	拉巴特	Rabat
佛得角	Cape Verde	普拉亚	Praya
毛里塔尼亚	Mauritania	努瓦克肖特	Nouakchott
马里	Mali	巴马科	Bamako
塞内加尔	Senegal	达喀尔	Dakar
几内亚比绍	Guinea-Bissau	比绍	Bissau
几内亚	Guinea	科纳克里	Conakry
塞拉利昂	Sierra Leone	弗里敦	Freetown
利比里亚	Liberia	蒙罗维亚	Monrovia
布基纳法索	Burkina Faso	瓦加杜古	Ouagadougou
尼日尔	Niger	尼亚美	Niamey
乍得	Chad	恩贾梅纳	N'Djamena
尼日利亚	Nigeria	阿布贾	Abuja
科特迪瓦	Côte d'Ivoire	亚穆苏克罗	Yamoussoukro
加纳	Ghana	阿克拉	Accra
多哥	Togo	洛美	Lomé
贝宁	Benin	波多诺伏	Porto-Novo
喀麦隆	Cameroon	雅温得	Yaoundé
加蓬	Gabon	利伯维尔	Libreville
赤道几内亚	Equatorial Guinea	马拉博	Malabo
圣多美和普林西比	Sao Tome and Principe	圣多美	São Tomé
中非	Central African Republic	班吉	Bangui
刚果(布)	Congo	布拉柴维尔	Brazzaville
刚果(金)	Congo (Democratic Republic of the)	金沙萨	Kinshasa
乌干达	Uganda	坎帕拉	Kampala
卢旺达	Rwanda	吉佳利	Kigali
布隆迪	Burundi	布琼布拉	Bujumbura
坦桑尼亚	Tanzania	多多马	Dodoma
肯尼亚	Kenya	内罗毕	Nairobi
安哥拉	Angola	罗安达	Luanda
赞比亚	Zambia	卢萨卡	Lusaka
马拉维	Malawi	利隆圭	Lilongwe
莫桑比克	Mozambique	马普托	Maputo
马达加斯加	Madagascar	塔那那利佛	Antananarivo
科摩罗	Comoros	莫洛尼	Moroni
塞舌尔	Seychelles	維多利亞	Victoria
毛里求斯	Mauritius	路易港	Port Louis
津巴布韦	Zimbabwe	哈拉雷	Harare
博茨瓦纳	Botswana	嘉柏隆里	Gaborone
澳大利亚	Australia	堪培拉	Canberra
巴布亚新几内亚	Papua New Guinea	莫尔兹比港	Port Moresby
所罗门群岛	Solomon Islands	霍尼亚拉	Honiara
瓦努阿图	Palestina	维拉港	Port Vila
新西兰	New Zealand	惠灵顿	Wellington
斐济	Fiji	苏瓦	Suva
汤加	Tonga	努库阿洛法	Nuku'alofa
基里巴斯	Kiribati	南塔拉瓦	South Tarawa
图瓦卢	Tuvalu	富纳富提	Funafuti
萨摩亚	Samoa	阿皮亚	Apia
密克罗尼西亚联邦	Federated States of Micronesia	帕利基尔	Palikir
马绍尔群岛	Marshall Islands	马朱罗	Majuro
美利坚合众国	The United States of America	华盛顿哥伦比亚特区	Washington
墨西哥合众国	The United Mexican States	墨西哥城	Mexico City
危地马拉共和国	The Republic of Guatemala	瓜地馬拉	Guatemala City
伯利兹	Belize	贝尔墨邦	Belmopan
尼加拉瓜共和国	The Republic of Nicaragua	馬拿瓜	Managua
古巴共和国	The Republic of Cuba	哈瓦那	Havana
巴哈马国	The Commonwealth of The Bahamas	拿骚	Nassau
海地共和国	The Republic of Haiti	太子港	Port-au-Prince
帕劳	Palau	梅莱凯奥克	Melekeok
纳米比亚	Namibia	温得和克	Windhoek
莱索托	Lesotho	马塞卢	Maseru
南非	South Africa	比勒陀利亚	Pretoria
洪都拉斯共和国	The Republic of Honduras	特古西加尔巴	Tegucigalpa
哥斯达黎加共和国	The Republic of Costa Rica	圣何塞	San Jose
巴拿马共和国	The Republic of Panama	巴拿马城	Panama City
多米尼加共和国	The Dominican Republic	圣多明哥	Santo Domingo
牙买加	Jamaica	金斯敦	Kingstown
 圣基茨和尼维斯联邦	The Federation of Saint Kitts and Nevis	巴斯特尔	Basse-Terre
安提瓜和巴布达	Antigua and Barbuda	圣约翰	Saint John's
多米尼克国	The Commonwealth of Dominica	罗索	Roseau
圣卢西亚	Saint Lucia	卡斯特里	Castries
格林纳达	Grenada	圣乔治	St. George's
巴巴多斯	Barbados	布里奇顿	Bridgetown
特立尼达和多巴哥共和国	The Republic of Trinidad and Tobago	西班牙港	Port of Spain
哥伦比亚	Colombia	波哥大	Bogotá
厄瓜多尔	Ecuador	基多	Quito
委内瑞拉	Venezuela	加拉加斯	Caracas
圭亚那	Guyana	乔治敦	Georgetown
苏里南	Suriname	帕拉马里博	Paramaribo
秘鲁	Peru	利马	Lima
玻利维亚	Bolivia	苏克雷	Sucre
巴拉圭	Paraguay	亚松森	Asunción
阿根廷	Argentina	布宜诺斯艾利斯	Buenos Aires
乌拉圭	Uruguay	蒙得维的亚	Montevideo
智利	Chile	圣地亚哥	Santiago
巴基斯坦	Pakistan	伊斯兰堡	Islamabad
巴西	Brazil	巴西利亚	Brasília
德国	Germany	柏林	Berlin
缅甸联邦共和国	The Republic of the Union of Myanmar	奈比多	Naypyidaw

 四、总结

        以上就是本文的主要内容,博客主要讲解如何在SpringBoot和PostGIS的首都信息管理,首先讲解结合全球城市信息和全球国家信息进行空间数据库表的建模,然后讲解如何在SpringBoot中的业务逻辑管理设计与实现,最后给出当前的数据整理出来的全球首都信息成果列表。行文仓促,定有许多的不足之处,如有不足,在此还恳请各位专家朋友在评论区不吝之处,不胜感激。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。