MapApi.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { DataModel, transformArrayDataModel, type NewDataModel } from '@imengyu/js-request-transform';
  2. import { MapServerRequestModule } from '../RequestModules';
  3. import { type QueryParams } from '@imengyu/imengyu-utils';
  4. export class Poi extends DataModel<Poi> {
  5. constructor() {
  6. super(Poi, "Poi");
  7. this.setNameMapperCase('Camel', 'Snake');
  8. this._convertTable = {
  9. location: { clientSide: 'splitCommaArray' },
  10. };
  11. this._convertKeyType = (key, direction) => {
  12. if (key.endsWith('Time'))
  13. return {
  14. clientSide: 'date',
  15. serverSide: 'string',
  16. };
  17. return undefined;
  18. };
  19. }
  20. name = '';
  21. location = [] as number[];
  22. type = '';
  23. address = '';
  24. cityname = '';
  25. }
  26. export class MapApi extends MapServerRequestModule<DataModel> {
  27. constructor() {
  28. super();
  29. }
  30. /**
  31. * 逆地址编码,根据经纬度获取详细地址
  32. * @param lat 纬度
  33. * @param lng 经度
  34. * @returns 详细地址
  35. */
  36. async regeo(lat: number, lng: number) {
  37. const data = (await this.post<any>(`https://subserver.wenlvti.net/localgeo/localGeo/getGeo`, `逆地址编码`, {
  38. lat: lat.toFixed(6),
  39. lng: lng.toFixed(6),
  40. }));
  41. return data.raw as {
  42. formatAddress: string,
  43. province: string,
  44. city: string,
  45. district: string,
  46. street: string,
  47. adcode: string,
  48. level: null
  49. }
  50. }
  51. loadCityData() {
  52. return new Promise((resolve, reject) => {
  53. uni.request({
  54. url: 'https://mn.wenlvti.net/app_static/xiangyuan/data/ChinaCityData.slim.json',
  55. method: 'GET',
  56. success(result) {
  57. if (result.statusCode === 200) {
  58. resolve(result.data);
  59. } else {
  60. reject(new Error(`请求失败,状态码:${result.statusCode}`));
  61. }
  62. },
  63. fail(error) {
  64. reject(error);
  65. }
  66. })
  67. });
  68. }
  69. loadCountryGeoJsonData() {
  70. return new Promise((resolve, reject) => {
  71. uni.request({
  72. url: 'https://mn.wenlvti.net/app_static/xiangyuan/data/100000_full.json',
  73. method: 'GET',
  74. success(result) {
  75. if (result.statusCode === 200) {
  76. resolve(result.data);
  77. } else {
  78. reject(new Error(`请求失败,状态码:${result.statusCode}`));
  79. }
  80. },
  81. fail(error) {
  82. reject(error);
  83. }
  84. })
  85. });
  86. }
  87. loadGeoJsonData(code: string) {
  88. return new Promise((resolve, reject) => {
  89. uni.request({
  90. url: `https://mn.wenlvti.net/app_static/xiangyuan/data/${code}_full.json`,
  91. method: 'GET',
  92. success(result) {
  93. if (result.statusCode === 200) {
  94. resolve(result.data);
  95. } else {
  96. reject(new Error(`请求失败,状态码:${result.statusCode}`));
  97. }
  98. },
  99. fail(error) {
  100. reject(error);
  101. }
  102. })
  103. });
  104. }
  105. }
  106. export default new MapApi();